WXBizDataCrypt.php 1.32 KB
<?php

namespace app\api\helpers\wxencrypt;
use function strlen;
use function base64_decode;
use function json_decode;

/**
 * 对微信小程序用户加密数据的解密示例代码.
 *
 * @copyright Copyright (c) 1998-2014 Tencent Inc.
 */

class WXBizDataCrypt
{
	/**
	 * 检验数据的真实性,并且获取解密后的明文.
	 * @param $encryptedData string 加密的用户数据
	 * @param $iv string 与用户数据一同返回的初始向量
	 * @param $data string 解密后的原文
     *
	 * @return int 成功0,失败返回对应的错误码
	 */
	public static function decryptData($appid, $sessionKey, $encryptedData, $iv, &$data )
	{
		if (strlen($sessionKey) != 24) {
			return ErrorCode::$IllegalAesKey;
		}

		$aesKey = base64_decode($sessionKey);
        
		if (strlen($iv) != 24) {
			return ErrorCode::$IllegalIv;
		}

		$aesIV = base64_decode($iv);
		$aesCipher = base64_decode($encryptedData);
		$result = Prpcrypt::decrypt($aesKey, $aesCipher,$aesIV);
        
		if ($result[0] != 0) {
			return $result[0];
		}
     
        $dataObj = json_decode( $result[1] );
        if ($dataObj == NULL) {
            return ErrorCode::$IllegalBuffer;
        }

        if ($dataObj->watermark->appid != $appid) {
            return ErrorCode::$IllegalBuffer;
        }

		$data = $result[1];
		return ErrorCode::$OK;
	}
}