名称 | 必要 | 说明 |
---|---|---|
data | 是 | 见表格 |
external_company | 是 | 见下文 |
sign | 是 | 见下文 |
timer | 否 | 见下文 |
名称 | 类型 | 必要 | 说明 |
---|---|---|---|
expressNo | String | 是 | 中邮运单号 |
名称 | 类型 | 说明 |
---|---|---|
success | Number | 是否成功(成功为1,失败为0) |
message | String | 失败时为错误原因,成功时不返回 |
base | Array | 中邮基本物流信息(如果身份没有权限则不返回此节点,无数据时返回空数组) |
customs | Array | 海关信息(如果身份没有权限则不返回此节点,无数据时返回空数组) |
aireline | Array | 航空信息(如果身份没有权限则不返回此节点,无数据时返回空数组) |
cnExpress | Array | 国内转运信息(如果身份没有权限则不返回此节点,无数据时返回空数组) |
{
"success": "1",
"base": {
"success": "1",
"value": [
{
"expressionNo": "xxx",
"event": "xxxx",
"address": "",
"dateTime": "2016-04-07 14:34:00"
},
{
"expressionNo": " xxx ",
"event": " xxx ",
"address": "www",
"dateTime": "2016-04-07 12:36:10"
}
]
},
"customs": {
"success": "1",
"value": [
{
"expressionNo": "xxx",
"event": "xxxx",
"address": "",
"dateTime": "2016-04-07 14:34:00"
},
{
"expressionNo": " xxx ",
"event": " xxx ",
"address": "www",
"dateTime": "2016-04-07 12:36:10"
}
]
},
"aireline": {
"success": "1",
"value": [
{
"expressionNo": "xxx",
"event": "xxxx",
"address": "",
"dateTime": "2016-04-07 14:34:00",
"pcs": "2",
"wgt": "1000",
"flight": "xxx",
"flightNo": "xxx-xxxx"
}
]
},
"cnExpress": {
"success": "1",
"value": [
{
"expressionNo": "xxx",
"event": "xxxx",
"address": "",
"dateTime": "2016-04-07 14:34:00"
}
]
}
}
名称 | 类型 | 必要 | 说明 |
---|---|---|---|
cnExpressNo | String | 是 | 国内转运单号 |
ID | 分公司 | 内单号 |
---|---|---|
4 | 悉尼公司 | A |
10 | 墨尔本明扬 | Y |
9 | 堪培拉 | K |
7 | 阿德莱德 | S |
ID | 业务名称 |
---|---|
4 | 30.3特惠 |
3 | 邮政ECI |
2 | 澳洲韵达 |
1 | 中邮小包 |
timer: 指定格式的时间,签名过期时间
sign:数据签名
external_company:access key
sk:secret key
public static string MD5(string context)
{
byte[] ret = Encoding.Default.GetBytes(context);
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(ret);
return BitConverter.ToString(output).Replace("-", "");
}
public static string Generate(IDictionary<string, object> data, DateTime? expire, string sk)
{
SortedDictionary<string, object> sort = new SortedDictionary<string, object>(data);
StringBuilder ret = new StringBuilder();
foreach (KeyValuePair<string, object> item in sort)
{
ret.Append(item.Key.ToString().ToLower());
ret.Append("{$$}");
ret.Append(item.Value.ToString());
ret.Append("{$$$}");
}
if (expire.HasValue)
{
ret.Append(string.Format("{0:yyyy-MM-dd HH:mm:ss}", expire));
}
ret.Append("{$$$$}");
ret.Append(sk);
string sign = MD5(ret.ToString()).ToLower();
return sign;
}
var data = new Dictionary() {
{ "data", "{batch_name:'AAAAAA'}" },
{ "external_company", "系统分配AK" },
};
var timer = DateTime.Now.AddMinutes(5);
data.Add("sign", Generate(data, timer, "系统分配SK"));
data.Add("timer", timer);
var ret = RequestHelper.Post("http://captureupload.30post.cn/api/bill/closebatch", data, Encoding.UTF8);
签名具体生成步骤
第一步:对参数按照key value的格式,并按照参数名ASCII字典序排序拼接,生成的字符串如下如下:
stringA="data{$$}当前接口请求的json数据{$$$}external_company{$$}分配的ak{$$$}yyyy-MM-dd HH:mm:ss{$$$$}分配的sk";
第二步:MD5计算前面的字符串得出签名:
sign=MD5(stringA)
Access Key | Secret Key |
---|---|
c2e2e01c-6c95-4146-99d6-815811755603 | 5fd68fbe-16a4-4851-bc56-3b1890a40a90 |