python獲取微信小程序手機號并綁定遇到的坑
最近在做小程序開發(fā),在其中也遇到了很多的坑,獲取小程序的手機號并綁定就遇到了一個很傻的坑。
流程介紹
官方流程圖
小程序使用方法
需要將 <button> 組件 open-type 的值設(shè)置為 getPhoneNumber,當(dāng)用戶點擊并同意之后,可以通過 bindgetphonenumber 事件回調(diào)獲取到微信服務(wù)器返回的加密數(shù)據(jù), 然后在第三方服務(wù)端結(jié)合 session_key 以及 app_id 進行解密獲取手機號。
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> </button>
返回參數(shù)說明
參數(shù) | 類型 | 說明 |
---|---|---|
encryptedData | String | 包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù),詳細見加密數(shù)據(jù)解密算法 |
iv | String | 加密算法的初始向量,詳細見加密數(shù)據(jù)解密算法 |
接受到這些參數(shù)以后小程序把code,encryptedData,iv發(fā)給后臺,然后后臺解密
后臺解密
在解密以前需要session_key進行配合解密,所以首先通過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以后就可以進行解密了,python2實現(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
微信官方提供了多種編程語言的示例代碼點擊下載
返回數(shù)據(jù)格式
{ "phoneNumber": "13580006666", "purePhoneNumber": "13580006666", "countryCode": "86", "watermark": { "appid":"APPID", "timestamp":TIMESTAMP } }
總結(jié)
以上所述是小編給大家介紹的python獲取微信小程序手機號并綁定遇到的坑,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
利用Pandas實現(xiàn)對數(shù)據(jù)進行移動計算
這篇文章主要為大家詳細介紹了如何利用Pandas實現(xiàn)對數(shù)據(jù)進行移動計算,文中的示例代碼講解詳細,對我們了解Pandas有一定幫助,需要的可以參考一下2022-07-07使用qt quick-ListView仿微信好友列表和聊天列表的示例代碼
本文以微信好友列表為例給大家學(xué)習(xí)listview的相關(guān)知識,通過實例demo給大家詳解qt quick-ListView仿微信好友列表和聊天列表的實現(xiàn)方法,需要的朋友參考下吧2021-06-06測試、預(yù)發(fā)布后用python檢測網(wǎng)頁是否有日常鏈接
難免會碰到秀逗了把測試的鏈接發(fā)布到線上的情況,一般這種都是通過一些測試的檢查工具來檢查鏈接來規(guī)避風(fēng)險的,下面為大家簡述下大概的實現(xiàn)思路2014-06-06