刮刮后端接口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

168 lines
4.6 KiB

<?php
// 应用公共文件
use \Firebase\JWT\JWT;
use Firebase\JWT\Key;
/**
* 生成验签
* @param $data
* @return string
*/
function signToken($data): string
{
$key = 'LAL@lc!'; //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当于加密中常用的 盐-salt
$token = array(
"iss" => $key, //签发者 可以为空
"aud" => '', //面象的用户,可以为空
"iat" => time(), //签发时间
"nbf" => time() + 3, //在什么时候jwt开始生效 (这里表示生成100秒后才生效)
"exp" => time() + 7200, //token 过期时间
"data" => $data //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
);
return JWT::encode($token, $key, "HS384"); //根据参数生成了token,可选:HS256、HS384、HS512、RS256、ES256等
}
/**
* 验证token
* @param $token
* @return array|int[]
*/
function checkToken($token): array
{
$key = 'LAL@lc!';
$status = array("code" => 2);
try {
JWT::$leeway = 60; //当前时间减去60,把时间留点余地
$decoded = JWT::decode($token, new Key($key, 'HS384')); //同上的方式,这里要和签发的时候对应
$arr = (array)$decoded;
$res['code'] = 200;
$res['data'] = $arr['data'];
$res['data'] = json_decode(json_encode($res['data']), true);//将stdObj类型转换为array
return $res;
} catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
$status['msg'] = "签名不正确";
return $status;
} catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
$status['msg'] = "token失效";
return $status;
} catch (\Firebase\JWT\ExpiredException $e) { // token过期
$status['msg'] = "token失效";
return $status;
} catch (Exception $e) { //其他错误
$status['msg'] = "未知错误";
return $status;
}
}
/**
* 获取随机字符
* @param int $length
* @return string
*/
function generate_random_str(int $length = 8): string
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$str = '';
$maxIndex = strlen($characters) - 1;
for ($i = 0; $i < $length; $i++) {
$randomIndex = mt_rand(0, $maxIndex);
$str .= $characters[$randomIndex];
}
return $str;
}
/**
* 返回图片路径
* @param $imageUrl
* @return string
*/
function get_image_url($imageUrl):string
{
$domain = \think\facade\Request::instance()->domain();
$url = config('filesystem.disks.public.url');
$strpos1 = strpos($imageUrl,'http');
$strpos2 = strpos($imageUrl,$url);
if ($strpos1 !== false || $strpos2 !== false) {
return $imageUrl;
} else {
return $domain . $url . '/' . $imageUrl;
}
}
/**
* 返回跳转链接地址
* @param $jump_url
* @return string
*/
function get_jump_url($jump_url):string
{
$domain = \think\facade\Request::instance()->domain();
$strpos1 = strpos($jump_url,'http');
$strpos2 = strpos($jump_url,$domain);
if ($strpos1 !== false || $strpos2 !== false) {
return $jump_url;
} else {
return $domain . $jump_url;
}
}
/**
* 赋予符号
* @param $value
* @param $symbol
*/
function give_symbol(&$value,$symbol = '+')
{
$value = $symbol . $value;
}
/**
* 手机号处理
* @param $phoneNumber
* @return string
*/
function format_phone_number($phoneNumber)
{
$prefix = substr($phoneNumber, 0, 3);
$suffix = substr($phoneNumber, -4);
return $prefix . '****' . $suffix;
}
/**
* 获取自定义随机头像
*/
function rand_avatar()
{
$avatarArr = config('custom.avatar') ?: [];
$rand = rand(0,count($avatarArr));
return $avatarArr[$rand] ?: '';
}
/**
* 返回金额
* @param $number
* @return string
*/
function format_money($number) {
$units = array("万元", "亿元");
$unitMaxValue = 10000; // 单位最大值
$unitIndex = 0; // 单位索引
if ($number >= $unitMaxValue && $number % $unitMaxValue === 0) {
while (abs($number) >= $unitMaxValue && $unitIndex < count($units) - 1) {
$number = $number / $unitMaxValue;
$unitIndex++;
}
$formattedNumber = number_format($number, 0) . $units[$unitIndex];
} elseif ($number % $unitMaxValue === 0) {
$formattedNumber = $number / $unitMaxValue . $units[0];
} else {
$formattedNumber = $number . '元';
}
return $formattedNumber;
}