原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处
本案例目的在于测试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;
}
?>