阅读(2684) (12)

获取手机号

2020-02-11 17:58:14 更新

获取用户绑定的手机号。需要用户主动通过 button 组件的点击来触发后才能发起获取手机号接口。(仅企业主体小程序可使用)


注意事项

  • 请谨慎使用,仅可在登陆时使用!!!若用户举报较多或被发现在不必要场景下使用,字节跳动有权永久回收该小程序的该接口权限。
  • 使用(用户点击 button)前需先调用tt.login接口。如果在回调中调用 tt.login 会刷新登录态,导致登陆后换取的 sessionKey 与手机号码加密时使用的 sessionKey 不同,从而导致解密失败。
  • 基础库 1.14.0 开始支持
  • 触发按钮文案应为“授权手机号快捷登录”“手机号码一键登录”等,禁止在用户进入小程序时就弹出获取手机号。


使用方法

需要将 <button> 组件 open-type 的值设置为 getPhoneNumber。用户点击后会弹出一个授权弹窗让用户确认(若该用户账户未绑定手机号码会执行一次绑定手机号码的流程;授权弹窗每次使用都会弹出)。 用户同意后,开发者可以通过 bindgetphonenumber 事件回调获取到一个加密数据,开发者可以把该数据传回到自己的服务端进行解密获取手机号。


代码示例

<button
  open-type="getPhoneNumber"
  bindgetphonenumber="getPhoneNumberHandler"
></button>
Page({
  getPhoneNumberHandler(e) {
    console.log(e.detail.errMsg);
    console.log(e.detail.iv);
    console.log(e.detail.encryptedData);
  }
});


回调参数说明

参数类型说明
errMsgstring错误信息
encryptedDatastring包括敏感数据在内的完整用户信息的加密数据
ivstring加密算法的初始向量

errMsg为发生错误时具体的错误信息:

  • 开放平台没有权限获取手机号:platform auth deny。若平台封禁了某开发者该权限时可能返回或者是非企业小程序也会返回此信息。
  • 未在小程序平台登录:not login。开发者看到此信息后应当执行登录操作。
  • 用户没有绑定手机号或用户拒绝授权:auth deny。
  • 其他错误:internal error。

数据解密

参考敏感数据处理在开发者后台解密。解密后获取得到的数据形式如下:

{
  "phoneNumber": "138xxxxxxxx", // 用户绑定的手机号(国外手机号会有区号)
  "purePhoneNumber": "138xxxxxxxx", // 没有区号的手机号
  "countryCode": "86", // 区号
  "watermark": {
    "appid": "ttxxxxxxxxxxxxxxxx",
    "timestamp": 15000000000000000
  }
}