/**
* 根据unionid获取用户信息
*/
public function getByWxUnionId($unionId)
{
$cacheKey = getCacheKey('redis_key.cache_key.wxa_user.info') . $unionId;
$value = $this->remember($cacheKey, function () use ($unionId) {
$userInfo = WxaUser::where('wx_union_id', $unionId)->first();
$userInfo = $this->compactUserInfo($userInfo);
return $userInfo;
});
return $value;
}
WxBizDataHelper工具类
<?php
/**
* Created by PhpStorm.
* User: Auser
* Time: 11:17
*/
namespace App\Http\Base\Wx;
class WxBizDataHelper
{
private $appid;
private $seesionKey ;
private $encryptedData;
private $iv;
public function __construct($appid, $sessionKey,$encryptedData, $iv)
{
$this->appid = $appid;
$this->seesionKey = $sessionKey;
$this->encryptedData = $encryptedData;
$this->iv = $iv;
}
public function getData(){
$pc = new WXBizDataCrypt($this->appid, $this->seesionKey);
$json = '';
$errCode = $pc->decryptData($this->encryptedData, $this->iv, $json);
$data = [];
if ($errCode == 0) {
$data = json_decode($json,true);
}
return $data;
}
}
WXBizDataCrypt工具类
<?php
/**
* Created by PhpStorm.
* User: Auser
* Time: 10:38
*/
namespace App\Http\Base\Wx;
use App\Http\Base\Wx\Prpcrypt;
use App\Http\Base\Wx\ErrorCode;
use App\Http\Base\Wx\PKCS7Encoder;
class WXBizDataCrypt
{
private $appid;
private $sessionKey;
/**
* 构造函数
* @param $sessionKey string 用户在小程序登录后获取的会话密钥
* @param $appid string 小程序的appid
*/
public function __construct( $appid, $sessionKey)
{
$this->sessionKey = $sessionKey;
$this->appid = $appid;
}
/**
* 检验数据的真实性,并且获取解密后的明文.
* @param $encryptedData string 加密的用户数据
* @param $iv string 与用户数据一同返回的初始向量
* @param $data string 解密后的原文
*
* @return int 成功0,失败返回对应的错误码
*/
public function decryptData( $encryptedData, $iv, &$data )
{
if (strlen($this->sessionKey) != 24) {
return ErrorCode::$IllegalAesKey;
}
$aesKey=base64_decode($this->sessionKey);
if (strlen($iv) != 24) {
return ErrorCode::$IllegalIv;
}
$aesIV=base64_decode($iv);
$aesCipher=base64_decode($encryptedData);
$pc = new Prpcrypt($aesKey);
$result = $pc->decrypt($aesCipher,$aesIV);
if ($result[0] != 0) {
return $result[0];
}
$dataObj=json_decode( $result[1] );
if( $dataObj == NULL )
{
return ErrorCode::$IllegalBuffer;
}
if( $dataObj->watermark->appid != $this->appid )
{
return ErrorCode::$IllegalBuffer;
}
$data = $result[1];
return ErrorCode::$OK;
}
}
