openid = $decoded->openid; $this->session_key = $decoded->session_key; } catch (\Firebase\JWT\ExpiredException $e) { // Token 过期 echo json_encode(array('status' => -1, 'msg' => 'Token 已过期')); exit(); } catch (\Exception $e) { // 其他 JWT 解码错误 echo json_encode(array('status' => -1, 'msg' => 'Token 解码失败')); exit(); } catch (\TypeError $e) { // 处理 Token 为 null 或者不是字符串的情况 echo json_encode(array('status' => -1, 'msg' => 'Token 无效')); 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' => strtotime('tomorrow'), //过期时间 到第二天凌晨 'exp' => $currtime + 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; } } }