【面向公告编程】关于 getPhoneNumber 安全升级后获取手机号的误区
发布于 3 年前 作者 ijiang 510 次浏览 来自 分享

前言

近期小程序更新的基础库 2.21.2 ,微信官方对获取用户手机号的逻辑进行了安全升级(传送门:小程序基础库 2.21.2 更新),接下来作者带你解读官方公告,进一步提升“面向公告编程”能力。

误区

## 1、为什么「bindgetphonenumber」事件回调中没有返回 code 参数?

① 确认当前基础库版本是否为 2.21.2 及以上。
② 目前开发者工具未兼容此表现(近期应该会同步),目前以真机调试为准。

## 2、为什么我传了 code 后端报 40029 错误码?

① 手机号获取凭证 code 并非 wx.login 获取的 code ,而是 button 组件 open-type="getPhoneNumber" 通过 bindgetphonenumber 事件回调获取的,具体参考手机号获取文档
② 手机号获取凭证 code 有效期为 5 分钟,并且只能消费一次。确认是否过期或者已经被二次使用过。

## 3、这个更新是不是我一定要跟着修改自己的业务呢?

不一定需要,按照原来的逻辑去获取也没问题,只不过微信提供了更为安全的解密方案。
总结一句话就是:为了用户数据安全,从基础库 2.21.2 开始就可以使用新的逻辑解密获取用户手机号,相关接口 phonenumber.getPhoneNumber

## 4、为什么真机基础库已经是 2.21.2 了,但是还是没返回 code 参数?

正常情况下,基础库 2.21.2 对应的是客户端版本号为 8.0.16,如果你的版本低于 8.0.16 并且是通过开发者工具向客户端推送的 2.21.2 基础库,大几率不会返回 code 参数,请手动更新微信版本。
基础库对应版本分布:传送门

最后

## 祝大家没有改不完的 bug 和踩不完的坑,有疑问欢迎在下方留言或者发社区私信。
3 回复

三星s8真机没有返回code:

试了iphone12和小米10都能正常返回code:

为什么我真机测试返回的没有code,而是多了一个cloudId,这是怎么回事

大佬,真机可以获得code,那phonenumber.getPhoneNumber怎么用呢?

回到顶部