美文网首页Swift做产品的经验一二
【第三方】微信授权登录

【第三方】微信授权登录

作者: 刘大帅 | 来源:发表于2015-04-02 15:39 被阅读14635次

在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。我是从产品那里得到的,所以就不写这个步骤了。。。

1、下载SDK

下载地址

下载地址

2、将SDK放入工程

将SDK放入工程

我选择的无模拟器版,即“WeChatSDK_1.5_OnlyIphone”,这大约可以省一半的体积(OnlyPhone体积2.2M,兼容模拟器的体积4.2M)

3、观察微信API

通过我的观察,微信API大概可以分为两部分,一部分是第三方APP发送信息(文本,图片,音频,链接等等)到微信的会话、朋友圈或者收藏,还有就是微信授权登录(API中多以Resp,response作结尾),这是我常用的;另一部分是微信发送信息给第三方APP,这一部分没尝试过(API中多以Req,request作结尾)。

4、补充一些框架

添加一些框架

我在使用SDK时需要添加libc++.dylib ,否则编译报错,可是官方文档并没有提示,不知为何。

5、添加URL scheme

添加URL TYPE

Identifier中填写自定义的文本。

6、向微信终端程序注册第三方应用,并在第三方应用实现从微信返回

在AppDelegate.m中引入"WXApi.h"头文件,然后

向微信终端程序注册第三方应用,并在第三方应用实现从微信返回

7、请求CODE

在要微信授权登录的controller中引入"WXApi.h"头文件,编写请求code的代码,如下图:

请求CODE

执行该方法后,如果客户端安装了微信,那么就会向微信请求相应的授权,如图:

请求Code会结合需求扩展变化

相关情况,参见刷新或续期access_token使用

让AppDelegate遵守<WXApiDelegate>协议,并实现协议方法onResp:,我们在该方法中接收请求回来的数据,如下图:

实现onResp:方法,接收返回的响应

参数说明

参数 是否必须 说明
appid 应用唯一标识,在微信开放平台提交应用审核通过后获得
scope 应用授权作用域,如获取用户个人信息则填写snsapi_userinfo(什么是授权域
state 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验

返回说明

用户点击授权后,微信客户端会被拉起,跳转至授权界面,用户在该界面点击允许或取消,SDK通过SendAuth的Resp返回数据给调用方。

返回值 说明
ErrCode ERR_OK = 0(用户同意),ERR_AUTH_DENIED = -4(用户拒绝授权),ERR_USER_CANCEL = -2(用户取消)
code 用户换取access_token的code,仅在ErrCode为0时有效
state 第三方程序发送时用来标识其请求的唯一性的标志,由第三方程序调用sendReq时传入,由微信终端回传,state字符串长度不能超过1K
lang 微信客户端当前语言
country 微信用户当前国家信息

8、通过code获取access_token

获取第一步的code后,请求以下链接获取access_token:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code  

相关代码参见图片实现onResp:方法,接收返回的响应图。

参数说明

参数 是否必须 说明
appid 应用唯一标识,在微信开放平台提交应用审核通过后获得
secret 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code 填写第一步获取的code参数
grant_type 填authorization_code

返回说明

正确的返回:

{ 
"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", 
"scope":"SCOPE",
"unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"
}  
参数 说明
access_token 接口调用凭证
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 授权用户唯一标识
scope 用户授权的作用域,使用逗号(,)分隔
unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段

错误返回样例:

{"errcode":40029,"errmsg":"invalid code"}  

9、获取用户个人信息(UnionID机制)

获取用户个人信息

10、最后

最后,你应该还会有上传用户响应标识到公司后台的需求,这具体的实现就要靠自己的实现了。

有的同学可能已经发现,一个微信授权需要涉及两个大类,一个登录的controller,一个是AppDelegate,这两个类之间通信,需要代理或者其他设计模式来支持.

大致流程就是这样,如有错误或不足,欢迎斧正。

相关文章

  • 微信授权注册与登陆

    前段时间公司网站登录注册改版,做了基于微信的第三方授权登录和注册,下面说的是网站应用微信授权实现登录注册,。踩了一...

  • oAuth介绍

    OAuth open authorization 开放认证一般用于第三方登录,例如微信授权登录,在不知道你微信账号...

  • 微博,微信Oauth2.0授权

    过程都是一样的: 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并...

  • Swift_微信第三方登录

    一、接入微信第三方登录准备工作。 移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录...

  • 13iOS微信第三方登录实现

    一、接入微信第三方登录准备工作。移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系...

  • uniapp中微信授权登录

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

  • 移动应用微信授权登录iOS

    简单介绍 微信OAuth2.0授权登录,简单来说:就是,让微信用户使用微信身份安全登录第三方应用或网站。 1、Un...

  • H5及web页面微信授权登录流程

    PC端微信扫码登录流程: 为什么要微信登录: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制...

  • php 微信授权登录 40029错误

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

  • ShareSDK 退出第三方登录和登录分享里面的一些注意事项

    2018.8.17 微信登录时,授权一次过后会返回refresh_token ,为用户授权第三方应用的长效凭证,...

网友评论

  • Bye逝去的青春:目前已经解决直接从微信打开的链接可以直接点击下载APP的跳转,无需再通过另外浏览中打开才能点击下载,在微信中即可直接点击下载,需要的联系Q 7 7 4 0 8 02 6
  • 蛮荒星域:大神,能发个demo吗?我的回调有问题,OnResp代理不执行。模拟器执行了真机没有执行
    蛮荒星域:@刘大帅 我找到原因了。- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 这个真机上没有支持。模拟器是支持的,所以要在- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation增加回调方法就好了。两个建议都保留。
    刘大帅:@蛮荒星域
    愧不敢当,确实没有Demo...
  • 乌龟的慢生活:请问,保存的唯一信息时access_token吗还是openid
  • wo叫天然呆:那个授权登录界面是哪里来的,我看市面上很多应用的授权界面都不一样,应该不是微信送的,是不是也要我们自己开发?如何开发?在哪里开发?是不是要绑定公众号?
  • jadyn_JT:你好,请问下微信怎么注销登录授权
    陶雨轩:点击退出按钮的时候,直接将你记录的accesstoken 给置为空,下一次请求,如果没有accesstoken ,就向微信请求认证。这样不就重新登录了。
    刘大帅:@风雨骑士 最近没做这方面的,都淡忘了。。。
    jadyn_JT:现在项目需要加上这个功能,但在WX中没找到有这样的方法
  • 水户洋平_Psist:大神 问个问题 现在我们公司做的APP就是个普通APP给普通用户的 我看你的例子里 access_token/refresh_token/appsecretid都存在了客户端 这样做可以吗。
    刘大帅:@水户洋平_Psist 不好意思,不记得了...
  • 大胖_康:大神,还有没有Demo.
    大胖_康:@刘大帅 大神都是直接上代码到项目中的 :smile:
    刘大帅:@69520eb15b8d 这个当时没写demo...
  • f829cbf24d95:大神,能留个联系方式么?
    刘大帅:@iOS_developer92 我也是1年前用过,都淡忘了...
    建议还是多尝试,再仔细看一下微信平台的说明,是不是哪里疏忽了
    f829cbf24d95:@刘大帅 最近在做的app有这个功能,之前没做过,想问你一些问题
    刘大帅:@iOS_developer92 不是大神...有什么要切磋的么?

本文标题:【第三方】微信授权登录

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