W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
版本要求:基礎(chǔ)庫(kù) 1.16.4 或更高版本;支付寶客戶端 10.1.35 或更高版本,若版本較低,建議做 兼容處理。
注意: 此 API 暫僅支持企業(yè)支付寶賬戶使用。
獲取支付寶用戶綁定的手機(jī)號(hào)。因?yàn)樾枰脩糁鲃?dòng)觸發(fā)才能發(fā)起獲取手機(jī)號(hào),所以該功能不由 API 直接調(diào)用,需用 button 組件 的點(diǎn)擊來(lái)觸發(fā)。
相關(guān)問(wèn)題請(qǐng)參見(jiàn)下文 獲取會(huì)員手機(jī)號(hào) FAQ。
使用說(shuō)明:目前該功能需要在開(kāi)發(fā)者后臺(tái)完成敏感信息申請(qǐng)才可以使用此功能,入口為 開(kāi)發(fā)管理 > 功能列表 > 添加功能 > 獲取會(huì)員手機(jī)號(hào) > 用戶信息申請(qǐng),此功能需謹(jǐn)慎使用,若支付寶發(fā)現(xiàn)信息存在超出約定范圍使用或者不合理使用等情況,支付寶有權(quán)永久回收該小程序的該接口權(quán)限。
需要將 <button>
組件 open-type
的值設(shè)置為 getAuthorize
,當(dāng)用戶點(diǎn)擊并同意之后,可以通過(guò)my.getPhoneNumber()
接口獲取到支付寶服務(wù)器返回的加密數(shù)據(jù), 然后在第三方服務(wù)端結(jié)合簽名算法和AES密鑰進(jìn)行解密獲取手機(jī)號(hào),若用戶未授權(quán),直接調(diào)用my.getPhoneNumber()
接口,則無(wú)法返回正確信息。
喚起授權(quán)框,推薦兼容方案。
<button a:if="{{canIUseAuthButton}}" open-type="getAuthorize"
onGetAuthorize="onGetAuthorize" onError="onAuthError" scope='phoneNumber'>
授權(quán)手機(jī)號(hào)
</button>
Button屬性說(shuō)明
屬性 | 說(shuō)明 |
---|---|
open-type | getAuthorize 為授權(quán)組件。 |
scope | phoneNumber |
onGetAuthorize | 授權(quán)成功回調(diào)(在回調(diào)里可以調(diào)用獲取信息的接口)。 |
onError | 授權(quán)失敗回調(diào)(包括用戶拒絕和系統(tǒng)異常)。 |
用戶點(diǎn)擊同意后,即可通過(guò)my.getPhoneNumber()
獲取用戶綁定的手機(jī)號(hào)。
my.getPhoneNumber({
success: (res) => {
let encryptedData = res.response;
my.request({
url: '你的后端服務(wù)端',
data: encryptedData,
});
},
fail: (res) => {
console.log(res);
console.log('getPhoneNumber_fail');
},
});
res.response 為完整的報(bào)文數(shù)據(jù),前端需要將該報(bào)文發(fā)送到開(kāi)發(fā)者服務(wù)端做驗(yàn)簽和解密處理,服務(wù)端解密后的明文示例如下:
{
"code": "10000",
"msg": "Success",
"mobile": "1597671905"
}
{
"code": "40003",
"msg": "Insufficient Conditions",
"subCode": "isv.invalid-auth-relations",
"subMsg": "無(wú)效的授權(quán)關(guān)系"
}
{
"code": "20000",
"msg": "Service Currently Unavailable",
"subCode": "aop.unknow-error",
"subMsg": "系統(tǒng)繁忙"
}
{
"code": "40001",
"msg": "Missing Required Arguments",
"subCode": "isv.missing-default-signature-type",
"subMsg": "應(yīng)用未設(shè)置默認(rèn)簽名類型"
}
// 解決方案:重新保存下開(kāi)發(fā)者的密鑰,或者設(shè)置下小程序的應(yīng)用網(wǎng)關(guān)地址
{
"code": "40002",
"msg": "Invalid Arguments",
"subCode": "isv.invalid-encrypt",
"subMsg": "加密異常"
}
// 解決方案:按文檔重新設(shè)置AES密鑰
調(diào)用 my.getPhoneNumber 獲取手機(jī)號(hào)報(bào)錯(cuò)時(shí),請(qǐng)檢查以下配置內(nèi)容:
<button a:if="{{canIUseAuthButton}}" open-type="getAuthorize" onGetAuthorize="onGetAuthorize" onError="onAuthError" scope='phoneNumber'> 授權(quán)手機(jī)號(hào)</button>
應(yīng)用網(wǎng)關(guān)用于接收支付寶異步通知,例如口碑開(kāi)店中,需要配置此網(wǎng)關(guān)來(lái)接收開(kāi)發(fā)者門(mén)店被動(dòng)通知 。且一個(gè) APPID 只能配置一個(gè)對(duì)應(yīng)的應(yīng)用網(wǎng)關(guān),應(yīng)用網(wǎng)關(guān)以 https:// 或 http://開(kāi)頭。
<button>
組件 open-type
的值設(shè)置為 getAuthorize
,并將 scope
設(shè)置為 phoneNumber
。示例代碼如下:<!-- .axml -->
<button a:if="{{canIUseAuthButton}}" open-type="getAuthorize"
onGetAuthorize="onGetAuthorize" onError="onAuthError" scope='phoneNumber'>
授權(quán)手機(jī)號(hào)
</button>
my.getPhoneNumber()
接口獲取到支付寶服務(wù)器返回的加密數(shù)據(jù), 然后在第三方服務(wù)端結(jié)合簽名算法和AES密鑰進(jìn)行解密獲取手機(jī)號(hào),若用戶未授權(quán),直接調(diào)用 my.getPhoneNumber()
接口,則無(wú)法返回正確信息。\1. 將 button 組件 open-type 的值設(shè)置為 getAuthorize。
示例代碼:
<button a:if="{{canIUseAuthButton}}" open-type="getAuthorize"
onGetAuthorize="onGetAuthorize" onError="onAuthError" scope='phoneNumber'>
授權(quán)手機(jī)號(hào)
</button>
Button屬性說(shuō)明:
屬性 | 說(shuō)明 |
---|---|
open-type | 此處設(shè)置為 getAuthorize ,用于授權(quán)。 |
scope | 此處設(shè)置為 phoneNumber ,手機(jī)號(hào)碼。 |
onGetAuthorize | 授權(quán)成功回調(diào)(在回調(diào)里可以調(diào)用獲取信息的接口)。 |
onError | 授權(quán)失敗回調(diào)(包括用戶拒絕和系統(tǒng)異常)。 |
\2. 用戶點(diǎn)擊并同意授權(quán)后,可以通過(guò) my.getPhoneNumber 獲取到支付寶服務(wù)器返回的加密數(shù)據(jù), 然后在第三方服務(wù)端結(jié)合簽名算法和AES密鑰進(jìn)行解密獲取手機(jī)號(hào)。
my.getPhoneNumber({
success: (res) => {
let encryptedData = res.response;
my.httpRequest({
url: '你的后端服務(wù)端',
data: encryptedData,
});
},
fail: (res) => {
console.log(res);
console.log('getPhoneNumber_fail');
},
});
報(bào)錯(cuò)“ISV權(quán)限不足”是由于未添加“獲取會(huì)員手機(jī)號(hào)”功能包。請(qǐng)至小程序管理后臺(tái)添加功能包。
\1. 在 小程序開(kāi)發(fā)管理后臺(tái) 的 功能列表 中,點(diǎn)擊 添加功能。
\2. 添加 獲取會(huì)員手機(jī)號(hào) 功能包。
\3. 點(diǎn)擊 用戶信息申請(qǐng)。
\4. 在 申請(qǐng)權(quán)限 中申請(qǐng)用戶手機(jī)號(hào)。
\5. 填寫(xiě)申請(qǐng)?jiān)?、使用?chǎng)景等信息,提交申請(qǐng),等待審核。
錯(cuò)誤碼 | 錯(cuò)誤詳情 | 解決方案 |
---|---|---|
20000 | 系統(tǒng)繁忙 | 稍后再試。 |
40001 | 應(yīng)用未設(shè)置默認(rèn)簽名類型 | 在 小程序開(kāi)發(fā)管理后臺(tái) > 設(shè)置 > 開(kāi)發(fā)設(shè)置 中,設(shè)置 支付寶公鑰 和 應(yīng)用網(wǎng)關(guān)。 |
40002 | 加密異常 | 在 小程序開(kāi)發(fā)管理后臺(tái) > 設(shè)置 > 開(kāi)發(fā)設(shè)置 中,設(shè)置 aes 密鑰。 |
40003 | 無(wú)效的授權(quán)關(guān)系 | 用戶未同意授權(quán),或授權(quán)已失效,可稍后再試。 |
my.getPhoneNumber 獲取的是支付寶服務(wù)器返回的加密數(shù)據(jù)。
在第三方服務(wù)端結(jié)合簽名算法和 AES 密鑰進(jìn)行解密可獲取手機(jī)號(hào)。
服務(wù)端解密后的明文示例如下:
{
"code": "10000",
"msg": "Success",
"mobile": "18818181818"
}
請(qǐng)確保已設(shè)置支付寶公鑰,aes 密鑰、應(yīng)用網(wǎng)關(guān)。若缺失這三個(gè)設(shè)置任一,在調(diào)用 my.getPhoneNumber 時(shí)可能只返回 response。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: