小程序模板網(wǎng)

微信小程序獲取微信綁定授權(quán)手機(jī)號(hào)getPhoneNumber 全流程及出現(xiàn)手機(jī)號(hào)帶*號(hào)問(wèn)題

發(fā)布時(shí)間:2018-05-09 15:37 所屬欄目:小程序開發(fā)教程

微信小程序文檔中給出如下示例

 

獲取微信用戶綁定的手機(jī)號(hào),需先調(diào)用login接口。

因?yàn)樾枰脩糁鲃?dòng)觸發(fā)才能發(fā)起獲取手機(jī)號(hào)接口,所以該功能不由 API 來(lái)調(diào)用,需用 <button> 組件的點(diǎn)擊來(lái)觸發(fā)。

注意:目前該接口針對(duì)非個(gè)人開發(fā)者,且完成了認(rèn)證的小程序開放。需謹(jǐn)慎使用,若用戶舉報(bào)較多或被發(fā)現(xiàn)在不必要場(chǎng)景下使用,微信有權(quán)永久回收該小程序的該接口權(quán)限。

使用方法

需要將 <button> 組件 open-type 的值設(shè)置為 getPhoneNumber,當(dāng)用戶點(diǎn)擊并同意之后,可以通過(guò) bindgetphonenumber 事件回調(diào)獲取到微信服務(wù)器返回的加密數(shù)據(jù), 然后在第三方服務(wù)端結(jié)合 session_key 以及 app_id 進(jìn)行解密獲取手機(jī)號(hào)。

注意

在回調(diào)中調(diào)用 wx.login 登錄,可能會(huì)刷新登錄態(tài)。此時(shí)服務(wù)器使用 code 換取的 sessionKey 不是加密時(shí)使用的 sessionKey,導(dǎo)致解密失敗。建議開發(fā)者提前進(jìn)行 login;或者在回調(diào)中先使用 checkSession 進(jìn)行登錄態(tài)檢查,避免 login 刷新登錄態(tài)。

例子


<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) 
    } 
})

返回參數(shù)說(shuō)明


{encryptedData 解密后為以下 json 結(jié)構(gòu),詳見加密數(shù)據(jù)解密算法


    "phoneNumber": "13580006666",  
    "purePhoneNumber": "13580006666", 
    "countryCode": "86",
    "watermark":
    {
        "appid":"APPID",
        "timestamp":TIMESTAMP
    }
}
但是到這里你會(huì)發(fā)現(xiàn)其實(shí)根本不詳盡尤其是解密和錯(cuò)誤代碼方面

 

首先如手冊(cè)所述,解析加密數(shù)據(jù)包不太明白我給大家貼個(gè)示例

 

 

getPhoneNumber: function (e) {
console.log(e.detail.iv);
console.log(e.detail.encryptedData);
wx.login({
success: res => {
console.log(res.code);
wx.request({
url: 'https://你的解密地址',
data: {
'encryptedData': encodeURIComponent(e.detail.encryptedData),
'iv': e.detail.iv,
'code': res.code
},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
'content-type':'application/json'
}, // 設(shè)置請(qǐng)求的 header
success: function (res) {
if (res.status ==1) {//我后臺(tái)設(shè)置的返回值為1是正確
//存入緩存即可
wx.setStorageSync('phone', res.phone);
}
},
fail: function (err) {
console.log(err);
}
})
}
})
}

 

后臺(tái)解析代碼就是利用傳過(guò)去的三個(gè)值,來(lái)進(jìn)行解析每個(gè)語(yǔ)言解析方式不同請(qǐng)下載樣例

微信官方提供了多種編程語(yǔ)言的示例代碼(點(diǎn)擊下載)。每種語(yǔ)言類型的接口名字均一致。調(diào)用方式可以參照示例。

 

注意解析方式跟解析用戶信息是一個(gè)解析方式?。。?!

 

在這里小編遇到了一個(gè)問(wèn)題解析回的形式雖然跟文檔相同但是!

卻是這個(gè)樣子的數(shù)據(jù):

 

 

這樣的情況其實(shí)是因?yàn)殚_發(fā)的基礎(chǔ)庫(kù)版庫(kù)過(guò)低造成的

配置地點(diǎn)在這里:

 

 

小編修改為v1.9.1之后呈現(xiàn)形式就如同官網(wǎng)手冊(cè) 一樣了

 


{
    "phoneNumber": "13580006666",  
    "purePhoneNumber": "13580006666", 
    "countryCode": "86",
    "watermark":
    {
        "appid":"APPID",
        "timestamp":TIMESTAMP
    }
}

至此獲取微信綁定的用戶手機(jī)號(hào)完成!

 

還有一點(diǎn)要注意你的開發(fā)版本上去了,但是用戶不一定更新了

所以微信后臺(tái)有這樣一個(gè)配置~


剩下的問(wèn)題歡迎在下面評(píng)論,第一次寫博客希望對(duì)大家有幫助?。?!


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://www.u-renovate.com/wxmini/doc/course/24397.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×