這篇文章主要介紹了IOS如何實現(xiàn)微信授權(quán)登錄功能,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了天等免費建站歡迎大家使用!
1、微信授權(quán)的定義
微信OAuth3.0授權(quán)登錄讓微信用戶使用微信身份安全登錄第三方應(yīng)用或網(wǎng)站,在微信用戶授權(quán)登錄已接入微信OAuth3.0的第三方應(yīng)用后,第三方可以獲取到用戶的接口調(diào)用憑證(access_token),通過access_token可以進(jìn)行微信開放平臺授權(quán)關(guān)系接口調(diào)用,從而可實現(xiàn)獲取微信用戶基本開放信息和幫助用戶實現(xiàn)基礎(chǔ)開放功能等。
2、微信授權(quán)的步驟
第三方發(fā)起微信授權(quán)登錄請求,微信用戶允許授權(quán)第三方應(yīng)用后,微信會拉起應(yīng)用或重定向到第三方網(wǎng)站,并且?guī)鲜跈?quán)臨時票據(jù)code參數(shù);
通過code參數(shù)加上AppID和AppSecret等,通過API換取access_token;
通過access_token進(jìn)行接口調(diào)用,獲取用戶基本數(shù)據(jù)資源或幫助用戶實現(xiàn)基本操作。
3、準(zhǔn)備工作
在做微信授權(quán)登錄之前我們需要做一些準(zhǔn)備工作。
具體的直接看微信開發(fā)者文檔就可以了,地址如下:iOS接入指南
除了微信開發(fā)者文檔中提到的幾點,還有幾個地方需要注意
3.1、更改plist文件如下
App Transport Security Setting設(shè)置
iOS9中新增App Transport Security(簡稱ATS)特性, 主要使到原來請求的時候用到的HTTP,都轉(zhuǎn)向TLS1.2協(xié)議進(jìn)行傳輸。這也意味著所有的HTTP協(xié)議都強制使用了HTTPS協(xié)議進(jìn)行傳輸。需要在Info.plist新增一段用于控制ATS的配置:
NSAppTransportSecurity NSAllowsArbitraryLoads
這樣就可以允許HTTP傳輸了
4、微信授權(quán)第一步:獲取code
我們假設(shè)在界面上有一個按鈕,用戶點擊該按鈕,就會發(fā)起微信授權(quán)操作。
那么代碼如下:
-(IBAction)sendAuthRequest { //構(gòu)造SendAuthReq結(jié)構(gòu)體 SendAuthReq* req =[[[SendAuthReq alloc ] init ] autorelease ]; req.scope = @"snsapi_userinfo" ; req.state = WXPacket_State ;//用于在OnResp中判斷是哪個應(yīng)用向微信發(fā)起的授權(quán),這里填寫的會在OnResp里面被微信返回 //第三方向微信終端發(fā)送一個SendAuthReq消息結(jié)構(gòu) [WXApi sendReq:req]; }
4.1、參數(shù)說明
4.2、拉起微信授權(quán)頁面
4.3、返回結(jié)果說明
5、微信授權(quán)第二步:通過code獲取access_token,openid,unionid
獲取第一步的code后,請求以下鏈接獲取access_token,openid,unionid:
https://api.weixin.qq.com/sns/oauth3/access_token?
appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
通過上一步拉起微信授權(quán)頁面,用戶點擊確認(rèn)登錄,成功之后,就會調(diào)用微信代理中的回調(diào)函數(shù)OnResp函數(shù),我們可以在該函數(shù)里面獲取access_token,openid,unionid
在AppDelegate.m文件中實現(xiàn)代碼如下:
//微信代理方法 - (void)onResp:(BaseResp *)resp { SendAuthResp *aresp = (SendAuthResp *)resp; if(aresp.errCode== 0 && [aresp.state isEqualToString:WXPacket_State]) { NSString *code = aresp.code; [self getWeiXinOpenId:code]; } } //通過code獲取access_token,openid,unionid - (void)getWeiXinOpenId:(NSString *)code{ NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth3/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",AppId,AppSerect,code]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSURL *zoneUrl = [NSURL URLWithString:url]; NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil]; NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding]; dispatch_async(dispatch_get_main_queue(), ^{ if (data){ NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSString *openID = dic[@"openid"]; NSString *unionid = dic[@"unionid"]; } }); }); }
5.1返回說明:
5.2、刷新access_token有效期
5.2.1、返回說明
6、微信授權(quán)第三步:通過access_token獲取個人信息
6.1、接口說明
此接口用于獲取用戶個人信息。開發(fā)者可通過OpenID來獲取用戶基本信息。特別需要注意的是,如果開發(fā)者擁有多個移動應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號,可通過獲取用戶基本信息中的unionid來區(qū)分用戶的唯一性,因為只要是同一個微信開放平臺帳號下的移動應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號,用戶的unionid是唯一的。換句話說,同一用戶,對同一個微信開放平臺下的不同應(yīng)用,unionid是相同的。請注意,在用戶修改微信頭像后,舊的微信頭像URL將會失效,因此開發(fā)者應(yīng)該自己在獲取用戶信息后,將頭像圖片保存下來,避免微信頭像URL失效后的異常情況。
請求接口
http請求方式: GET
請求地址:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
參數(shù)和返回數(shù)據(jù)說明
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“IOS如何實現(xiàn)微信授權(quán)登錄功能”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!