php接口签名服务
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,
千家信息网最后更新 2025年02月02日php接口签名服务
1, 'data' => [], 'message' => '']; } catch (\Exception $e) { return ['status' => 0, 'data' => [], 'message' => $e->getMessage()]; } } /** * 产生随机字符串,不长于32位 * @param int $length * @return string */ public static function createNonceStr(int $length = 32): string { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } /** * 产生请求参数的排序后的字符串 * @param array $requestParamArr * @return string */ public static function createSortQueryString(array $requestParamArr): string { if (isset($requestParamArr['key'])) unset($requestParamArr['key']); if (isset($requestParamArr['signature'])) unset($requestParamArr['signature']); ksort($requestParamArr); return http_build_query($requestParamArr); } /** * 创建签名串 * @param string $sortQueryString 排序字符串 * @param string $signType 签名类型:MD5;HMAC-SHA256; * @param string $key * @return string * @throws \Exception */ public static function createSignatureString(string $sortQueryString, string $signType, string $key): string { $returnStr = ''; if ($signType == 'MD5') { $sortQueryString .= '&key=' . $key; $returnStr = md5($sortQueryString); } elseif ($signType == 'HMAC-SHA256') { $returnStr = hash_hmac('sha256', $sortQueryString, $key); } else { throw new \Exception('签名类型不支持'); } return $returnStr; } /** * 验证外部请求 * @param array $originRequestParamArr * @return array */ public static function validateRequest(array $originRequestParamArr): array { try { $validate = self::validateQueryParam($originRequestParamArr, false); if (!$validate['status']) throw new \Exception($validate['message']); $now = time(); if (($now - $originRequestParamArr['timestamp']) > 15) throw new \Exception('请求时间异常'); $signType = $originRequestParamArr['sign_type']; $originKey = $originRequestParamArr['key']; $originSignature = $originRequestParamArr['signature']; unset($originRequestParamArr['key'], $originRequestParamArr['signature']); $newSignature = self::createSignatureString(self::createSortQueryString($originRequestParamArr), $signType, $originKey); if ($originSignature != $newSignature) throw new \Exception('签名错误'); return ['status' => 1, 'data' => [], 'message' => '']; } catch (\Exception $e) { return ['status' => 0, 'data' => [], 'message' => $e->getMessage()]; } }}
使用
//生成签名$request = [ 'a' => 1, 'b' => 2, 'c' => 3, 'sign_type' => 'HMAC-SHA256', 'timestamp' => time() + 600, 'nonce_str' => SignatureService::createNonceStr(), ]; SignatureService::init($request); $result = SignatureService::validateQueryParam(); if (!$result['status']) exit($result['message']); $key = 'helloworld'; $signature = SignatureService::createSignatureString(SignatureService::createSortQueryString($request), $request['sign_type'], $key); $request['key'] = $key; $request['signature'] = $signature; echo ""; print_r($request); //校验签名 $validate = SignatureService::validateRequest($request, false);
必要参数:
- 'sign_type' => 'HMAC-SHA256', //签名类型,当前支持SHA256、MD5
- 'timestamp' => '1539255134', //时间戳
- 'nonce_str' => 'n5ryqp0f9ur3u3u8lxfblxw9h03emyka',//随机数
- 'key' => 'helloworld', //密钥
- 'signature' => 'f0ca487612f15059c47aba5e8503c6400981fbed20d1af958003e3f798d1bbd2',//签名
时间
必要
参数
字符
字符串
密钥
类型
错误
随机数
支持
生成
接口
服务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器缓存设置
数据库技术专业就业
河北互通网络技术有限公司图片
图书馆自建数据库
笔记本网页显示服务器没有响应
奇葩软件开发需求
广州花朵网络技术
雷军数据库被删
山东单招网络技术考试题目
500字网络安全作文
计算机网络技术的考试答案
软件开发及服务业
火绒安全软件 更新服务器
云服务器安全组要配备哪些
乡村创客科技互联网
e5服务器主板怎么看型号
数字安全和网络安全区别
数据库NLR
国际阿里云服务器登录
软件开发平台排行
软件开发公司简介模板范文
网络技术发展实现了快速发展
网络安全小故事用英语
网络安全和归根结底
数据库用户登录窗体表达式
软件开发工作验收单
南阳软件开发平均价格
ca服务器签发证书
西山居联想服务器
跟网络安全相关的英文词汇