溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python獲取微信小程序手機(jī)號(hào)并綁定遇到的坑

發(fā)布時(shí)間:2020-10-05 12:01:34 來(lái)源:腳本之家 閱讀:556 作者:如何好聽 欄目:開發(fā)技術(shù)

最近在做小程序開發(fā),在其中也遇到了很多的坑,獲取小程序的手機(jī)號(hào)并綁定就遇到了一個(gè)很傻的坑。

流程介紹

python獲取微信小程序手機(jī)號(hào)并綁定遇到的坑

官方流程圖

python獲取微信小程序手機(jī)號(hào)并綁定遇到的坑

小程序使用方法

需要將 <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)。

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> </button>

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

參數(shù) 類型 說(shuō)明
encryptedData String 包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù),詳細(xì)見加密數(shù)據(jù)解密算法
iv String 加密算法的初始向量,詳細(xì)見加密數(shù)據(jù)解密算法

接受到這些參數(shù)以后小程序把code,encryptedData,iv發(fā)給后臺(tái),然后后臺(tái)解密

后臺(tái)解密

在解密以前需要session_key進(jìn)行配合解密,所以首先通過(guò)code獲取session_key

 # 獲取openid,session_key
 # Appid為小程序id
  openid_url = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code" % (
    APP_ID, APP_KEY, code
  )
  req = requests.get(openid_url)
  rep = req.json()
  session_key = rep.get("session_key")

在得到session_key,encryptedData,iv以后就可以進(jìn)行解密了,python2實(shí)現(xiàn)代碼如下:

 import base64
 import json
 from Crypto.Cipher import AES
 class WXBizDataCrypt:
   def __init__(self, appId, sessionKey):
     self.appId = appId
     self.sessionKey = sessionKey
   def decrypt(self, encryptedData, iv):
     # base64 decode
     sessionKey = base64.b64decode(self.sessionKey)
     encryptedData = base64.b64decode(encryptedData)
     iv = base64.b64decode(iv)
     cipher = AES.new(sessionKey, AES.MODE_CBC, iv)
     decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))
     if decrypted['watermark']['appid'] != self.appId:
       raise Exception('Invalid Buffer')
     return decrypted
   def _unpad(self, s):
     return s[:-ord(s[len(s)-1:])]

調(diào)用傳參

# APP_ID為小程序id不是openid?。。?pc = wx_jm(APP_ID, session_key)
res = pc.decrypt(encryptedData, iv)

參數(shù)詳情參照微信官方文檔https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html

微信官方提供了多種編程語(yǔ)言的示例代碼點(diǎn)擊下載

返回?cái)?shù)據(jù)格式

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

總結(jié)

以上所述是小編給大家介紹的python獲取微信小程序手機(jī)號(hào)并綁定遇到的坑,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)億速云網(wǎng)站的支持!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI