-1, 'msg' => '帐号认证过期!')); exit(); } // token检测通过 获取用户id $this->openid = $res_token['openid']; $this->session_key = $res_token['session_key']; } catch (\UnexpectedValueException $e) { // 捕获JWT解码错误 echo json_encode(array('status' => -1, 'msg' => 'Token 无效: ' . $e->getMessage())); exit(); } catch (\DomainException $e) { // 捕获JWT解码错误 echo json_encode(array('status' => -1, 'msg' => 'Token 解码失败: ' . $e->getMessage())); exit(); } catch (\Exception $e) { // 捕获其他可能的错误 echo json_encode(array('status' => -1, 'msg' => '未知错误: ' . $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' => 60, //过期时间 到第二天凌晨 '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; } } }