iOS微信授权登录

作者: Geniune | 来源:发表于2018-08-23 14:18 被阅读452次

微信开发平台:https://open.weixin.qq.com
iOS Demo:https://github.com/Geniune/WXApi (记得给个star哦)

首先需要确保你的App应用在微信开发平台上注册创建并获得对应的接口,对应登录、支付等功能还涉及付费,具体申请流程就不再这里说了。到开放平台->管理中心->移动应用->查看应用,如下图所示,确认你的应用已获得微信登录接口(很多小伙伴注册账号完成后就开始使用微信登录和支付,其实这些功能是需要另外申请开通的),应用审核通过后,平台会给我们两个字符串,分别为AppID和AppSecret,把它们记下备用。

接下来就是接入SDK,到无需报开发平台->资源中心->资源下载中,找到iOS资源下载,里面提供了两套工具包,其中一套不包含支付功能。

微信使用的是OAuth2.0授权登录,适用于拥有服务端的应用授权,模式流程如下:

  1. 第三方发起微信授权登录请求,用户允许授权第三方应用后,微信会拉起应用,并带上授权的临时数据也就是“code”参数(原生App实现)
  2. 服务端通过code加上AppID和AppSecret等参数,通过API换取access_token(建议服务端实现)
  3. 通过access_token进行接口调用,获取微信用户的基本数据资源(建议服务端实现)

微信在官方文档中给出风险说明:
1、Appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret);
2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户微信相关接口功能被恶意发起等行为;
3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。

强烈建议将AppSecret和access_token等放在服务端,服务器来完成第2、3步

第一步:请求code
原生应用使用微信SDK授权登录

- (void)sendWXAuthReq{
    
    if([WXApi isWXAppInstalled]){//判断用户是否已安装微信App
        
        SendAuthReq *req = [[SendAuthReq alloc] init];
        req.state = @"wx_oauth_authorization_state";//用于保持请求和回调的状态,授权请求或原样带回
        req.scope = @"snsapi_userinfo";//授权作用域:获取用户个人信息
        
        [WXApi sendReq:req];//发起微信授权请求
    }else{
        
        //提示:未安装微信应用或版本过低
    }
}

在回调函数中获取code

- (void)onResp:(id)resp{

    if([resp isKindOfClass:[SendAuthResp class]]){//判断是否为授权登录类

        SendAuthResp *req = (SendAuthResp *)resp;

        if([req.state isEqualToString:@"wx_oauth_authorization_state"]){//微信授权成功

            req.code //获得code
        }
    }
}

第二步:通过code请求access_token
获取到第一步的code之后,GET请求以下链接获取access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
返回说明:

{
    "access_token":"ACCESS_TOKEN", //接口调用凭证
    "expires_in":7200, //access_token接口调用凭证超时时间,单位(秒)
    "refresh_token":"REFRESH_TOKEN", //用户刷新access_token
    "openid":"OPENID", //授权用户唯一标识
    "scope":"SCOPE", //用户授权的作用域,使用逗号(,)分隔
    "unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL" //当且仅当该移动应用已获得该用户的userinfo授权时,才会出现该字段
}

第三步:通过access_token调用接口
获取到第二步的access_token和openid后,GET请求以下链接获取用户个人信息
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
返回说明:

{
    "openid":"OPENID", //用户的标识,对当前开发者帐号唯一
    "nickname":"NICKNAME", //用户昵称
    "sex":1, //用户性别,1为男性,2为女性
    "province":"PROVINCE", //用户个人资料填写的省份
    "city":"CITY", //用户个人资料填写的城市
    "country":"COUNTRY", //国家,如中国为CN
    "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", //用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
    "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" //用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。
}

这里强烈建议开发小伙伴区分集成微信、腾讯、微博SDK,不要使用类似友盟,通常情况下做社会化分享等确实需要用到这三样,但是问题来了,如果其中某个更新了SDK而友盟没有同步导致一些问题,那就废了

由于移动应用上微信登录只提供了原生的登录方式,必须配合微信客户端才能正常使用。所以对iOS应用而言考虑到审核指南中的相关规定,建议在接入SDK时调用WXApi中isWXAppInstalled函数来检测当前用户手机是否已安装微信客户端,对未安装的用户隐藏对应微信登录按钮,防止审核被拒绝。

微信分享
微信支付

如果本文对你有所帮助记得点个赞哈

相关文章

  • 2018-11-30

    iOS版APP只使用微信授权登录且用户未安装微信如何解决? - 知乎

  • 微信登录

    iOS微信授权登录+Universal Link(通用链接)[https://www.jianshu.com/p/...

  • uniapp中微信授权登录

    该开始微信授权登录可以,后来又不行了,点击微信授权登录没有反应,在设置微信登录的按钮中添加 微信授权登录 监听 g...

  • 苹果授权登录-2021-03-04-周四

    简介 和微信授权登录类似,苹果也有授权登录;需要登录开发者网站打开这个功能;在XCode中也要打开这个功能。iOS...

  • iOS微信授权登录

    微信开发平台:https://open.weixin.qq.comiOS Demo:https://github....

  • IOS 微信授权登录

    没有添加白名单的话只能用短信登录 Scheme白名单问题(无法判断手机是否安装微信等) -canOpenURL: ...

  • apche服务器下无后缀文件配置浏览器访问自动下载

    1.在配置最新的IOS app 微信授权登录时 SDK时,碰到一个问题。服务器端需要配置IOS唤起微信APP授权的...

  • php 微信授权登录 40029错误

    php 微信授权登录 40029错误 授权登录是微信高级api,个人开发可以使用微信测试账号进行开发。在授权的过程...

  • iOS微信登录快速集成步骤

    iOS微信登录快速集成步骤 iOS微信登录快速集成步骤

  • h5微信登录

    步骤: 说明: 微信授权登录 微信公众平台 微信 内置 浏览器内登录(一般用于移动端网站,公众号登录) 网页授权方...

网友评论

  • 厚脸皮小强打不死的小强:如果已经授权登录了,退出账号,第二次在使用微信登录的时候,怎么让微信再次弹出授权登录页面
    Geniune:如果已给你当前手机上的app授权过,第二次发起不会再弹出授权界面,其余流程不变

本文标题:iOS微信授权登录

本文链接:https://www.haomeiwen.com/subject/umopiftx.html