移動應用微信登錄是基於OAuth2.0協議標準構建的微信OAuth2.0授權登錄系統。
進行微信OAuth2.0授權登錄接入之前,先在微信開放平台註冊開發者賬號,並擁有一個已審核通過的移動應用,獲得相應的AppID和AppSecret,申請微信登錄且通過審核後,可開始接入流程。
目前移動應用上微信登錄只提供原生的登錄方式,需要用戶安裝微信客戶端才能配合使用。
微信登錄的流程如下。
開發者需要配合使用微信開放平台提供的SDK進行授權登錄請求接入。正確接入SDK並擁有相關授權域權限後,開發者移動應用會在終端本地拉起微信應用進行授權登錄,微信用戶確認後,微信將拉起開發者移動應用,並帶上授權臨時票據(Code)。
iOS平台應用授權登錄接入代碼示例如下。
-(void)sendAuthRequest { // 構造SendAuthReq結構體 SendAuthReq* req =[[[SendAuthReq alloc ] init ] autorelease ]; req.scope = @"snsapi_userinfo" ; req.state = @"123" ; // 第三方向微信終端發送一個SendAuthReq消息結構 [WXApi sendReq:req]; }
Android平台應用授權登錄接入代碼示例如下。
{ // send OAuth request Final SendAuth.Req req = new SendAuth.Req; req.scope = "snsapi_userinfo"; req.state = "wechat_sdk_demo_test"; api.sendReq(req); }
上述數據的參數說明如表22-1所示。
表22-1 移動應用微信登錄參數說明
微信客戶端會被拉起,跳轉至微信登錄授權界面,如圖22-2所示。
圖22-2 移動應用微信登錄
當用戶點擊「確認登錄」按鈕時,SDK通過SendAuth的Resp返回ErrCode和code等參數給調用方。相關參數的說明如表22-2所示。
表22-2 微信登錄返回參數
獲取第一步的code後,請求接口獲取access_token,接口地址如下。
https:// api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
上述數據的參數說明如表22-3所示。
表22-3 獲取access_token接口的參數說明
正確創建時,返回的數據示例如下。
{ "access_token": "OezXcEiiBSKSxW0eoylIeOZ0dfxvb93UyrFdwznvwUv3JkVNVV1yFvQQa3IfuyMi4i ZGDsAfe81sCaUXxyKrI-5XgCvhAS02eAC4MF2fJFl80Y9s-0h1EsuBmIVKgu0GnKhxCQ0M8G-gkQAJpzLzmQ", "expires_in": 7200, "refresh_token": "OezXcEiiBSKSxW0eoylIeOZ0dfxvb93UyrFdwznvwUv3JkVNVV1yFvQQa3IfuyMiH 7dCabGFyMRtZHnHPHuEK78cf1eISYJ4y453T8pDa2tFAIJu8bFeLMBpeFSv9dgnGrK-ZfRxHzhq7IW4qevEMQ", "openid": "oH9d2v7NmDhsFzICG63UPSIOgUcY", "scope": "snsapi_userinfo", "unionid": "o4wcnwx0BVC4F_hSl5qCd5rC4Jps" }
上述數據的參數說明如表22-4所示。
表22-4 獲取access_token接口返回參數說明
最後可以通過Access Token和OpenID獲取用戶的基本信息。接口地址如下。
https:// api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
上述數據的參數說明如表22-5所示。
表22-5 獲取用戶基本信息接口的參數說明
正確創建時,返回的數據示例如下。
{ "openid": "oH9d2v7NmDhsFzICG63UPSIOgUcY", "nickname": "方倍", "sex": 0, "language": "zh_CN", "city": "", "province": "", "country": "CN", "headimgurl": "http:// wx.qlogo.cn/mmopen/pburdzLK7PUTcFw3ozK52Gravkznno51DSjnq nzsG6WzJLUOtadGBYYSVqh5YDicdawxrD6hHoR96OcyyDWAEgA/0", "privilege": , "unionid": "o4wcnwx0BVC4F_hSl5qCd5rC4Jps" }
上述數據的參數說明如表22-6所示。
表22-6 獲取用戶基本信息接口返回參數說明
至此,移動應用就完成了微信用戶的登錄過程,並獲得了用戶的個人基本信息。