¿Cómo hago la autorización e inicio de session con WeChat usando iOS SDK?

¿Cómo hago la autorización e inicio de session con WeChat usando iOS SDK? No parece haber mucha información sobre esto en el desbordamiento de stack o google y la mayoría de los documentos están en chino.

Eligiendo responder a mi propia pregunta aquí, ya que parece haber falta de información sobre esto en el desbordamiento de stack y google. Espero que otros también lo encuentren útil.

1.) Sigue la excelente respuesta de Suragch sobre cómo configurar el SDK de iOS: ¿Cómo agregar la API de WeChat a un proyecto Swift? . Asegúrese de que AppDelegate esté configurado como se describe con los func onReq(req: BaseReq!) Y func onResp(resp: BaseResp!) Implementados.

2.) Para que el inicio de session y la autorización funcionen, DEBES download y usar la versión china del SDK. Curiosamente, algunas de las funciones necesarias para iniciar session se eliminan de la versión en inglés. SDK chino aquí: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&lang=zh_CN

3.) En primer lugar, queremos autorizar la aplicación que queremos usar con WeChat. Esto se puede hacer así:

 let req = SendAuthReq() req.scope = "snsapi_userinfo" //Important that this is the same req.state = "co.company.yourapp_wx_login" //This can be any random value WXApi.sendReq(req) 

Esto debería devolver un código a func onResp(resp: BaseResp!) Implementé el método como tal – desencadenando una notificación:

 func onResp(resp: BaseResp!) { if let authResp = resp as? SendAuthResp { if authResp.code != nil { let dict = ["response": authResp.code] NSNotificationCenter.defaultCenter().postNotificationName("WeChatAuthCodeResp", object: nil, userInfo: dict) } else { let dict = ["response": "Fail"] NSNotificationCenter.defaultCenter().postNotificationName("WeChatAuthCodeResp", object: nil, userInfo: dict) } } else { let dict = ["response": "Fail"] NSNotificationCenter.defaultCenter().postNotificationName("WeChatAuthCodeResp", object: nil, userInfo: dict) } } 

4.) Con el código ahora podemos intentar get el openID y el accessToken. Para hacer esto necesitamos build un enlace usando el appID , appSecret y hacer una request HTTP GET. appID y appSecret son detalles que obtienes al registrar la aplicación con WeChat. Ejemplo como tal:

 private let appID = "somecode2132113" private let appSecret = "someappsecret213123" private let accessTokenPrefix = "https://api.weixin.qq.com/sns/oauth2/access_token?" private func buildAccessTokenLink(withCode code: String) -> String { return accessTokenPrefix + "appid=" + appID + "&secret=" + appSecret + "&code=" + code + "&grant_type=authorization_code" } 

Con este enlace podemos realizar una request HTTP GET y get openID y accessToken en JSON. (Pruébelo en el cartero). No publicaré el código para esto, pero estoy usando Alamofire.

5.) Finalmente, podemos ir un paso más allá y tratar de get el apodo y foto de perfil del usuario de WeChat. Muy similar a antes de que creamos un nuevo enlace usando openID y accessToken que obtuvimos en el paso anterior. Al igual que:

 private let userInfoPrefix = "https://api.weixin.qq.com/sns/userinfo?" private func buildUserInfoLink(withOpenID openID: String, accessToken: String) -> String { return userInfoPrefix + "access_token=" + accessToken + "&openid=" + openID } 

¡Una vez más, realice una request HTTP GET y JSON devolverá el apodo y el enlace de la foto del perfil!

Además: guía detallada aquí: http://www.kekearif.com/how-to-implement-ios-wechat-login/