_appid = $app_id; $this->_appsecret = $app_secret; } /** * [DecryptData 检验数据的真实性,并且获取解密后的明文] * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @datetime 2017-12-30T18:20:53+0800 * @param [string] $encrypted_data [加密的用户数据] * @param [string] $iv [与用户数据一同返回的初始向量] * @param [string] $openid [解密后的原文] * @return [array|string] [成功返回用户信息数组, 失败返回错误信息] */ public function DecryptData($encrypted_data, $iv, $openid) { // 登录授权session $login_key = 'qq_user_login_'.$openid; $session_data = cache($login_key); if(empty($session_data)) { return 'session key不存在'; } // iv长度 if(strlen($iv) != 24) { return 'iv长度错误'; } // 加密函数 if(!function_exists('openssl_decrypt')) { return 'openssl不支持'; } $aes_cipher = base64_decode($encrypted_data); $result = openssl_decrypt($aes_cipher, "AES-128-CBC", base64_decode($session_data['session_key']), 1, base64_decode($iv)); $data = json_decode($result, true); if($data == NULL) { return '请重试!'; } if($data['watermark']['appid'] != $this->_appid ) { return 'appid不匹配'; } // 缓存存储 $data_key = 'qq_user_info_'.$openid; cache($data_key, $data); return $data; } /** * [GetAuthSessionKey 根据授权code获取 session_key 和 openid] * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @datetime 2017-12-30T18:20:53+0800 * @param [string] $authcode [用户授权码] * @return [string|boolean] [失败false, 成功返回appid|] */ public function GetAuthSessionKey($authcode) { // 请求获取session_key $url = 'https://api.q.qq.com/sns/jscode2session?appid='.$this->_appid.'&secret='.$this->_appsecret.'&js_code='.$authcode.'&grant_type=authorization_code'; $result = json_decode(file_get_contents($url), true); if(!empty($result['openid'])) { // 从缓存获取用户信息 $key = 'qq_user_login_'.$result['openid']; // 缓存存储 cache($key, $result); return $result['openid']; } return false; } } ?>