/** * 根据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; } }