sifangpay/app/Classc/WxBizDataCrypt.php

101 lines
1.8 KiB
PHP
Raw 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 App\Classc;
class WxBizDataCrypt
{
private $appid;
private $sessionKey;
/**
* 构造函数
* @param $sessionKey string 用户在小程序登录后获取的会话密钥
* @param $appid string 小程序的appid
*/
public function __construct( $appid, $sessionKey)
{
$this->sessionKey = $sessionKey;
$this->appid = $appid;
}
public function error($code)
{
switch ($code) {
case 'IllegalAesKey':
# code...
return '-41001';
break;
case 'IllegalIv':
# code...
return '-41002';
break;
case 'IllegalBuffer':
# code...
return '-41003';
break;
case 'DecodeBase64Error':
# code...
return '-41004';
break;
case 'OK':
# code...
return '0';
break;
default:
# code...
break;
}
}
/**
* 检验数据的真实性,并且获取解密后的明文.
* @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->error('IllegalAesKey');
}
$aesKey=base64_decode($this->sessionKey);
if (strlen($iv) != 24) {
return $this->error('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->error('IllegalBuffer');
}
if( $dataObj->watermark->appid != $this->appid )
{
return $this->error('IllegalBuffer');
}
$data = $result;
return $this->error('OK');
}
}