当前位置:   article > 正文

各端小程序获取用户手机号_{"code":"40003","msg":"insufficient conditions","s

{"code":"40003","msg":"insufficient conditions","subcode":"isv.invalid-auth-

1.支付宝

my.getPhoneNumber

版本要求:支付宝客户端 10.1.35 或更高版本,若版本较低,建议做 兼容处理

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

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

使用注意

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

示例代码

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

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

故障排查

调用 my.getPhoneNumber 获取手机号报错时,请检查以下配置内容:

  • 请检查小程序后台已添加 获取会员手机号 功能包,并已在 隐私内容申请 中 申请手机号(若在小程序后台看不到敏感信息申请的入口,请使用主账号登录)。申请路径为:小程序后台 > 开发管理 > 功能列表添加功能 > 获取会员手机号 > 敏感信息申请。

  • 请确保小程序添加了 JSAPI 基础包 (否则会报无权限)。

  • 请确保前端 AXML 中按照 button 授权方式,先获取用户授权然后使用 my.getPhoneNumber 进行获取(否则会报无效的授权关系)。

<button a:if="{{canIUseAuthButton}}" open-type="getAuthorize" onGetAuthorize="onGetAuthorize" onError="onAuthError" scope='phoneNumber'>    授权手机号</button>
  • 请确保已在 小程序后台 > 设置 > 开发设置 中,设置 支付宝公钥aes 秘钥 和 应用网关,aes 相关信息可参见 内容加密接入指引。(若缺失这三个设置,在调用 my.getPhoneNumber 时可能只返回 response 不会返回sign)。

 

2. 微信

 

获取手机号

获取微信用户绑定的手机号,需先调用wx.login接口。

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

注意:目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。

使用方法

需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。

注意

在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

代码示例

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
  1. Page({
  2. getPhoneNumber (e) {
  3. console.log(e.detail.errMsg)
  4. console.log(e.detail.iv)
  5. console.log(e.detail.encryptedData)
  6. }
  7. })

返回参数说明

参数类型说明最低版本
encryptedDataString包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法 
ivString加密算法的初始向量,详细见加密数据解密算法 

获取得到的开放数据为以下 json 结构:

  1. {
  2. "phoneNumber": "13580006666",
  3. "purePhoneNumber": "13580006666",
  4. "countryCode": "86",
  5. "watermark":
  6. {
  7. "appid":"APPID",
  8. "timestamp": TIMESTAMP
  9. }
  10. }
参数类型说明
phoneNumberString用户绑定的手机号(国外手机号会有区号)
purePhoneNumberString没有区号的手机号
countryCodeString区号

 

3.百度 暂无此 api

 

4.头条小程序 暂无

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/284509?site
推荐阅读
相关标签
  

闽ICP备14008679号