81 lines
2.4 KiB
PHP
81 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace Api\Controller;
|
|
|
|
use Think\Controller;
|
|
|
|
use Firebase\JWT\JWT;
|
|
|
|
class PublicController extends Controller
|
|
{
|
|
//初始化
|
|
public function _initialize()
|
|
{
|
|
}
|
|
//远程调取页面 访问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, // 在此时间之前不可用 (这里是2秒以内)
|
|
'exp' => strtotime('tomorrow'), //过期时间 到第二天凌晨
|
|
'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;
|
|
}
|
|
}
|
|
}
|