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

官方流程圖

小程序使用方法
需要將 <button> 組件 open-type 的值設(shè)置為 getPhoneNumber,當(dāng)用戶點(diǎn)擊并同意之后,可以通過 bindgetphonenumber 事件回調(diào)獲取到微信服務(wù)器返回的加密數(shù)據(jù), 然后在第三方服務(wù)端結(jié)合 session_key 以及 app_id 進(jìn)行解密獲取手機(jī)號。
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> </button>
返回參數(shù)說明
| 參數(shù) | 類型 | 說明 |
|---|---|---|
| encryptedData | String | 包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù),詳細(xì)見加密數(shù)據(jù)解密算法 |
| iv | String | 加密算法的初始向量,詳細(xì)見加密數(shù)據(jù)解密算法 |
接受到這些參數(shù)以后小程序把code,encryptedData,iv發(fā)給后臺,然后后臺解密
后臺解密
在解密以前需要session_key進(jìn)行配合解密,所以首先通過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
微信官方提供了多種編程語言的示例代碼點(diǎn)擊下載
返回?cái)?shù)據(jù)格式
{
"phoneNumber": "13580006666",
"purePhoneNumber": "13580006666",
"countryCode": "86",
"watermark":
{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
總結(jié)
以上所述是小編給大家介紹的python獲取微信小程序手機(jī)號并綁定遇到的坑,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Pytorch使用VGG16模型進(jìn)行預(yù)測貓狗二分類實(shí)戰(zhàn)
VGG16是Visual Geometry Group的縮寫,它的名字來源于提出該網(wǎng)絡(luò)的實(shí)驗(yàn)室,本文我們將使用PyTorch來實(shí)現(xiàn)VGG16網(wǎng)絡(luò),用于貓狗預(yù)測的二分類任務(wù),我們將對VGG16的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行適當(dāng)?shù)男薷?以適應(yīng)我們的任務(wù),需要的朋友可以參考下2023-08-08
python?字符串常用方法超詳細(xì)梳理總結(jié)
字符串是Python中基本的數(shù)據(jù)類型,幾乎在每個(gè)Python程序中都會使用到它。本文為大家總結(jié)了Python中必備的31個(gè)字符串方法,需要的可以參考一下2022-03-03
Python使用Tabulate庫實(shí)現(xiàn)格式化表格數(shù)據(jù)
在數(shù)據(jù)分析和軟件開發(fā)中,表格數(shù)據(jù)的展示是一個(gè)常見的需求,無論是簡單的數(shù)據(jù)報(bào)告,還是復(fù)雜的數(shù)據(jù)可視化,表格都是一種直觀且有效的信息展示方式,tabulate庫是一個(gè)非常實(shí)用的工具,它可以幫助我們輕松地將數(shù)據(jù)格式化為各種表格形式,本文將詳細(xì)介紹tabulate庫的使用方法2025-02-02
Python類中__init__()?和self的詳細(xì)解析
self和__init__的語法學(xué)過Python的都清楚,但是靠死記硬背來迫使自己理解并不是個(gè)好辦法,下面這篇文章主要給大家介紹了關(guān)于Python類中__init__()?和self的相關(guān)資料,需要的朋友可以參考下2022-12-12
將python圖片轉(zhuǎn)為二進(jìn)制文本的實(shí)例
今天小編就為大家分享一篇將python圖片轉(zhuǎn)為二進(jìn)制文本的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python實(shí)現(xiàn)讀取并寫入Excel文件過程解析
這篇文章主要介紹了Python實(shí)現(xiàn)讀取并寫入Excel文件過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
python 實(shí)現(xiàn)在無序數(shù)組中找到中位數(shù)方法
這篇文章主要介紹了python 實(shí)現(xiàn)在無序數(shù)組中找到中位數(shù)方法,具有很好對參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03

