获取用户手机号

获取支付宝用户绑定的手机号

因为需要用户主动触发才能发起获取手机号,所以该功能不由 API 直接调用,需用 <button> 组件的点击来触发。

注意:目前该功能需要在开发者后台完成敏感信息申请才可以使用此功能,入口为[开发管理]—>[功能列表\添加功能]—>[获取会员手机号]—>[用户信息申请],此功能需谨慎使用,若支付宝发现信息存在超出约定范围使用或者不合理使用等情况,支付宝有权永久回收该小程序的该接口权限。

使用方法

需要将 <button> 组件 open-type 的值设置为 getAuthorize,当用户点击并同意之后,可以通过my.getPhoneNumber() 接口获取到支付宝服务器返回的加密数据, 然后在第三方服务端结合签名算法和AES密钥进行解密获取手机号,方法详见敏感信息加解密方法,若用户未授权,直接调用my.getPhoneNumber() 接口,则无法返回正确信息。

代码示例

支持客户端版本>=10.1.35,低版本需要做兼容处理

唤起授权框,推荐兼容方案

  1. <button a:if="{{canIUseAuthButton}}" open-type="getAuthorize"
  2. onGetAuthorize="onGetAuthorize" onError="onAuthError"
  3. scope='phoneNumber'>
  4. 授权手机号
  5. </button>

Button属性说明

属性说明
open-typegetAuthorize为授权组件
scopephoneNumber
onGetAuthorize授权成功回调(在回调里可以调用获取信息的接口)
onError授权失败回调(包括用户拒绝和系统异常)

用户点击同意后,即可通过my.getPhoneNumber()获取用户绑定的手机号

  1. my.getPhoneNumber({
  2. success: (res) => {
  3. let encryptedData = res.response
  4. my.httpRequest({
  5. url: '你的后端服务端',
  6. data: encryptedData
  7. });
  8. },
  9. fail: (res) => {
  10. console.log(res)
  11. console.log('getPhoneNumber_fail')
  12. },
  13. });

返回结果说明

res.response为完整的报文数据,前端需要将该报文发送到开发者服务端做验签和解密处理(详细的服务端处理流程参考敏感信息加解密方法),服务端解密后的明文示例如下:

正常响应

  1. {
  2. "code": "10000",
  3. "msg": "Success",
  4. "mobile": "1597671905"
  5. }

异常响应

  1. {
  2. "code": "40003",
  3. "msg": "Insufficient Conditions",
  4. "subCode": "isv.invalid-auth-relations",
  5. "subMsg": "无效的授权关系"
  6. }
  7. {
  8. "code": "20000",
  9. "msg": "Service Currently Unavailable",
  10. "subCode": "aop.unknow-error",
  11. "subMsg": "系统繁忙"
  12. }
  13. {
  14. "code": "40001",
  15. "msg": "Missing Required Arguments",
  16. "subCode": "isv.missing-default-signature-type",
  17. "subMsg": "应用未设置默认签名类型"
  18. }
  19. //解决方案:重新保存下开发者的密钥,或者设置下小程序的应用网关地址
  20. {
  21. "code": "40002",
  22. "msg": "Invalid Arguments",
  23. "subCode": "isv.invalid-encrypt",
  24. "subMsg": "加密异常"
  25. }
  26. //解决方案:按文档重新设置AES密钥

原文: https://docs.alipay.com/mini/api/getphonenumber