分公司与业务类型:
分公司 : no
ID
|
分公司
|
内单号
|
4 |
悉尼公司 |
A |
10 |
墨尔本明扬 |
Y |
9 |
堪培拉 |
K |
7 |
阿德莱德 |
S |
业务类型 : business_id
ID |
业务名称 |
4 |
30.3特惠 |
3 |
邮政ECI |
2 |
澳洲韵达 |
1 |
中邮小包 |
签名算法:
签名说明
timer: 指定格式的时间,签名过期时间
sign:数据签名
external_company:access key
sk:secret key
签名代码 (C#)
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)
测试 AK&SK
Access Key |
Secret Key |
c2e2e01c-6c95-4146-99d6-815811755603 |
5fd68fbe-16a4-4851-bc56-3b1890a40a90 |
NodeJS版代码示例
1.使用前请先 npm install
2.已在NodeJS 6.2.0 Stable上测试通过
点我下载NodeJS版
PHP版代码示例
1.已在PHP 7.0.4上测试通过
2.示例脚本超时时间为5分钟
点我下载PHP版