| 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));    }}
 |