栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

微信小程序获取手机号登录流程(个人开发者账号不支持)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微信小程序获取手机号登录流程(个人开发者账号不支持)

微信小程序获取手机号登录流程
  • 所需条件
    • 1. 非个人开发者账号
    • 2. AppID+AppSecret
  • 流程思路
  • 代码实现
  • 常见问题

所需条件 1. 非个人开发者账号

获取手机号文档

这个条件也说得上是情理之中了,[ 摊手 ]。
说句题外话,小程序获取用户在微信支付认证的姓名以及身份证信息的方法曾经可以,但现在GG了,文档内也搜不到API (why)。

2. AppID+AppSecret

AppID+AppSecret 获取

AppSecret只有账号的总管理员能申请,被授权的管理员无法申请。
AppSecret很重要,不要外泄或者传递给前台。

流程思路

可参考官方文档的登录流程时序

  1. 小程序触发 login() 方法获取 code (文档)
  2. 后台服务通过 code+AppID+AppSecret+grant_type 去获取 session_key+openid (文档)
  3. 小程序触发 getphonenumber() 方法获取 iv+encryptedData (文档)
  4. 后台服务通过 iv+encryptedData+session_key 去解密获取 PhoneNumber (文档)

注意:

  1. login() 生成的 code 是一次性的且有效期五分钟
  2. login() 方法必须在 getphonenumber() 方法前触发,否则会出现第4步session_key失效导致解密失败的情况(评论内有详解)
  3. 第2步无法在小程序内请求,小程序内不允许请求以此来避免AppSecret在前端使用造成泄露
  4. 第2步参数 grant_type 传值为 authorization_code
  5. 第3步 getphonenumber() 方法必须由用户点击按钮触发,且按钮有写法要求。
    流程:用户点击登录按钮后,微信弹出授权弹框,用户点击确定后触发 getphonenumber()。
  6. 第4步官方文档有给解密的demo,但没有 JS / JAVA 语言,但这能难的倒我们码农么?大佬写的JAVA解密Demo,修改下入参直接调用就行,感谢大佬。
代码实现

后台较为简单且涉密过多,无法展示。

login()
我是在页面初始化时调用wLogin(),将code传给后端,后端使用code+AppID+AppSecret 去换取 session_key+openid 并存到redis中

getPhoneNumber()
用户点击登录并确定授权之后触发getPhoneNumber方法,获取iv+encryptedData传给后台,后台再获取redis内的session_key进行解密获取手机号。

常见问题
  1. 解密过程报错(如:pad block corrupted)八成是session_key问题。
  2. 小程序内的所有请求地址都需配置且是https协议。
  3. web-view内的所有请求地址也都需配置且是https协议。
  4. 。。。

如有问题,欢迎提问。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644979.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号