微信小程序文檔(dang)中給出如下示例
獲取(qu)微信(xin)用戶綁定的手機號,需先調用login接口。
因為需要用戶主動觸發才能發起(qi)獲(huo)取手(shou)機號接口,所(suo)以該功能不(bu)由 API 來(lai)調用,需用 <button> 組件的點擊來(lai)觸發。
注(zhu)意:目(mu)前該接口針對非(fei)個人開(kai)發者(zhe),且(qie)完成(cheng)了認證的(de)小程序開(kai)放(fang)。需謹慎使用(yong),若(ruo)用(yong)戶(hu)舉報較多或(huo)被發現在(zai)不必要場景下使用(yong),微信有(you)權(quan)永久回(hui)收該小程序的(de)該接口權(quan)限。
需要將(jiang) <button> 組件(jian) open-type 的值設置為 getPhoneNumber,當(dang)用戶點(dian)擊(ji)并(bing)同意之(zhi)后(hou),可(ke)以(yi)通過 bindgetphonenumber 事件(jian)回(hui)調獲取到(dao)微信服(fu)務器(qi)返回(hui)的加密(mi)(mi)數據, 然后(hou)在第(di)三(san)方服(fu)務端結合(he) session_key 以(yi)及 app_id 進(jin)行解密(mi)(mi)獲取手機號。
在回調(diao)中調(diao)用 wx.login 登錄(lu),可能(neng)會刷(shua)新登錄(lu)態。此時(shi)服務器(qi)使用 code 換取的 sessionKey 不(bu)是加密時(shi)使用的 sessionKey,導致解密失敗。建議開發者(zhe)提前進行 login;或者(zhe)在回調(diao)中先使用 checkSession 進行登錄(lu)態檢(jian)查,避(bi)免(mian) login 刷(shua)新登錄(lu)態。
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> </button>
Page({
getPhoneNumber: function(e) {
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
}
})

{encryptedData 解(jie)密(mi)后為以下 json 結構,詳見(jian)加密(mi)數據解(jie)密(mi)算法
"phoneNumber": "13580006666",
"purePhoneNumber": "13580006666",
"countryCode": "86",
"watermark":
{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
但是(shi)到這里(li)你(ni)會發現其實根(gen)本不詳(xiang)盡尤(you)其是(shi)解密(mi)和錯誤(wu)代碼方面
首(shou)先如手(shou)冊所(suo)述(shu),解析加密數據包不(bu)太明(ming)白我給大家貼個示例
后(hou)臺解(jie)析(xi)(xi)代碼就是利用傳過去的(de)三個值(zhi),來(lai)進行解(jie)析(xi)(xi)每個語言解(jie)析(xi)(xi)方式(shi)不同請(qing)下載樣例
微信官方提供了多種編程語(yu)言的示(shi)例代碼(點擊下載)。每種語(yu)言類型的接(jie)口名字均一致。調(diao)用方式(shi)可以(yi)參照示(shi)例。
注意(yi)解析(xi)方式(shi)跟解析(xi)用(yong)戶信息是一個解析(xi)方式(shi)!!!!
在這(zhe)里(li)小(xiao)編遇到了一個問題解析(xi)回的(de)形式(shi)雖然跟(gen)文檔相同但是!
卻(que)是這(zhe)個樣子(zi)的(de)數據:

這(zhe)樣的情況(kuang)其實是因為開(kai)發的基礎庫版庫過(guo)低造成的
配(pei)置地點(dian)在這里:

小編修(xiu)改為v1.9.1之后呈現形式就如同官網(wang)手冊 一樣了(le)
{
"phoneNumber": "13580006666",
"purePhoneNumber": "13580006666",
"countryCode": "86",
"watermark":
{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
至(zhi)此獲取微信綁定的用戶手機號完成!
還有(you)一點要(yao)注意你的開(kai)發版(ban)本(ben)上(shang)去了,但(dan)是用戶不一定更新了
所以微(wei)信后臺有(you)這(zhe)樣一個配置~

剩下(xia)的問題歡迎在下(xia)面評論,第一次寫(xie)博客希望對大家有幫助!!!