需要注意以下重要规则:


◆ 请求参数参数名ASCII码从小到大排序,签名内容需要UTF-8编码;
◆ 请求Body参数为空时传{},并且data使用{}参与签名;
◆ 请求参数和签名内容需要UTF-8编码;
◆ 回调地址请原样进行签名;
◆ 参数名区分大小写;


签名计算方式:

1、sign生成规则: sha1(time+data+apikey)
2、为了防止请求被伪造、篡改,每一次接口请求都需传入根据本次请求的
3、13位时间戳(毫秒)+body参数(json格式)+apikey(密钥)
4、计算获得的sign(签名)

签名示例(php):

public function sign($post = [], $key ='',$userid = '')
{
    if ($post) {
        ksort($post); //排序post参数
        $post = json_encode($post , JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
    } else {
        $post = "{}";
    }
    $time = time() . rand(100, 999);
    $header[] = "Content-Type: application/json; charset=utf-8";
    //用户密钥
    $header[] = "Sign: " . sha1($time . $post . $key);
    $header[] = "Timestamp: " . $time;
    //用户ID
    $header[] = "UserId: " . $userid;
    return [$post, $header];
}

接口约定(每次请求需传入以下Header参数:):

Header 参数类型是否必填描述示例值
Signstring签名20d6ed7224f6ecedda74548aff9cb1a54e5c0033
Timestampstring13位时间戳(毫秒)1696645385740
UserIdstring您的用户接口appid(后台接口为管理员登录账号)2uIkTrXNdAFc7OKhbRenzjDtgPoZ6s5C

接口示例:

以订单查询接口为例,开发者的UserId是2uIkTrXNdAFc7OKhbRenzjDtgPoZ6s5C,apikey是 H0YnuPpcVtx7rQdMTbjN6932s5oDOqFa,请求的参数如下:

Header参数

Sign: 待下方计算
Timestamp: 1696645385740
UserId: 2uIkTrXNdAFc7OKhbRenzjDtgPoZ6s5C

Body参数

{
    "day": 10,
    "external_orderno": "",
    "ordersn": "D100759082558859640832"
}

第一步:将请求Body参数中多个键值对,参数按照参数名的字典升序排列(a-z)。

{"day":10,"external_orderno":"","ordersn":"D100759082558859640832"}

第二步:将 13位时间戳+第一步中排序后的字符串+apikey 拼接得到待签名字符串

1696645385740{"day":10,"external_orderno":"","ordersn":"D100759082558859640832"}H0YnuPpcVtx7rQdMTbjN6932s5oDOqFa

第三步:使用sha1算法加密待加密字符串即为sign

15b8f541eb10e3fbb33efd92c8d52d50ddca0784

第四步:将sign添加到Header参数中

Sign: 15b8f541eb10e3fbb33efd92c8d52d50ddca0784Timestamp: 1696645385740UserId: 2uIkTrXNdAFc7OKhbRenzjDtgPoZ6s5C

需要注意以下重要规则:

◆ 请求参数中有中文时,中文需要经过url编码,但计算签名时不需要;
◆ 请求Body参数为空时data使用{}参与签名;
◆ 参数名区分大小写;