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

本文详细阐述了微信小程序通过非个人开发者账号获取用户手机号的登录流程,包括AppID+AppSecret的使用、步骤顺序、代码实现细节,并列举了解密过程中可能出现的问题和解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所需条件

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 是一次性的且有效期五分钟 。但在session_key未过期时,使用多个code换取的session_key是相同的,例:生成code1去换取session_key1,code1使用过变无效了,再生成code2,此时code2换取的session_key还是session_key1。 在这里插入图片描述
  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. 。。。

如有问题,欢迎提问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值