名称 | 必要 | 说明 |
---|---|---|
data | 是 | 见表格 |
external_company | 是 | 见下文 |
sign | 是 | 见下文 |
timer | 否 | 见下文 |
名称 | 类型 | 必要 | 说明 |
---|---|---|---|
express_no | String | 是 | 中邮运单号 |
名称 | 类型 | 说明 |
---|---|---|
success | Int | 是否成功(成功为1,失败为0) |
message | String | 当失败时出现,为错误信息 |
weight | 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 |