-1, 'msg' => 'Token 不存在或无效!')); exit(); } $jwtKey = C('jwtKey'); // jwt密钥 try { $jwt = JWT::decode($token, new Key($jwtKey, 'HS256')); // 使用密钥和 HS256 算法对 JWT 进行解码 $res_token = (array) $jwt; // 将解码后的对象转换为数组 // token过期 if (empty($res_token)) { echo json_encode(array('status' => -1, 'msg' => '帐号认证过期!')); exit(); } // token检测通过 获取用户id $this->openid = $res_token['openid']; $this->session_key = $res_token['session_key']; } catch (Exception $e) { // 捕获解码过程中可能的异常,并返回错误信息 echo json_encode(array('status' => -1, 'msg' => 'Token 无效: ' . $e->getMessage())); exit(); } } //远程调取页面 访问API protected function apiUrl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); $jsoninfo = json_decode($output, true); return $jsoninfo; } /** * @description: 构建 用户订阅对应主题的前缀 * @param {*} openid 微信用户唯一凭证 * @return {*} topicPrefix 主题前缀 */ protected function makeTopicPrefix($openid) { return substr(md5($openid . date("j")), 0, 8); //用户id+当天日 加密 截取前8位 } /** * @description: 构建token * @param {*} openid 微信用户唯一凭证 * @return {*} token */ protected function makeToken($openid, $session_key) { // 定义密钥,应该使用安全的随机字符串并妥善保管 $jwtKey = C('jwtKey'); $currtime = time(); // 要存储在 JWT 中的数据 $data = [ 'iat' => $currtime, // 签发时间(时间戳) 'iss' => 'jwt_admin', // 签发者 'nbf' => $currtime, // 在此时间之前不可用 (这里是2秒以内) 'exp' => 20, //过期时间 到第二天凌晨 'openid' => $openid, 'session_key' => $session_key, ]; // 使用密钥和 HS256 算法对数据进行编码生成 JWT return JWT::encode($data, $jwtKey, 'HS256'); } /** * @description: 将手机号的倒数第 5 位到第 8 位替换成星号 * @param string $phoneNumber 完整的手机号 * @return string 处理后的手机号 */ protected function maskPhoneNumber($phoneNumber) { // 去掉手机号中的+号以便处理 $cleanPhoneNumber = str_replace('+', '', $phoneNumber); // 判断手机号长度(带国家区号和不带国家区号的情况) if (strlen($cleanPhoneNumber) > 11) { // 带国家区号的手机号 $maskedPhoneNumber = substr_replace($cleanPhoneNumber, '****', -8, 4); return '+' . $maskedPhoneNumber; } elseif (strlen($cleanPhoneNumber) === 11) { // 不带国家区号的手机号 return substr_replace($cleanPhoneNumber, '****', -8, 4); } else { // 非法手机号长度,返回原始号码 return $phoneNumber; } } }