名称 | 必要 | 说明 |
---|---|---|
data | 是 | 见表格 |
external_company | 是 | 见下文 |
sign | 是 | 见下文 |
timer | 否 | 见下文 |
名称 | 类型 | 必要 | 说明 |
---|---|---|---|
express_no | String | 否 | 订单号,如果没有则自动生成 |
orders | Json | 否 | 见表格 |
member_is_need_safe | Int | 是 | 是否需要保险 |
business_id | Int | 是 | 见表格 |
agency | String | 是 | 代理店名称 |
sender | String | 是 | 发件人 |
send_city | String | 否 | 发件城市/区域,如果是退回货物业务类型,必填 |
sender_address | String | 是 | 发件地址 |
sender_post_code | String | 是 | 发件邮编 |
sender_email | String | 是 | 发件人邮箱 |
telphone | String | 是 | 发件人电话 |
sheng | String | 是 | 收件人省 |
shi | String | 是 | 收件人市 |
address | String | 是 | 收件人地址 |
mobile | String | 是 | 收件人手机 |
post_code | String | 是 | 收件人邮编 |
items | Int | 是 | 包裹件数 |
to_name | String | 是 | 收件人 |
boxs | Int | 是 | 盒子数 |
weight | Double | 是 | 运单重量 |
unitprice | Double | 是 | 运单单价 |
package | String | 是 | 运单包装数量 |
tariff | Double | 是 | 运单关税 |
safety | Double | 是 | 运单保险 |
sendMethod | int | 否 | 1.派送 2.自提(如果是同城洲际业务类型的话,必传) |
packageLengh | int | 否 | 体积 长度(不传默认为10) |
packageHeight | int | 否 | 体积 高度(不传默认为10) |
packageWidth | int | 否 | 体积 宽度(不传默认为10) |
名称 | 类型 | 必要 | 说明 |
---|---|---|---|
name | String | 是 | 商品名称 |
amount | Double | 是 | 商品数量 |
{
"express_no":1111,
"orders":[{
"name":"aa",
"amount":2,
"unit":"AUD",
"price":9
},
{
"name":"bb",
"amount":3,
"unit":"AUD",
"price":13.5
}],
"no":"A",
"member_is_need_safe":1,
"business_id":1,
"agency":"安安",
"sender":"琇琇",
"sender_address":"辽宁省 大连市",
"sender_post_code":"10001",
"sender_email":"aaa@163.com",
"telphone":"10086",
"sheng":"辽宁",
"shi":"大连",
"address":"中山区 大公街21号",
"mobile":"10010",
"post_code":"100000",
"items":3,
"to_name":"兔子",
"boxs":3,
"weight":100,
"unitprice":100,
"package":100,
"tariff":100,
"safety":100,
"batch_id":8,
"sendMethod":1,
"packageLengh":1,
"packageHeight":1,
"packageWidth":1
}
名称 | 类型 | 说明 |
---|---|---|
success | Int | 是否成功(成功为1,失败为0) |
message | String | 当失败时出现,为错误信息 |
express_no | String | 单号,成功时出现 |
名称 | 类型 | 必要 | 说明 |
---|---|---|---|
batch_name | String | 是 | 批次名称 |
名称 | 类型 | 说明 |
---|---|---|
success | Int | 是否成功(成功为1,失败为0) |
message | String | 当失败时出现,为错误信息 |
id | int | 批次id success = 1, id = 111 |
名称 | 类型 | 必要 | 说明 |
---|---|---|---|
batch_name | String | 是 | 批次名称 |
名称 | 类型 | 说明 |
---|---|---|
success | Int | 是否成功(成功为1,失败为0) |
message | String | 当失败时出现,为错误信息 |
名称 | 类型 | 必要 | 说明 |
---|---|---|---|
express_no | String | 是 | 中邮运单号 |
名称 | 类型 | 说明 |
---|---|---|
success | Int | 是否成功(成功为1,失败为0) |
message | String | 当失败时出现,为错误信息 |
weight | String | 重量,成功时出现 |
名称 | 类型 | 必要 | 说明 |
---|---|---|---|
express_no | String | 是 | 邮局单号 |
名称 | 类型 | 说明 |
---|---|---|
success | Int | 是否成功(成功为1,失败为0) |
message | String | 当失败时出现,为错误信息 |
Url | 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 |