1.交互方式
a)采用HTTP方式交互数据,目前只支持POST方式
b)系统级参数param的值需经过urlcode后提交
c)所有时间格式为: yyyy-MM-dd HH:mm:ss
d)报文采用JSON格式
2.系统级参数
appkey —— 应用标识
timestamp —— 时间戳(格式为2015-01-01 00:00:00)
v —— API协议版本(1.0)
method —— API方法名称
param —— 业务参数内容(json格式)
sign —— 参数的md5加密字符串,详情参考如下:系统签名
3.系统签名
首先双方约定一个加密字符串 appsecret,
所有传递的API参数用appsecret进行签名,签名信息保存在参数sign中提交。接受请求方应按规则验证请求是否合法,方法如下:
根据参数名称(除sign本身以外)将所有请求参数按照参数字母先后顺序排序:key+value...key+value
例如:将appkey=1,method=2,param=3,v=4,timestamp=5 参数名和参数值链接后,得到拼装字符串appkey1method2param3timestamp5v4
将appsecret拼接到参数字符串头、尾,如appsecret=zzz,拼接后的字符串为
zzzappkey1method2param3timestamp5v4zzz
对整个字符串做md5加密(32位小写),即为sign的内容,如上面字符串得到的sign为:fd7c0e699ad5dab8ca83358086737cdc
如果sign的内容相符则认为是合法的调用,否则作为非法调用处理,返回错误信息。
除了验证sign以外,还需验证timestamp,如果timestamp的时间与当前时间相差5分钟以上,则认为提交的数据已过期,返回错误信息。
4.请求示例
查询单个订单
http://47.104.99.203:8081/OMS_Interface/api?
appkey=fxtest&v=1.0×tamp=2015-01-01 12:00:00
&method=StockOut.Notify.Query
¶m={"Owner": "","Code": "160427101336895"}
&sign=fd7c0e699ad5dab8ca83358086737cdc
在foxtalbe中对式例进行测试,代码如下
Dim hc As New HttpClient("http://47.104.99.203:8081/OMS_Interface/api")
hc.FormData.Add("appkey","fxtest")
hc.FormData.Add("timestamp","2019-04-19 12:27:00")
hc.FormData.Add("v","1.0")
hc.FormData.Add("method","StockOut.Notify.Query")
hc.FormData.Add("param","{""Owner"": """",""Code"": ""160427101336895""}")
hc.FormData.Add("sign", "fd7c0e699ad5dab8ca83358086737cdc")
Dim ret As String = hc.getData()
msgbox(ret)
结果报错,经咨询对方的签名是md5加密计算的,在net中直接调用md5工具类计算,那我在foxtable中该如何处理签名呢。