ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
``` <?php namespace App\Tool; use Exception; class Functions { /** * 简易签名,防止数据被窜改:验签使用解析参数获取同样的data+约定的token 按同样的方法签名,然后与传参的sign参数比对。如果不一样则被串改 * * @param array $data 原始传参 * @param string $token 双方约定的加密秘钥 * @return void */ public static function sign($data, $token){ if(isset($data['sign'])){ unset($data['sign']); } ksort($data, SORT_REGULAR); return substr(md5(http_build_query($data)), 6); } /** * 校验签名 * * @param array $params 原始传参 * @param string $token 双方约定的加密秘钥 * @return void */ public static function checkSign($params){ if(isset($params['sign']) && $params['sign'] == self::sign($params)){ return $params; } return false; } /** * 接口成功返回 * * @param string $error_msg * @param array $data * @return void */ public static function success($error_msg='成功', $data=[]){ return [ 'code'=> \App\Tool\ErrorCode::SUCCESS, 'msg'=> $error_msg, 'data'=> $data ]; } /** * 接口失败返回 * * @param string $error_msg * @param integer $error_code * @param array $data * @return void */ public static function fail($error_msg='失败', $error_code, $data=[]){ # ...code 可以做失败日志处理 // $route = Route::current(); $route = \Route::currentRouteAction(); $log_msg = $route.'=> '.$error_msg; \App\Tool\Log::write($log_msg, ['process', 'fail']); return [ 'code'=> $error_code, 'msg'=> $error_msg, 'data'=> $data ]; } /** * 将 时长秒 转换成 时长 {d天H小时m分钟s秒} 格式 * * @param integer $timelong * @return void */ public static function timelong2datelong($timelong=0){ $day = floor($timelong/86400); $left = $timelong%86400; $showDay = $day==0 ? "" : $day."天"; $hour = floor($left/3600); $left = $left%3600; $showHour = $hour==0 ? "" : $hour."时"; $minute = floor($left/60); $left = $left%60; $showMinute = $minute==0 ? "" : $minute."分"; $show = $showDay . $showHour . $showMinute . $left."秒"; return $show; } /** * @desc 下划线字符串转成小驼峰 to_from => toFrom * @param $str * @return string */ public static function underlineToUcFirst($str):string { if(!is_string($str)){ return ''; } $result = ''; $temp = explode('_',$str); $first = array_key_first($temp); foreach($temp as $k=>$v){ if($k == $first){ $result .= strtolower($v); }else{ $result .= ucfirst($v); } } return $result ?? ''; } /** * 将url中的querystring解析成kv数组 * * @param string $url * @return void */ public static function getQueryParams($url){ $queryParams = []; $parse = parse_url($url); if($parse['query']){ $kvs = explode("&", $parse['query']); if(!empty($kvs)){ foreach($kvs as $index => $kv){ list($k, $v) = explode("=", $kv); $queryParams[$k] = $v; } } } return $queryParams; } /** * 检查指定字段是否设置或值为null,为空,是否设置默认值,特殊校验 * * @param array $params 待校验参数 * @param array $mustSetFields 必要参数集合 * @param array $notEmptyOrNullFields 非空非null参数集合,必须是mustSetFields的子集,因为先存在才有值的概念,否则回报index $field 未找到错误 * @param array $defaultParams 为空为null或未设置的 默认参数设置 * @param callable $callback 复杂校验逻辑 * @return void */ public static function checkParams($params=[], $mustSetFields=[], $notEmptyOrNullFields=[], $defaultParams=[], $callback=null){ if(!is_array($params) || empty($params)){ throw new Exception("校验参数必须为数组,且不能为空", ErrorCode::PARAMS_ERROR); } if(!is_array($mustSetFields)){ throw new Exception("校验参照必须为数组", ErrorCode::PARAMS_ERROR); } if(!is_array($notEmptyOrNullFields)){ throw new Exception("非空非NULL参照必须为数组", ErrorCode::PARAMS_ERROR); } if(!is_array($defaultParams)){ throw new Exception("参数默认值配置必须为数组", ErrorCode::PARAMS_ERROR); } # 特殊逻辑处理逻辑 if(!is_null($callback)){ $callback($params); } # 必要参数逻辑 if(!empty($mustSetFields)){ foreach($mustSetFields as $field){ if(!isset($params[$field])){ throw new Exception("{$field} 必须", ErrorCode::PARAMS_ERROR); } } } # 非空非NULL参数逻辑 if(!empty($notEmptyOrNullFields)){ foreach ($notEmptyOrNullFields as $field) { if(is_null($params[$field]) || empty($params[$field])){ # 默认值逻辑 if(isset($defaultParams[$field])){ $params[$field] = $defaultParams[$field]; }else{ throw new Exception("{$field} 不能为空和Null", ErrorCode::PARAMS_ERROR); } } } } # 参数默认值逻辑 foreach ($defaultParams as $field => $value) { if(!isset($params[$field]) || empty($params[$field]) || is_null($params[$field])){ $params[$field] = $value; } } return $params; } } ```