cxhxy/extend/hema/wechat/WxBizDataCrypt.php
test_service d3170b4d1c 1
2023-12-01 15:43:29 +08:00

71 lines
1.8 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace hema\wechat;
use app\common\model\Applet;
/**
* 对微信小程序用户加密数据的解密示例代码.
*
*/
class WxBizDataCrypt
{
private $appid;
private $sessionKey;
private $OK = 0;
private $IllegalAesKey = -41001; //encodingAesKey 非法
private $IllegalIv = -41002;
private $IllegalBuffer = -41003; //aes 解密失败
private $DecodeBase64Error = -41004;//解密后得到的buffer非法
/**
* 构造函数
* @param $sessionKey string 用户在小程序登录后获取的会话密钥
* @param $appid string 小程序的appid
*/
public function __construct(string $sessionKey, int $applet_id = 0, $app_id = '')
{
$this->sessionKey = $sessionKey;
if(empty($app_id)){
$applet = Applet::get($applet_id);
$this->appid = $applet['app_id'];
}else{
$this->appid = $app_id;
}
}
/**
* 检验数据的真实性,并且获取解密后的明文.
* @param $encryptedData string 加密的用户数据
* @param $iv string 与用户数据一同返回的初始向量
* @param $data string 解密后的原文
*
* @return int 成功0失败返回对应的错误码
*/
public function decryptData( $encryptedData, $iv, &$data )
{
if (strlen($this->sessionKey) != 24) {
return $this->IllegalAesKey;
}
$aesKey=base64_decode($this->sessionKey);
if (strlen($iv) != 24) {
return $this->IllegalIv;
}
$aesIV=base64_decode($iv);
$aesCipher=base64_decode($encryptedData);
$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
$dataObj= json_decode($result);
if( $dataObj == NULL )
{
return $this->IllegalBuffer;
}
if( $dataObj->watermark->appid != $this->appid )
{
return $this->IllegalBuffer;
}
$data = $result;
return $this->OK;
}
}