原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處
本案例目的在于測試wx.getUserInfo()得到的encryptedData密文的解密過程。
僅供學習使用。
//一條代碼即可
<button bindtap="tap">tap</button>
Page({
//wxml文件,弄一個button按鈕即可
//在console控制臺查看數據
tap: function () {
//調用登錄接口
wx.login({
success: function (login) {
//成功,返回登錄憑證js_code
var js_code = login.code;
//調用獲取用戶信息接口
wx.getUserInfo({
success: function (res) {
//成功,獲取解密相關的用戶信息
var encryptedData = res.encryptedData; //AES密文
var iv = res.iv; //AES初始向量
//調用網絡請求接口
//把js_code、AES密文、AES初始向量發送到服務器
wx.request({
url: 'http://jx.qyggame.com/wx.php',
data: {
js_code: js_code,
encryptedData: encryptedData,
iv: iv
},
method: 'GET', //用Get的請求方式
success: function (data) {
//成功,返回解密后的用戶敏感信息
console.log(data);
}
})
}
})
}
});
}
})
聲明:以下代碼運行在自己的服務器,必須有PHP環境才可以運行。
下文wx.php導入AES處理類的代碼及注釋,詳見如下文章:
4:官方AES代碼(PHP版)代碼注釋(加解密、簽名系列)
<?php
//導入AES處理類
include_once "aes/wxBizDataCrypt.php";
//AppID(小程序ID)
$APPID= "wx138cb9ea9980af75";
//AppSecret(小程序密鑰)
$SECRET = "0d082ea095f1df6aef3f2300fdbe0147";
//接收小程序端發來的js_code
$js_code = $_GET[js_code];
//小程序接口(appid+secret+js_code=sessionId+openId)
$url = "https://api.weixin.qq.com/sns/jscode2session?appid={$APPID}&secret={$SECRET}&js_code={$js_code}&grant_type=authorization_code";
//模擬網頁的GET請求
$timeout = 5;
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_URL, $url); //設置訪問的url地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //參數為1表示傳輸數據,為0表示直接輸出顯示。
curl_setopt($ch, CURLOPT_HEADER, 0); //參數為0表示不帶頭文件,為1表示帶頭文件
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //獲取https需要加上此
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //獲取https需要加上此
$json_data = curl_exec($ch); //執行命令并把獲取的數據賦值給$output
curl_close($ch); //關閉URL請求
//返回的Json數據轉換成數組
$array = json_decode($json_data,true);
//獲得session_key
$session_key =$array['session_key'];
//獲取小程序發送來的AES用到的“密文”
$encryptedData = $_GET[encryptedData];
//獲取小程序發送來的AES用到的“初始向量”
$iv = $_GET[iv];
//調用官方提供的AES處理類,并初始化
$pc = new WXBizDataCrypt($APPID, $session_key);
//對密文的解密
$errCode = $pc->decryptData($encryptedData, $iv, $data );
if ($errCode == 0) {
//0表示正常,返回敏感數據
//本源碼僅為測試,一般敏感信息不必返回微信小程序客戶端
echo $data;
} else {
//不為0,返回錯誤代碼
echo $errCode;
}
?>