如何进行微信登录授权测试?
准备工作
移动应用微信登录是基于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端的应用授权。该模式整体流程为:
第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
通过code参数加上AppID和AppSecret等,通过API换取access_token;
通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
第一步.请求code,移动应用微信授权登录
开发者需要配合使用微信开放平台提供的SDK进行授权登录请求接入。正确接入SDK后并拥有相关授权域(scope,什么是授权域?)权限后,开发者移动应用会在终端本地拉起微信应用进行授权登录,微信用户确认后微信将拉起开发者移动应用,并带上授权临时票据(code)。
1、向微信开放平台请求授权码code,可拉起微信并打开授权登录页(前提是你安装了微信应用并已登录,未登录的会引导你先登录)
2、用户点击授权后,微信客户端会被拉起,跳转至授权界面,用户在该界面点击允许或取消
3、客户端收到授权码后,向自己的服务器发起登录请求,并附带收到的授权码。
4、服务端收到登录请求,向微信开放平台请求获取access_token,微信开放平台返回Json字符串
参数说明:
appid:必填,用唯一标识,在微信开放平台提交应用审核通过后获得
scope:必传,应用授权作用域,如获取用户个人信息则填写snsapi_userinfo
state:非必传,用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
返回示例:
ppid: wxd477edab60670232scope: snsapi_userinfostate: 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字符串长度不能超过1Klang 微信客户端当前语言country 微信用户当前国家信息```
第二步:通过code获取access_token(在自己服务器端做)
获取第一步的code后,请求以下链接获取
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进行接口调用,获取用户基本数据资源或帮助用户实现基本操作
参数:
1、access_token有效且未超时
2、微信用户已授权给第三方应用帐号相应接口作用域(scope)
响应:
nickname 微信昵称openid=otzOK1N2RGS3gyb6Ka8o4D_K4gwwunionid=o1u0Gv_q9SDFaZrqarIpjnaPG9Hw
第四步.微信登录及绑手机号
微信登录判断是否绑定手机号,如果未绑定接口返回is_bind为false,进入帮手机号页面,调绑定手机号接口,如果已绑定接口返回is_bind为true,直接登录成功,返回token
wechat_open_id=o1u0Gv_q9SDFaZrqarIpjnaPG9Hw{"code":0,"msg":"成功","data":{"token":"","is_bind":false}}
绑定手机号
http://url/1.0/user/wechat/bindcaptcha=123456&mobile=18221124104&wechat_avatar=&wechat_name=新仁类测试微信号???@¥&wechat_open_id=o1u0Gv_q9SDFaZrqarIpjnaPG9Hw
第四步.微信登录及绑手机号
微信登录判断是否绑定手机号,如果未绑定接口返回is_bind为false,进入帮手机号页面,调绑定手机号接口,如果已绑定接口返回is_bind为true,直接登录成功,返回token
wechat_open_id=o1u0Gv_q9SDFaZrqarIpjnaPG9Hw{"code":0,"msg":"成功","data":{"token":"","is_bind":false}}
绑定手机号
http://url/1.0/user/wechat/bindcaptcha=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、微信授权、登录失败;绑定微信、绑定手机号失败检测
如何进行微信登录授权测试?相关推荐
- 混合应用 微信登录授权 微信登录认证失败 ios PGWXAPI错误-1 code:-100 / 安卓 message:invalid appsecret innerCode:40125...
最近项目需要做微信登录,于是利用HTML5+ API Reference的OAuth模块管理客户端的用户登录授权验证功能,允许应用访问第三方平台的资源. (链接:https://www.dcloud. ...
- 网站微信登录授权 ASP.NET
最新做一些项目都有微信登录注册什么的,今天就把自己整理的demo提供给大家 微信认证流程(我自己简称三次握手): 1.用户同意授权,获取code 2.通过code换取网页授权access_token, ...
- java调用微信加密_微信登录授权, 并且解密加密内容获取手机号和地区
所使用的的依赖 org.springframework.boot spring-boot-starter-web 2.3.7.RELEASE org.apache.httpcomponents htt ...
- react native微信登录授权,以及一些错误
一.背景 公司的APP,上次发布版本,我们的APP微信登录还是可以用的.但是在最新一版中,微信登录一直报-6的错误.于是开始了蛋疼的寻找之路. 二.关于RN中使用微信组件的问题 请参考链接:http: ...
- h5微信登录授权获取code(测试账号)
第一配置测试账号 打开微信公众平台测试帐号申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login, 注意这几项 扫描并且 ...
- 微信登录——授权登录获取用户信息
引言 实现微信扫码登录关键之处就是获取到微信用户信息,那么这就涉及到了微信授权,通过微信授权我们可以获取到用户信息:微信官方文档写的还是比较详细的,但是没有代码演示,这里我就用代码演示一下如何实现微信 ...
- App中快速复用微信登录授权的一种方法
在微信小程序下,小程序登录功能一般会通过 OpenID 或 UnionID 作为唯一标识,与小程序服务的账号体系进行关联打通,完成用户账户体系的构建与设计. 如果在像支付宝小程序.百度小程序第三方平台 ...
- C#微信网页授权登录(NET MVC)
Token验证 WeixinController.cs using System.Web.Mvc;namespace WeChat.Controllers {public class WeixinCo ...
- 微信网页登录授权详解(前端)
前几天做了一个H5页面项目,它是依托于微信服务号的网页.需要包含微信登录.微信支付以及微信订单查询功能; 在这里说一下先说一下微信登录授权功能的实现 **微信登录授权** 微信登录授权呢,分为静默授权 ...
最新文章
- canvas之特丑时钟
- c#操作xml实例 2009-03-13 20:00
- 如何减小电压跟随器输出电阻_机器人如何保护电池的电源管理系统 免受热坏?(附:PDF文档下载)...
- C++实现斐波那契查找(附完整源码)
- 单片机读tf卡c语言程序,单片机读写SD卡,MMC卡,MiniSD,TF卡,MicroSD卡
- 天池实验室|读取数据集的两种方式
- 10个超级好用的快捷键技巧,知道的都是大神!
- opencv之计算机视觉介绍(笔记01)
- 【Computer Organization笔记05】运算器基本功能,定点运算器,Am2901的组成与功能,VHDL硬件描述语言
- SSH客户端:Termius for Mac
- 哈佛教授揭秘:长期太累或太穷会变…
- Android 四大开发组件
- 弱电机房如何理线整理机柜?值得收藏学习
- PageHelper.startPage分页的使用和pageSize的值和list相同导致循环出来的total总数不对
- tas5424_TAS5424
- 一只蒟蒻的树形DP学习笔记
- CSS上下左右居中 阿星小栈
- Java在手机平台上的Porting
- 灵境元宇宙 ---论元宇宙之本真
- nssl 1438.战略威慑
热门文章
- B2C商城项目源码,基于Java开发的高可用分布式B2C商城系统,Java+Spring MVC+Dubbo+Zookeeper+MySQL+Redis+FastDFS+Nginx+Solr
- Android opengl es 3.0 + ndk 绘画涂鸦项目
- UE5 Gameplay 框架拆解
- Oracle查询某一天数据的SQL语句的几种写法
- 中国有机盐行业市场供需与战略研究报告
- ↖杨过↖ ↗小龙女↗
- Android moudle库使用aar的方法
- 打开网络adb 调试
- location.href和open的几种用法和区别
- python 更换windows壁纸(简单)