php7 mysql json 小程序_【PHP7】微信小程序用户信息encryptedData解密

微信小程序出来已久,也没时间学习,近期在尝试做一个小程序玩玩,获取用户信息的时候,微信会返回一些数据,包括明文(json格式)的用户基本信息,同时也有一个加密的字段encryptedData,这里面包括了用户基本信息之外还多了一个参数watermark,里面存放的是用户的openid和小程序的appid,但是要得到这些数据就需要后台进行解密,下面我就说一说解密的过程。

5822442435bcaaf3239329d89303f78f.png

官方给了一些示例,网上也有根据这些改进的加解密方法,但是在我(菜鸟)看来都不是很清楚明了。php7.1之后的版本mcrypt扩展已被废弃,但是小程序官方只给了该版本的示例,对于使用php7.1之后版本的服务器来说就要用别的方法加解密了,最好的方法就是使用openssl扩展,这也是php官方推荐的方案。

小提示:在使用微信的wx.request进行POST请求时,服务器用$_POST可能接收不到数据,我是使用get_file_contents('php://input')解决的,接收到的是一个json格式字符串,但是也可以使用别的方法,利用设置header(具体方法不再赘述)。

准备工作

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值