接口开发签名规范

需要注意以下重要规则:

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

签名计算方式:

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

签名示例(php):

  1. public function sign($post = [], $key ='',$userid = '')
  2. {
  3. if ($post) {
  4. ksort($post); //排序post参数
  5. $post = json_encode($post , JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
  6. } else {
  7. $post = "{}";
  8. }
  9. $time = time() . rand(100, 999);
  10. $header[] = "Content-Type: application/json; charset=utf-8";
  11. //用户密钥
  12. $header[] = "Sign: " . sha1($time . $post . $key);
  13. $header[] = "Timestamp: " . $time;
  14. //用户ID
  15. $header[] = "UserId: " . $userid;
  16. return [$post, $header];
  17. }

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

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

接口示例:

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

Header参数

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

Body参数

  1. {
  2. "day": 10,
  3. "external_orderno": "",
  4. "ordersn": "D100759082558859640832"
  5. }

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

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

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

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

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

15b8f541eb10e3fbb33efd92c8d52d50ddca0784

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

  1. Sign: 15b8f541eb10e3fbb33efd92c8d52d50ddca0784
  2. Timestamp: 1696645385740
  3. UserId: 2uIkTrXNdAFc7OKhbRenzjDtgPoZ6s5C

 

全局状态码
状态码 描述
200 成功
400 失败(msg返回错误信息)
500 未知错误
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容