怎么獲取微信綁定手機號呢?我們授權登錄的時候,我們只能獲取微信登錄人員的頭像,昵稱,性別之類的,而手機號需要二次授權才可以,那么獲取手機號都需要哪些條件呢?來看官方文檔
獲取手機號
獲取微信用戶綁定的手機號,需先調用wx.login接口。
因為需要用戶主動觸發才能發起獲取手機號接口,所以該功能不由 API 來調用,需用 button 組件的點擊來觸發。
注意:目前該接口針對非個人開發者,且完成了認證的小程序開放(不包含海外主體)。需謹慎使用,若用戶舉報較多或被發現在不必要場景下使用,微信有權永久回收該小程序的該接口權限。
使用方法
需要將 button 組件 open-type
的值設置為 getPhoneNumber
,當用戶點擊並同意之后,可以通過 bindgetphonenumber
事件回調獲取到微信服務器返回的加密數據, 然后在第三方服務端結合 session_key
以及 app_id
進行解密獲取手機號。
注意
在回調中調用 wx.login 登錄,可能會刷新登錄態。此時服務器使用 code 換取的 sessionKey 不是加密時使用的 sessionKey,導致解密失敗。建議開發者提前進行 login
;或者在回調中先使用 checkSession
進行登錄態檢查,避免 login
刷新登錄態。
代碼示例
<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) } })
返回參數說明
獲取得到的開放數據為以下 json 結構:
{ "phoneNumber": "13580006666", "purePhoneNumber": "13580006666", "countryCode": "86", "watermark": { "appid":"APPID", "timestamp": TIMESTAMP } }
參數 | 類型 | 說明 |
---|---|---|
phoneNumber | String | 用戶綁定的手機號(國外手機號會有區號) |
purePhoneNumber | String | 沒有區號的手機號 |
countryCode | String | 區號 |
給了參數,給了返回值,但是你返回值是加密的。。。。emmm你倒是說怎么解密啊!給個解密的自己去找吧。。。
然后他解密文檔提供了集中語言的解密dome,大家有興趣可以自己看一下,我貼下我PHP的代碼,別看dome三個文件,核心代碼就這五行,只需要三個參數 encryptedData加密的密文,iv加密算法起始值,sessionkey用戶的sessionkey,就可以了.
public function d2($encryptedData,$iv,$sessionkey){ $aesKey=base64_decode($sessionkey); $aesIV=base64_decode($iv); $aesCipher=base64_decode($encryptedData); $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV); $dataObj=json_decode( $result );