| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- namespace app\controller\api\util;
- use think\facade\Cache;
- use think\facade\Log;
- class Signature
- {
- private static $signKey = 'tdba@86868#';
- private static $thirdsignKey = 'tdyl@86868';
- /**
- * 二维数组根据某个字段排序
- * @param array $array 要排序的数组
- * @param string $keys 要排序的键字段
- * @param string $sort 排序类型 SORT_ASC SORT_DESC
- * @return array 排序后的数组
- */
- static function arrSort($array, $keys, $sort = SORT_DESC)
- {
- $keysValue = [];
- foreach ($array as $k => $v) {
- $keysValue[$k] = $v[$keys];
- }
- array_multisort($keysValue, $sort, $array);
- return $array;
- }
- /** 校验sign
- * @param $data
- * @return false
- */
- static function checkSign($data)
- {
- if (empty($data['sign'])) {
- return false;
- }
- $originalSign = $data['sign'];
- unset($data['sign']);
- ksort($data);
- $params = '';
- foreach ($data as $key => $value) {
- $params .= '&' . $key . '=' . $value;
- }
- $params = ltrim($params, '&');
- $sign = md5($params . '&signKey=' . self::$signKey);
- Log::channel("gong")->info("参数sign:" . $originalSign . ',校验生成sign' . $sign);
- if ($originalSign != $sign) {
- return false;
- }
- return true;
- }
- /** 校验sign
- * @param $data
- * @return false
- */
- static function thirdCheckSign($data,$header)
- {
- if (empty($header['sign'])) {
- return false;
- }
- $originalSign = $header['sign'];
- $timestamp = $header['timestamp'];
- if (abs($timestamp - time()) > 10) return false;
- ksort($data);
- $params = '';
- foreach ($data as $key => $value) {
- $params .= '&' . $key . '=' . $value;
- }
- $params = ltrim($params, '&');
- $sign = strtoupper(md5($params . '&signKey=' . self::$thirdsignKey . '×tamp=' . $timestamp));
- Log::channel("gong")->info("参数sign:" . $originalSign . ',校验生成sign' . $sign);
- if ($originalSign != $sign) {
- return false;
- }
- $redis = Cache::store('redis')->handler();
- if($redis->get('thirdCheckSign:'.$originalSign)){
- return false;
- }
- $redis->set('thirdCheckSign:'.$originalSign,3600);
- return true;
- }
- }
|