公共签名

系统级 Header

  • 【必选】X-Sy-Key:AppKey

  • 【必选】X-Sy-Signature:签名字符串

  • 【必选】X-Sy-Timestamp:API调用者传递时间戳,值为当前时间的秒数,也就是从1970年1月1日起至今的时间转换为秒,时间戳有效时间为15分钟。

  • 【必选】X-Sy-Nonce:API调用者生成的 UUID,结合时间戳防重放。

请求签名

对于每一次HTTP或者HTTPS协议请求,我们会根据访问中的签名信息验证访问请求者身份。具体由使用appKey和appSecret对称加密验证实现。其中appKey是访问者身份,appSecret是加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密谨防泄露。

1. 指定请求参数

在代码中指定请求参数,参数中需要包含系统级Header和接口必备的参数信息。

说明: 请求参数中不允许出现以signature为key的参数。

示例代码如下:

String appKey = "testKsy";
String appSecret = "testSecret";
String timestamp = String.valueOf(System.currentTimeMillis()/1000);
String signNonce = java.util.UUID.randomUUID().toString().replaceAll("-", "");
java.util.Map<String, String> paras = new java.util.HashMap<String, String>();

指定参数:

去除签名关键字Key:

2. 根据参数Key排序(升序)

参考代码如下:

3. 构造待签名的请求串

在一般的URLEncode后再增加三种字符替换:加号(+)替换成 %20、星号(*)替换成 %2A%7E 替换回波浪号(~)参考代码如下:

构造待签名的请求串:

  1. 把排序后的参数顺序拼接成如下格式:

    参考代码如下:

4. 签名

签名采用HmacSHA1算法 + Base64,编码采用UTF-8。参考代码如下:

参数说明:

  1. appSecret:你的appKey对应的秘钥appSecret

  2. stringToSign:即第三步生成的待签名请求串

5. 增加签名结果到请求参数中,发送请求

说明: 签名也要做特殊URL编码。

Last updated