当前位置: 文档中心

Sign算法说明


 举例:假设请求参数键值对如下

appkey : test2-xx
page_no : 0
end_time : 2016-08-01 13:00:00
start_time : 2016-08-01 12:00:00
page_size : 40
sid : test2
timestamp : 1470042310
  • 第一步   对数所有请求参数按照键名进行正序排序,排序结果如下,注意要保持键值对的对应关系且appsecret不参与运算。

appkey : test2-xx
end_time : 2016-08-01 13:00:00
page_no : 0
page_size : 40
sid : test2
start_time : 2016-08-01 12:00:00
timestamp : 1470042310

  • 第二步   循环对每个键值进行处理:

1.处理 appkey

  1.1 appkey 采用utf8编码格式的字符长度并保留两位,不够的位数补0,计算结果为:06

  1.2 将1.1计算的长度 06 和 appkey 用 - 作为分隔符进行拼接,拼接结果为 06-appkey

  1.3 test2-xx 采用utf8编码格式的字符长度不足四位,保留四位,不够的位数补0,计算结果为:0008,如果超过4位,保留实际结果,如:10000

  1.4 将1.3计算的长度 0008 和 test2-xx 用 - 作为分隔符进行拼接,拼接结果为 0008-test2-xx

  1.5 将1.2 和 1.4 的拼接结果用 : 进行拼接 ,拼接结果为 06-appkey:0008-test2-xx

  1.6 将1.5的结果最后拼接上分号 ; 拼接结果为 06-appkey:0008-test2-xx;

2.处理 end_time 同1处理

3.处理 page_no 同1处理

4.处理 page_size 同1处理

5.处理 sid 同1处理

6.处理 start_time 同1处理

7.处理 timestamp 注意前五步和1处理方法相同,因为 timestamp 是最后一个请求参数,所以不需要 1.6步骤

最后的处理结果为:

06-appkey:0008-test2-xx;08-end_time:0019-2016-08-01 13:00:00;07-page_no:0001-0;09-page_size:0002-40;03-sid:0005-test2;10-start_time:0019-2016-08-01 12:00:00;09-timestamp:0010-1470042310

注意:示例中的参数为查询类接口请求参数,创建类接口中的参数包含json串,比如:创建原始订单:trade_list = [] 这里是订单的json数据,json串当作正常的字符串进行处理

  • 第三步    计算sign

1.获取appsecret 假如当前实例中的 appsecret 为 12345

2.将appsecret拼接在第二步的结果后面,注意没有任何拼接符,结果如下:06-appkey:0008-test2-xx;08-end_time:0019-2016-08-01 13:00:00;07-page_no:0001-0;09-page_size:0002-40;03-sid:0005-test2;10-start_time:0019-2016-08-01 12:00:00;09-timestamp:0010-147004231012345

3.将上述字符串进行md5加密后即可得到sign,要求MD5方法返回的是32位小写的MD5值,计算结果如下:
ad4e6fe037ea6e3ba4768317be9d1309

4.将计算的sign作为一个请求参数放到参数列表中
    sid : test2
    appkey : test2-xx
    timestamp : 1470042310
    start_time : 2016-08-01 12:00:00
    end_time : 2016-08-01 13:00:00
    page_no : 0
    page_size : 40
    sign : ad4e6fe037ea6e3ba4768317be9d1309