微信小程序出来已久,也没时间学习,近期在尝试作一个小程序玩玩,获取用户信息的时候,微信会返回一些数据,包括明文(json格式)的用户基本信息,同时也有一个加密的字段
encryptedData
,这里面包括了用户基本信息以外还多了一个参数watermark
,里面存放的是用户的openid和小程序的appid,可是要获得这些数据就须要后台进行解密,下面我就说一说解密的过程。
官方给了一些示例,网上也有根据这些改进的加解密方法,可是在我(菜鸟)看来都不是很清楚明了。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);
至此,本记录结束,有问题欢迎给我提出来哦!微信小程序