123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <?php
- /**
- * HuoApiV2.php UTF-8
- * 火速API 2.0 加解密
- *
- * @date : 2018/1/15 21:04
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : wuyonghong <wyh@huosdk.com>
- * @version : HUOSDK 8.0
- */
- namespace huoCheck;
- class HuoApiV2 {
- private $key = '';
- /**
- * 构造函数
- *
- * @param string $key 秘钥
- */
- function __construct($key = '') {
- $this->key = $key;
- }
- /**
- * 设置秘钥
- *
- * @param string $key 秘钥
- */
- public function setKey($key) {
- $this->key = $key;
- }
- /**
- * 参数校验结果
- *
- * @param string $script_name 调用的API方法,
- * @param array $params 调用API时带的参数
- * @param string $method 请求方法 post / get
- *
- * @return bool 结果数组
- */
- public function check($script_name, $params, $method = 'post') {
- return self::verifySign($method, $script_name, $params, $this->key, get_val($params, 'sign'));
- }
- /**
- * 校验签名是否正确
- *
- * @param $method
- * @param $url_path
- * @param $params
- * @param $secret
- * @param $sign
- *
- * @return bool
- */
- static public function verifySign($method, $url_path, $params, $secret, $sign) {
- unset($params['sign']);
- unset($params['version']);
- unset($params['s']);
- // 再计算签名
- $_check_sign = self::makeSign($method, $url_path, $params, $secret);
- //Log::error('---------服务器签名------'.$_check_sign.'-----提交签名----'.$sign.'------');
- return strtoupper($_check_sign) == strtoupper($sign);
- }
- /**
- * 生成签名
- *
- * @param string $method 请求方法 "get" or "post"
- * @param string $url_path
- * @param array $params 表单参数
- * @param string $secret 密钥
- *
- * @return string
- */
- static public function makeSign($method, $url_path, $params, $secret) {
- $mk = self::makeSource($method, $url_path, $params);
- $my_sign = md5($mk.'&'.$secret);
- //Log::error('---------我是签名原串------'.$mk.'&'.$secret.'-----我是签名----'.$my_sign.'------');
- return $my_sign;
- }
- static private function makeSource($method, $url_path, $params) {
- $_params = $params;
- $_str = strtoupper($method).'&'.rawurlencode($url_path).'&';
- ksort($_params);
- reset($_params);
- $query_string = array();
- foreach ($_params as $key => $val) {
- if (is_array($val)) {
- ksort($val);
- reset($val);
- foreach ($val as $_k2 => $_v2) {
- array_push($query_string, $key.'-'.$_k2.'='.$_v2);
- }
- } else {
- array_push($query_string, $key.'='.$val);
- }
- }
- $query_string = join('&', $query_string);
- return $_str.str_replace('~', '%7E', rawurlencode($query_string));
- }
- }
|