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

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

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

準備工做

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

文章中的加密方法對於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);

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

相關文章
相關標籤/搜索