【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);

至此,本记录结束,有问题欢迎给我提出来哦!微信小程序

相关文章
相关标签/搜索