参考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、微信授权、登录失败;绑定微信、绑定手机号失败检测

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

  1. 【uniapp基础篇】实现微信登录

    文章目录 一.今日实战目标 二.实战步骤 1. 实现APP端微信登录 3. 微信小程序端授权微信登录 总结 一.今日实战目标 实现APP端微信登录 实现小程序端授权微信登录 二.实战步骤 1. 实现A ...

  2. uni-app APP端-微信登录流程

    uni-app APP端-微信登录流程 手把手教学 1.前期准备 在微信开放平台注册账户 微信开放平台 (qq.com) 在管理中心中创建移动应用项目,按要求填写相关信息 审核通过后即可获得我们所需的 ...

  3. 微信开放平台---网站授权微信登录功能(附带源码)

    1 微信开放平台:https://open.weixin.qq.com/ 2 微信官方教程:https://open.weixin.qq.com/cgi-bin/showdocument?action ...

  4. 详解如何进行第三方App接入微信登录

    微信登录接入 微信登录遵循协议Aouth2.0中的授权码模式 我们来看一下Aouth2.0中的授权码模式是怎么定义的: 授权码模式(authorization code)是功能最完整.流程最严密的授权 ...

  5. 第三方App接入微信登录 解读

    最近在做一个微信登录功能,发现腾讯的API文档写的实在是让人摸不着头脑,也没有搜到很详细的能让人参考的文章,借此把自己的一点儿使用心得与大家分享,欢迎指正其中的不足之处,谢谢! 准备工作 1.在微信开 ...

  6. 第三方App接入微信登录 解读 (微信开放平台)

    http://www.cnblogs.com/linjunjie/p/6249989.html 微信开放平台  和  微信公众平台  概念不同. 1.首先需要注册微信开放平台,然后获取开发者认证.审批 ...

  7. 混合应用 微信登录授权 微信登录认证失败 ios PGWXAPI错误-1 code:-100 / 安卓 message:invalid appsecret innerCode:40125...

    最近项目需要做微信登录,于是利用HTML5+ API Reference的OAuth模块管理客户端的用户登录授权验证功能,允许应用访问第三方平台的资源. (链接:https://www.dcloud. ...

  8. Android Studio App 接入微信登录

    安卓接入微信登录 微信开发平台获取AppId和AppSecret 开始接入 添加依赖 注册wxApi 登录调用 监听登录回调 注意事项 微信开发平台获取AppId和AppSecret 创建应用 填写对 ...

  9. java微信小程序授权微信登录获取手机号

    微信小程序获取手机号流程 1.先调用微信登录wx.login()获取code,通过code在后台获取session_key和openid(为了安全方面的原因,请不要直接使用这些信息作为你小程序的用户标 ...

最新文章

  1. XGBOOST带试验源码
  2. Android之PowerManagerBatteryManager
  3. 架构和产品的制衡——说说竞价拍卖那点事
  4. a7100换电池_动动手你也行 篇十四:冲动是魔鬼——单反电池换芯失败记
  5. mooc构建结构数组的笔记
  6. Django从理论到实战(part30)--Meta配置
  7. luogu1355 神秘大三角
  8. python 读取excel表数据获取坐标_python读取并定位excel数据坐标系详解
  9. Tomcat的BIO、NIO、ARP模式
  10. 在Windows XP 32位系统中安装JDK 1.8
  11. JavaScript学习(六十八)—表单校验案例
  12. 通过JAVA的反射调用类中的公有私有方法
  13. ubuntu两张网卡时的网络设置
  14. 2015/7/24 (等待回调,结果是盘中回调,盘末拉升,错过了进仓机会吗?详情进入...
  15. Android ListView之setEmptyView的问题
  16. STM8S103之串口查询发送+中断发送
  17. E49AL刷BIOS
  18. 报错---qt.qpa.plugin
  19. 倍加福光电传感器OBE10M-18GM60-SE5-V1
  20. 中台战略-建中台与拆中台

热门文章

  1. java类农夫过河问题_Java简单实现农夫过河问题示例
  2. Linux进程管理概述
  3. 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化
  4. 用Project软件编制项目计划【总结】
  5. Revit建模|怎么创建轴网标高?
  6. Kggle比赛之Artifical Neural Networks Applied to Taxi Destination Prediction
  7. 计算机配置相关参考文献,计算机维护论文,关于《计算机配置维护》教学改革实践相关参考文献资料-免费论文范文...
  8. 纽约大学计算机与科学,纽约大学计算机科学专业研究生入学要求
  9. UE4接入Android第三方库1——框架配置
  10. 斯坦福机器学习Coursera课程:第八次作业--推荐系统