【PHP7】微信小程序用戶信息encryptedData解密


微信小程序出來已久,也沒時間學習,近期在嘗試做一個小程序玩玩,獲取用戶信息的時候,微信會返回一些數據,包括明文(json格式)的用戶基本信息,同時也有一個加密的字段encryptedData,這里面包括了用戶基本信息之外還多了一個參數watermark,里面存放的是用戶的openid和小程序的appid,但是要得到這些數據就需要后台進行解密,下面我就說一說解密的過程。
小程序encryptedData
官方給了一些示例,網上也有根據這些改進的加解密方法,但是在我(菜鳥)看來都不是很清楚明了。php7.1之后的版本mcrypt擴展已被廢棄,但是小程序官方只給了該版本的示例,對於使用php7.1之后版本的服務器來說就要用別的方法加解密了,最好的方法就是使用openssl擴展,這也是php官方推薦的方案。

小提示:在使用微信的wx.request進行POST請求時,服務器用$_POST可能接收不到數據,我是使用get_file_contents('php://input')解決的,接收到的是一個json格式字符串,但是也可以使用別的方法,利用設置header(具體方法不再贅述)。

准備工作

之前,我在文章中有講到PHP的AES加解密的方法,今天就是結合該AES類進行操作:
方法①: PHP進行AES/ECB/PKCS7 padding加密的例子(mcrypt)
方法②:PHP進行AES/ECB/PKCS7 padding加密的例子(openssl)

文章中的加密方法對於ECB模式不需要做什么改變,但是微信小程序使用的加密方式是CBC,該方法和ECB的主要表面差別在於CBC需要設置iv向量,而ECB不需要。

示例代碼

# 將自己的參數進行替換
$str = file_get_contents('https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code');
# 將json字符串轉為數組
$data = json_decode($str, true);
# 這里解密用到的key就是獲得的session_key,然后對其進行base64_decode操作
$key = base64_decode($data['session_key']);
# iv是微信返回給你的向量,同樣進行base64_decode操作
$iv = base64_decode($_GET['iv']);
# 調用aes類,注意解密方法是AES-128-CBC
$aes = Aes::instance($key, 'AES-128-CBC', $iv);
# 對數據進行解密,得到解密后的json字符串
$data = $aes->decrypt($encryptedData);

至此,本記錄結束,有問題歡迎給我提出來哦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM