uni-app 支付宝小程序button获取手机号时参数在errMsg中返回

uni-app 支付宝小程序button获取手机号时参数在errMsg中返回

项目创建方式 CLI版本号
CLI 2.0.0-31920210609001

示例代码:

<button type="default" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">获取手机号</button>
decryptPhoneNumber(e) {  
    console.log('getPhoneNumber:', e)  
}

返回结果:

{
    detail: {  
        errMsg:  "getPhoneNumber:fail Error: {"response":"参数返回正常","sign":"参数返回正常"}"
    }
}

操作步骤:

<button type="default" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">获取手机号</button>
decryptPhoneNumber(e) {  
    console.log('getPhoneNumber:', e)  
}

预期结果:

{
    detail: {  
           errMsg: 'getPhoneNumber:ok',  
           //...  
           // 其他相关参数  
    }
}

实际结果:

{
    detail: {  
        errMsg:  "getPhoneNumber:fail Error: {"response":"参数返回正常","sign":"参数返回正常"}"  
    }
}

更多关于uni-app 支付宝小程序button获取手机号时参数在errMsg中返回的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 支付宝小程序button获取手机号时参数在errMsg中返回的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在支付宝小程序中,getPhoneNumber 接口的返回数据格式与微信小程序不同。支付宝小程序的手机号加密数据会通过 errMsg 字段返回,而不是直接提供 code 或其他参数。

根据你的返回结果,errMsg 中包含的 {"response":"参数返回正常","sign":"参数返回正常"} 实际上是加密的手机号数据。你需要解析这个 JSON 字符串来获取加密信息,然后通过服务端调用支付宝的 alipay.system.oauth.token 接口解密手机号。

解决方案:

  1. 解析 errMsg 中的 JSON 数据:
decryptPhoneNumber(e) {
    if (e.detail.errMsg.includes('getPhoneNumber:fail')) {
        try {
            const errObj = JSON.parse(e.detail.errMsg.replace('getPhoneNumber:fail Error: ', ''));
            console.log('加密数据:', errObj);
            // 将 response 和 sign 发送到服务端进行解密
        } catch (error) {
            console.error('解析错误:', error);
        }
    }
}
回到顶部