签名机制

概述

服务端会对每个访问的请求进行身份验证,所以无论使用 HTTP 还是 HTTPS 协议提交请求,都需要在请求中包含签名(sign)信息。

公共参数

参数名 类型 必选 说明
AccessKey string 开通API后会颁发通行证和密钥
timeStamp string unix时间戳
version string 版本号:20191023
sign string 签名

签名机制

步骤 说明
1 将所有请求的参数(除了Sign)进行字典排序
2 将排好序的参数按字典排序按&key=value的形式拼接成字符串,其中value需要进行urlencode
3 将步骤2中的字符串,前面拼接请求方法,后面拼接 &密钥串
4 将步骤3中得到的字符串进行MD5,即可得到sign

签名示例代码

/****

  • 本示例代码是create_course接口的sign计算。
  • 其他接口所签参数依据该接口专有参数确定。
    */
$secret_key = "user_secret_key";
$params = [
    "AccessKey" => "user_access_key",
    "timeStamp"=> 1572329376,
    "version" => "20191023",
    ...//请求参数
];

// 字典排序
ksort($params);

// 将键值组合
foreach($params as $key => $val){
     $str .= "&" . $key . "=" . urlencode($val);
}

// 拼接,在首尾各加上$secret_key,计算MD5值
//method 请求方法
$sign = MD5($method . $str . "&" . $secretkey);

// 结果形如
//$sign=md5("POST&AccessKey=user_access_key&.....&version=20191023&user_secret_key");

// 计算结果
// $sign = '4de932c67d65f26c6537ffb3a75401c3';

生成请求URL的方法如下:

    function create_url($params,$method){
        $secretkey = '123456798';
        $url = "http://openapi.360drm.com/Classes/getClassInfo?";
        ksort($params);
        $str = "";
        foreach($params as $key => $val){
            $str .= "&" . $key . "=" . urlencode($val);
        }
        $sign = MD5($method . $str . "&" . $secretkey);
        $url .= $str . "&sign=" . $sign;
        return $url;
    }
文档更新时间: 2019-11-08 10:42   作者:admin