# 手機號快速驗證組件
該能力旨在幫助開發(fā)者向用戶發(fā)起手機號申請,并且必須經(jīng)過用戶同意后,開發(fā)者才可獲得由平臺驗證后的手機號,進而為用戶提供相應(yīng)服務(wù)。
以下是舊版本組件使用指南,注意使用舊版本組件時,需先調(diào)用wx.login接口。建議開發(fā)者使用新版本組件,以增強小程序安全性。詳情新版組件使用指南。
因為需要用戶主動觸發(fā)才能發(fā)起手機號快速驗證,所以該功能不由 API 來調(diào)用,需用 button 組件的點擊來觸發(fā)。
注意
- 1. 目前該接口針對非個人開發(fā)者,且完成了認證的小程序開放(不包含海外主體)。需謹慎使用,若用戶舉報較多或被發(fā)現(xiàn)在不必要場景下使用,微信有權(quán)永久回收該小程序的該接口權(quán)限。
- 2. 該能力使用時,用戶可選擇綁定號碼,或自主添加號碼。平臺會對號碼進行驗證,但不保證是實時驗證;
- 3. 請開發(fā)者根據(jù)業(yè)務(wù)場景需要自行判斷并選擇是否使用,必要時可考慮增加其他安全驗證手段。
# 使用方法
需要將 button 組件 open-type 的值設(shè)置為 getPhoneNumber,當用戶點擊并同意之后,可以通過 bindgetphonenumber 事件回調(diào)獲取到微信服務(wù)器返回的加密數(shù)據(jù), 然后在第三方服務(wù)端結(jié)合 session_key 以及 app_id 進行解密獲取手機號。
# 注意事項
在回調(diào)中調(diào)用 wx.login 登錄,可能會刷新登錄態(tài)。此時服務(wù)器使用 code 換取的 sessionKey 不是加密時使用的 sessionKey,導(dǎo)致解密失敗。建議開發(fā)者提前進行 login;或者在回調(diào)中先使用 checkSession 進行登錄態(tài)檢查,避免 login 刷新登錄態(tài)。
# 代碼示例
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
Page({
getPhoneNumber (e) {
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
}
})
# 返回參數(shù)說明
| 參數(shù) | 類型 | 說明 | 最低版本 |
|---|---|---|---|
| encryptedData | String | 包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù),詳細見加密數(shù)據(jù)解密算法 | |
| iv | String | 加密算法的初始向量,詳細見加密數(shù)據(jù)解密算法 | |
| cloudID | string | 敏感數(shù)據(jù)對應(yīng)的云 ID,開通云開發(fā)的小程序才會返回,可通過云調(diào)用直接獲取開放數(shù)據(jù),詳細見云調(diào)用直接獲取開放數(shù)據(jù) | 基礎(chǔ)庫 2.8.0 |
獲取得到的開放數(shù)據(jù)為以下 json 結(jié)構(gòu):
{
"phoneNumber": "13580006666",
"purePhoneNumber": "13580006666",
"countryCode": "86",
"watermark":
{
"appid":"APPID",
"timestamp": TIMESTAMP
}
}
| 參數(shù) | 類型 | 說明 |
|---|---|---|
| phoneNumber | String | 用戶綁定的手機號(國外手機號會有區(qū)號) |
| purePhoneNumber | String | 沒有區(qū)號的手機號 |
| countryCode | String | 區(qū)號 |