微信开放平台微信登录功能 /移动应用扫码登录
功能概述
扫码登录能力,指的是开发者可在移动应用内使用此能力,拉取二维码,用户使用微信客户端扫描二维码后可以登录此移动应用。此能力可被应用在多设备登录、智能硬件、电视盒子等场景。
ios 扫码授权获得 code 流程
步骤一:请求函数
(bool)auth:(nsstring *)appid noncestr:(nsstring *)noncestr timestamp:(nsstring*)timestamp scope:(nsstring *) scope signature:(nsstring *)signature schemedata:(nsstring *)schemedata;
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
云顶集团3118-云顶集团3118acm登录入口id | 是 | 应用唯一标识 |
scope | 是 | 应用授权作用域,拥有多个作用域用逗号(,)分隔,app 所拥有的 scope |
noncestr | 是 | 一个随机的尽量不重复的字符串,用来使得每次的 signature 不同 |
timestamp | 是 | 时间戳 |
signature | 是 | 签名 |
schemedata | 否 | 会在扫码后拼在 scheme 后 |
步骤二:监听二维码回调,回调的时候显示二维码
(void)onauthgotqrcode:(uiimage *)image; //得到二维码
步骤三:用户确认登录之后回调 authcode
-(void)onauthfinish:(int)errcode authcode:(nsstring *)authcode; //成功登录
android 扫码授权流程
流程
首先 app 通过 idiffdevoauth.auth()接口发起授权,然后在 oauthlistener.onauthgotqrcode()回调接口中获取二维码,在 app 中展示二维码,最后用户通过微信扫码,授权.
接口
idiffdevoauth
boolean auth(string appid, string scope, string noncestr, string timestamp, string signature, oauthlistener listener)
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 应用唯一标识 |
scope | 是 | 应用授权作用域,拥有多个作用域用逗号(,)分隔,app 所拥有的 scope |
noncestr | 是 | 一个随机的尽量不重复的字符串,用来使得每次的 signature 不同 |
timestamp | 是 | 时间戳 |
signature | 是 | 签名 |
listener | 是 | 授权流程的回调接口 |
oauthlistener
/**
* auth之后返回的二维码接口
*
* @param qrcodeimgpath 废弃
* @param imgbuf 二维码图片数据
*/
void onauthgotqrcode(string qrcodeimgpath, byte[] imgbuf);
/**
* 用户扫描二维码之后,回调改接口
*/
void onqrcodescanned();
/**
* 用户点击授权后,回调改接口
*/
void onauthfinish(oautherrcode errcode, string authcode);
sdk 扫码登录签名算法
获取 ticket
生成签名之前必须先获取对应的 sdk_ticket。
sdk_ticket 是用于生成签名的临时票据。正常情况下,sdk_ticket 的有效期为 7200 秒,通过 access_token 来获取。由于获取 sdk_ticket 的 api 调用次数非常有限,频繁刷新 sdk_ticket 会导致 api 调用受限,影响自身业务,开发者需在自己的服务存储与更新 sdk_ticket。
1.参考以下文档,使用 app 的 appid 和 appsecret 获取 access_token 获取 access_token,:
2.用第一步拿到的 access_token 采用 http get 方式请求获得 sdk_ticket:
成功返回如下 json:
{
"errcode": 0,
"errmsg": "ok",
"ticket": "-p3a5zvp95iuafphza6lrr95_f9nzebfj_n4e9t8zfwkjtdpowccvqhhcwdbmvlkayf_jh-m9hoexhumozidwa",
"expires_in": 7200
}
获得 sdk_ticket 之后,就可以生成扫码登录的签名了。
签名生成
签名生成规则如下:
参与签名的字段包括第三方 appid,noncestr(随机字符串), 有效的 sdk_ticket, timestamp(时间戳) 。
对所有待签名参数按照字段名(即key)的 ascii 码从小到大排序(字典序)后,使用 url 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串 string1。 这里需要注意的是所有参数名均为小写字符。 对 string1 作 sha1 加密,字段名和字段值都采用原始值,不进行 url 转义。即 signature=sha1(string1)。
示例:
appid=wxappid
sdk_ticket=-p3a5zvp95iuafphza6lrr95_f9nzebfj_n4e9t8zfwkjtdpowccvqhhcwdbmvlkayf_jh-m9hoexhumozidwa
noncestr=noncestr
timestamp=1417508194
1.对所有待签名参数按照字段名(即key)的 ascii 码从小到大排序(字典序)
appid、noncestr、sdk_ticket、timestamp
2.使用 url 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串 string1:
appid=wxappid&noncestr=noncestr&sdk_ticket=-p3a5zvp95iuafphza6lrr95_f9nzebfj_n4e9t8zfwkjtdpowccvqhhcwdbmvlkayf_jh-m9hoexhumozidwa×tamp=1417508194
3.对 string1 进行 sha1 签名,得到 signature: 429eaaa13fd71efbc3fd344d0a9a9126835e7303
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/13418/
部分内容来自网络投稿,如有侵权联系立删