以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  接口调用问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=133752)

--  作者:jackchan120925
--  发布时间:2019/4/19 16:00:00
--  接口调用问题

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&timestamp=2015-01-01 12:00:00

&method=StockOut.Notify.Query

&param={"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中该如何处理签名呢。




--  作者:有点甜
--  发布时间:2019/4/19 16:09:00
--  

比如

 

Dim str = "qqqq"
Dim s = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5")
msgbox(s)