iOS微信授权登录

微信开发平台
Demo源码 (记得给个star哦)

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


微信授权登录功能是使用的OAuth2.0协议,适用于拥有服务端的应用授权
在开始开发前,建议先仔细阅读该协议的几种认证模式中的Authorization Code认证,对后续流程理解上会有很大的帮助

Authorization Code认证模式大概流程如下:

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

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

因此,强烈建议将AppSecret放在服务端,并由服务器来完成后续步骤

废话说的有点多了,下面直接看代码:


第一步:请求Authorization 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
        }
    }
}

第二步:通过Authorization Code请求Access Token

拿到Authorization Code之后,获取Access Token,发送GET请求到下面这个URL

https://api.weixin.qq.com/sns/oauth2/access_token?appid=[APP_ID]&secret=[APP_SECRET]&code=[AUTHORIZATION_CODE]&grant_type=authorization_code

返回说明:

{
    "access_token":"ACCESS_TOKEN", //接口调用凭证
    "expires_in":7200, //access_token接口调用凭证超时时间,单位(秒)
    "refresh_token":"REFRESH_TOKEN", //用户刷新access_token
    "openid":"OPENID", //授权用户唯一标识
    "scope":"SCOPE" //用户授权的作用域,使用逗号(,)分隔
}

第三步:通过Access Token请求Union Id

拿到Access Token和OpenID后,获取用户个人信息,发送GET请求到下面这个URL:

https://api.weixin.qq.com/sns/userinfo?access_token=[ACCESS_TOKEN]&openid=[OPEN_ID]

返回说明:

{
    "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(用户统一标识)针对一个微信开放平台帐号下的所有应用,同一用户的UnionID是唯一的,如果需要做账号第三方登录绑定业务逻辑,就用这个字段

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

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

微信分享
微信支付
适配Universal Links

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 标签(空格分隔): iOS 我的计划1.使用微信SDK实现微信第三方登录2.使用友盟实现第三方登录3.使用open...
    iOS_愛OS阅读 5,753评论 1 9
  • 注意:代码自己动手写,不要复制! GitHub 一、接入微信第三方登录准备工作。 移动应用微信登录是基于OAuth...
    大冲哥阅读 15,060评论 0 7
  • 微信第三方登录实现的全过程:iOS微信登录注意事项:1、目前移动应用上微信登录只提供原生的登录方式,需要用户安装微...
    weyan阅读 2,584评论 0 4
  • --浓郁的学习环境-- 你交际圈子的水平,基本上决定了你自己的水平。 在一所超级中学读书意味着,你的周围会生活着很...
    清莹和五味阅读 281评论 0 0
  • 中午看了董卿的新节目,叫《朗读者》。不同的人,不同的生活。 我很敬仰那种能一开口,就会让人感到既亲切又崇敬的人。都...
    其实Xl阅读 207评论 0 0