微信小程序获取用户手机号的流程以及用到的API可以归纳如下:
流程:
- 用户触发:由于需要用户主动触发才能发起获取手机号接口,因此该功能不由单独的API来调用,而是使用
button
组件的点击来触发。需要将button
组件的open-type
值设置为getPhoneNumber
。 - 用户授权:当用户点击并同意授权后,可以通过
bindgetphonenumber
事件回调获取到微信服务器返回的加密数据。 - 服务器解密:在第三方服务端,使用微信提供的解密手机号的API,结合
session_key
以及app_id
对加密数据进行解密,从而获取到用户的手机号。
用到的API:
- 前端(小程序端):
button
组件:设置open-type="getPhoneNumber"
。bindgetphonenumber
事件:用于处理用户同意授权后的回调,获取加密数据。wx.login()
方法(可选但推荐):用于获取用户的临时登录凭证code
。虽然可以在回调中调用,但为避免刷新登录态导致的解密失败,建议提前进行login
操作或在回调中先使用checkSession
进行登录态检查。
- 后端(服务器端):
- 解密手机号的API:使用微信提供的API(如
https://api.weixin.qq.com/sns/jscode2session
)进行解密。这个API需要传入appid
、secret
、js_code
(即从小程序端获取的code
)以及grant_type
(固定值为"authorization_code")。
- 解密手机号的API:使用微信提供的API(如
注意事项:
- 该接口仅针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。
- 若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。
- 在回调中调用
wx.login
登录可能会刷新登录态,此时服务器使用code
换取的sessionKey
可能不是加密时使用的sessionKey
,导致解密失败。因此,建议开发者提前进行login
操作或在回调中先使用checkSession
进行登录态检查。