签名
1. 签名说明
1.1. 更新历史
1.0.0
2024-04-10
-
基本信息以及签名方式
1.2. 基本信息
1.1.1. API基本信息
API Key、secretKey
接口需要商户的API Key,请联系商务进行申请,申请成功后,会同时创建用户的secretKey,用于接口签名。本平台不保留secretKey, 需要商户自己妥善保存。
本文档,所有接口的请求、响应的数据格式全部采用JSON格式;
本文档,所有接口的测试环境格式 https://baseUrl/webhook/global/bizType
其中bizType为资源信息,请参考权限说明。
baseUrl 为请求的域名或IP,请联系运营人员提供
所有时间,包括请求、响应,均为时间戳(UNIX时间),单位为毫秒。
测试环境地址:https://pre-api-test.cmfbl.com/webhook
正式环境地址:https://api.multimarkets.org/webhook
1.1.2. HTTP响应状态码
HTTP 4XX 错误码用于指示错误的请求内容、行为、格式。问题在于请求者。
HTTP 403 错误码表示违反WAF限制(Web应用程序防火墙)。
HTTP 429 错误码表示警告访问频次超限,即将被封IP。
HTTP 418 表示收到429后继续访问,IP被封。
HTTP 5XX 错误码用于指示本平台服务侧的问题。
1.1.3. 访问限制
目前单个API-KEY 1分钟访问次数不超过100次,否则将返回429
如果返回429后继续访问,即返回418
首次返回418时,会被禁用5分钟,再次访问会被禁用10分钟,以此类推。
1.2. 请求方式与鉴权
1.2.1 请求头
请求相关通用参数需要放在http请求头,请求头参数如下:
请求头说明参数说明:
apiKey
通过平台申请的api_key
字符串
必填
recvWindow
时间空窗,含义见下文《请求时间安全限制》
整数
非必填
timestamp
请求发送的时间(时间戳格式,毫秒)
整数
必填
signature
签名,签名计算方法见下文《签名》。
字符串
必填
companyId
公司ID
整数
必填
trace
全局链路唯一标志
字符串
必填
version
资源版本号
字符串
非必填
group
资源分组
字符串
非必填
lang
语言信息,默认zh-CN
字符串
非必填
注意: API-keys 与 secretKey 是大小写敏感的; 签名,是大小写敏感的
1.2.2 签名
签名使用SHA1WithRSA算法. secretKey作为 SHA1WithRSA 的密钥,param中对应的参数 + timestamp 作为SHA1WithRSA的操作对象,得到的输出即为签名。 具体计算方法,见本章节的《示例》。
1.2.3 请求时间安全限制
服务器收到请求时,会判断请求参数timestamp,与服务器当前时间比较,如果是5000毫秒(这个时间,称为时间空窗,默认值5000)之前发出的,则拒绝请求。
这个时间空窗值,可以通过发送可选参数 recvWindow来自定义。
逻辑伪代码如下:
1.2.4. 签名示例
Api Key、secretKey
实际业务请求参数如下
计算签名:
第一步,获取body里的请求参数,参数按字母排序之后,组成下面的字符串:
说明:
“参数按字母排序”的排序方式为,按照字母从小到大排序,从第一个字母开始比较,一样则比较第二个字母,再一样则比较第三个字母,依此类推。
双引号全部去除,无论是字段名,还是字段值的双引号;
中间不能有空格;
如果字段为null,不参与签名
第二步,获取请求头的timestamp的参数,拼接在第一步的结果后面:
第三步,使用secretKey 通过SHA1WithRSA 对第二步结果进行签名,结果如下 :
附: java 版本 demo.
1.2.5 响应格式
采用JSON格式。
所有响应,统一格式:
说明:
code:依据code判断是否响应成功,code为“0”表示成功;其它均为错误码,见《响应错误码》。
message: 为code对应的描述信息,比如“请求成功”。
data 响应的业务数据部分。具体见各个接口。
1.3. 通用错误码
00012001
验证签名失败
00012002
请求已超出时间空窗
00012003
请求的API_KEY不存在
00012004
当前没有对该API的请求权限
00012005
请求过于频繁
00012006
API已过期
00012007
非法IP地址
说明:具体业务接口错误码参见具体接口说明文档
Last updated