【功能业务篇】APP授权微信登录、绑定账号测试思考

参考https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=&lang=zh_CN

准备工作

移动应用微信登录是基于OAuth2.0协议标准 构建的微信OAuth2.0授权登录系统。

在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。

1、目前移动应用上微信登录只提供原生的登录方式,需要用户安装微信客户端才能配合使用。

2、对于Android应用,建议总是显示微信登录按钮,当用户手机没有安装微信客户端时,请引导用户下载安装微信客户端。

3、对于iOS应用,考虑到iOS应用商店审核指南中的相关规定,建议开发者接入微信登录时,先检测用户手机是否已安装微信客户端(使用sdk中isWXAppInstalled函数 ),对未安装的用户隐藏微信登录按钮,只提供其他登录方式(比如手机号注册登录、游客登录等)

 

授权流程说明

微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。

微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;

3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

 

第一步.请求code

移动应用微信授权登录

开发者需要配合使用微信开放平台提供的SDK进行授权登录请求接入。正确接入SDK后并拥有相关授权域(scope,什么是授权域?)权限后,开发者移动应用会在终端本地拉起微信应用进行授权登录,微信用户确认后微信将拉起开发者移动应用,并带上授权临时票据(code)。

1、向微信开放平台请求授权码code,可拉起微信并打开授权登录页(前提是你安装了微信应用并已登录,未登录的会引导你先登录)

2、用户点击授权后,微信客户端会被拉起,跳转至授权界面,用户在该界面点击允许或取消

3、客户端收到授权码后,向自己的服务器发起登录请求,并附带收到的授权码。

4、服务端收到登录请求,向微信开放平台请求获取access_token,微信开放平台返回Json字符串

参数说明:

appid 必填   应用唯一标识,在微信开放平台提交应用审核通过后获得 

scope 必传  应用授权作用域,如获取用户个人信息则填写snsapi_userinfo

state 非必传  用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验

返回示例:

ppid: wxd477edab60670232
scope: snsapi_userinfo
state: wechat_sdk_demo

返回说明

用户点击授权后,微信客户端会被拉起,跳转至授权界面,用户在该界面点击允许或取消,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 微信用户当前国家信息 

 

第二步:通过code获取access_token(在自己服务器端做)

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

https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx99db1b2e36a18b9d&secret=4d872f5363f0ee2259c9bfb46cc30478&code=001JgDdb0eMDTy1ZLohb0x8vdb0JgDdU&grant_type=authorization_code

参数:

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            只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。

 

 

 

 

第三步:通过access_token调用接口

通过第二步获取到access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作

https://api.weixin.qq.com/sns/userinfo?access_token=20_c8Hadnvec4liYYdZOWeDzC9D3CuAWjPheSm7WUmOEpTPbzcP11tB_VvOBHeWjBOcpJMEGXqtwNT70ilvNc0w_A3nzarpZMwgOHKOdYLJWoI&openid=otzOK1N2RGS3gyb6Ka8o4D_K4gww&lang=zh_CN

参数:

1、access_token有效且未超时

2、微信用户已授权给第三方应用帐号相应接口作用域(scope)

响应:

nickname 微信昵称

openid=otzOK1N2RGS3gyb6Ka8o4D_K4gww

unionid=o1u0Gv_q9SDFaZrqarIpjnaPG9Hw

第四步.微信登录及绑手机号

微信登录判断是否绑定手机号

如果未绑定接口返回is_bind为false,进入帮手机号页面,调绑定手机号接口

如果已绑定接口返回is_bind为true,直接登录成功,返回token

http://url/1.0/user/wechat/login

wechat_open_id=o1u0Gv_q9SDFaZrqarIpjnaPG9Hw

{"code":0,"msg":"成功","data":{"token":"","is_bind":false}}

绑定手机号

http://url/1.0/user/wechat/bind

captcha=123456&mobile=18221124104&wechat_avatar=&wechat_name=新仁类测试微信号???@¥&wechat_open_id=o1u0Gv_q9SDFaZrqarIpjnaPG9Hw

 

第五步:微信重复登录

假设用户已经获得授权,则下次登录时只需要验证access_token是否有效,无效则重新获取授权,有效则无需重新获得授权。

1.用户向自己的服务器请求登录,登录方式为微信登录,附带上次登录返回的的access_token

2.服务器收到用户的登录请求,向微信开放平台发送access_token是否有效的验证请求如下:

3.服务端获取到新的access_token等信息,并返回给客户端,客户端成功登录或者重新获取授权。

第六步:测试用例

1、手机号登录,授权、绑定微信成功,用户微信信息检测

2、手机登录,已绑定微信,再次绑定此微信检测

3、手机登录,已绑定微信,再次绑定其它微信(未绑定手机号的)检测

4、B用户手机号登录,微信A已被A用户手机号绑定,B用户绑定微信A检测

5、微信登录,授权、强制绑定手机号成功,用户微信信息检测

6、微信登录,已绑定手机号,再次绑定此手机号检测

7、微信登录,已绑定手机号,再次绑定其他手机号(未绑定微信的)检测

8、B用户微信登录,微信A已被A用户手机号绑定,B用户绑定A手机号检测

9、账号登录,绑定微信检测

10、微信登录绑定手机号成功、手机号登录绑定微信成功,数据库更新wechat_name、wechat_avatar、wechat_open_id、is_bind_avatar

11、微信登录绑定手机号成功、手机号登录绑定微信成功,微信登录、手机号登录检测

12、微信授权登录成功,进入强制绑定手机号页面

13、未安装微信,进入登录页面,未显示微信检测

14、进入登录页面、进入app绑定微信页面,删除微信,点微信登录、绑定微信检测

15、微信登录成功,进入绑定手机号页面,删除微信,绑定手机号检测

16、未登录微信、已登录微信,微信登录进入微信登录页面,再返回、绑定微信进入微信登录页,再返回检测

17、弱网、断网,微信登录、绑定手机号、绑定微信检测

18、微信授权、登录失败;绑定微信、绑定手机号失败检测

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-树3-红黑树

1、刚开始建立的红黑树的红黑树只有一个指针(实际为结点,它的右子树指向真正的根结点(现在指向空结点)。左子树为空结点,里面的数据为负无穷大) 2、实现Insert函数

比亚迪后续车都会搭在鸿蒙系统吗_华为鸿蒙系统上车,比亚迪汉发布!我告诉你华为鸿蒙到底是什么...

最早见到华为的HiCar,还是今年4月份的华为P40系列手机发布会。根据发布会公布的信息,HiCar主要的特点就是手机与汽车的顺畅连接体验。借由5G手机,汽车可以实现更强的数据传输能力,同时百万级别的手机APP也会扩展至汽车之上。在这次…

Python模拟实现multipart/form-data格式上传图片文件

一、单字段发送单个文件 url "http://httpbin.org/post" data None files { ... } r requests.post(url, data, filesfiles) 而这个files参数是可以接受很多种形式的数据,最基本的2种形式为字典类型和元祖列表类型 1、字典类型的files参数 { &q…

tensorflow9-mnist手写数字识别进阶-多层神经网络建模

大圆为一个神经元模型 全连接:相邻的两层之间所有的结点都会连接 神经网络的层数:一般指的谁隐藏层的数量 上图中的网络即为一层神经网络 以上即为两层的全连接神经网络 两层神经网络模型训练 神经网络的层次是不是越多越好?并不是越多越好…

BurpSuit配置抓包http和https请求

1、下载安装burpsuit https://portswigger.net/burp/communitydownload 双击一直点下一步,可安装成功 2、burpsuit设置 2、浏览器设置代理 设置-高级-打开代理设置-局域网设置 3、这样可以抓取http包了 4、Burp Suite要抓HTTPS的包,是需要有Burp Sui…

TensorFlow10-多层神经网络建模,存储和载入

整体流程: 只保存最近5个模型 playground.tensorflow.org TensorFlow浏览器训练网址

手机突然电量消耗很快_手机掉电突然变快?这5点操作你肯定至少做了其中一个!...

许多人都遇到过手机掉电突然变快的情况。以前充一次电,明明可以用一整天的,某天突然发现,满电的手机没打几局游戏或才看一会电视,电量就没了一大半,一天充好几次都不够用。每每遇到这种情况时,很多人都觉得…

Python史上最简单5行代码群发邮件Zmail模块

zmail简介 Zmail 允许你发送和接受邮件尽可能的简单。你不需要去检查你的服务器地址、端口以及自己构造MIME对象,使用Zmail,你只需要关注你的邮件内容即可。Zmail只在python3中运行,不需要第三方模块。不支持python2 Zmail的优势 自动填充…

TensorFlow11CNN和全卷积神经网络

应用:图像分类,物体识别,看图说话 卷积神经网络的基本结构

jmeter web监听结果_Jmeter性能测试

Jmeter性能测试,Jmeter简介1.1 概述JMeter,每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率。 熟练使用Jmeter后, 能用Jmeter搞定的事情,你就不会使用LoadRunner了。Jmeter 是一款…

Appium+Python安卓自动化测试之启动APP和配置获取

AppiumPython安卓自动化测试之启动APP和配置获取 本文章未讲述appiumpython环境部署,环境部署会新开文章 一、手机连接电脑 1、USB连接电脑和手机,手机上点确认连接(最好用原装线) 2、开启手机开发者模式和USB调试&#xff08…

python身份证号掩盖出生日期的代码_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...

大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作“全国身份证号验证及查询系统”,成品界面如下图: 本系统可以实现身份证号真伪验证,年龄、性别及发证地查询,看…

jop怎么读音英语怎么说_“跨年”英语怎么说?

2020年已经过去了31日晚上跨年夜,你在哪里跨年呢?今天的问题来了,你知道“跨年”用英语怎么说吗?一起学习一下吧。“跨年夜”英语怎么说?跨年夜的英语表达是:Spend New Years Eve / Celebrate New Years Ev…

吴恩达深度学习笔记——卷积神经网络(CNN)

目录 一、计算机视觉(Computer vision) 二、边缘检测示例(Edge detection example) 三、更多的边缘检测内容(More edge detection) 四、Padding 五、卷积步长(Strided convolution&#xff…

react实现全选和反选_全选的实现

在很多的表单中我们都会看到有一个这样的功能&#xff0c;全选后进行一系列的操作。如操作前操作后简单的js实现首先要定义多选框&#xff0c;在表头可以使用id来定义同时添加onclick点击事件<input type"checkbox" id"all" onclick"checkAllCart(…

对tf.nn.softmax的理解

Softmax的含义&#xff1a;Softmax简单的说就是把一个N*1的向量归一化为&#xff08;0&#xff0c;1&#xff09;之间的值&#xff0c;由于其中采用指数运算&#xff0c;使得向量中数值较大的量特征更加明显。 如图所示&#xff0c;在等号左边部分就是全连接层做的事。 W是全连…

面试后要请你吃饭_面试问同事请吃饭唯独不叫你咋办?小伙说这是好机会,当场被录取...

分享职场故事&#xff0c;交流职场经验&#xff0c;欢迎关注“罗波”。不知道大家在面试的过程中&#xff0c;有没有遇到过一些考官出了非常奇葩或者让你难以回答的题目。曾经在一次人事招聘的面试环节中&#xff0c;我的朋友小何就遇到了这样的一个问题&#xff0c;当时领导问…

心动的本质是什么_那一刻,我怦然心动了......

见到布莱斯罗斯基的第一天&#xff0c;我心动了。他的双眸有种魔力让我如痴如醉。女孩对一个刚见面的男孩一见钟情&#xff0c;男孩成了她的邻居&#xff0c;而她管这种感觉叫&#xff1a;怦然心动。2010年《怦然心动》上映&#xff0c;导演罗伯莱纳用一棵树&#xff0c;一对小…

筒灯智能驱动芯片作用_如然之光,魅族 Lipro 智能家居发布首期健康照明系列--智能设备 -...

1 月 5 日&#xff0c;魅族科技(MEIZU)正式发布了 Lipro 智能家居旗下的首期产品&#xff0c;Lipro 健康照明系列。作为 Lipro 品牌的首次产品亮相&#xff0c;Lipro 健康照明系列集顶尖光源品质与优雅工业设计于一体&#xff0c;为用户带来全场景、高品质的光照体验。Lipro 健…