示例代码


NodeJS版 C#版 PHP版

统一参数列表


名称 必要 说明
data 见表格
external_company 见下文
sign 见下文
timer 见下文

data 示例

数据类型: JSON

名称 类型 必要 说明
expressNo String 中邮运单号
注意:以下测试内容中出现 [单号] 的地方,请替换为需要操作的实际快递单号

一、生成的签名信息

项目
拼接字符串 (stringA) data{$$}{"expressNo": "[单号]"}{$$$}external_company{$$}c2e2e01c-6c95-4146-99d6-815811755603{$$$}2026-02-15 13:38:51{$$$$}5fd68fbe-16a4-4851-bc56-3b1890a40a90
MD5签名 (sign) 7139bf10414a580b45481f3a76321c31
时间戳 (timer) 2026-02-15 13:38:51

二、完整请求参数JSON

{
  "data": "{\"expressNo\": \"[单号]\"}",
  "external_company": "c2e2e01c-6c95-4146-99d6-815811755603",
  "sign": "7139bf10414a580b45481f3a76321c31",
  "timer": "2026-02-15 13:38:51"
}
        

三、接口测试方式

方式1:使用 cURL 命令

curl -X POST https://captureupload.30post.cn/capture/api/logisticalInfoByExpNo \
  -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
  -d "data=%7B%22expressNo%22%3A%20%22[单号]%22%7D" \
  -d "external_company=c2e2e01c-6c95-4146-99d6-815811755603" \
  -d "sign=7139bf10414a580b45481f3a76321c31" \
  -d "timer=2026-02-15%2013%3A38%3A51"
        

方式2:使用 Postman

   Method: POST
   URL: https://captureupload.30post.cn/capture/api/logisticalInfoByExpNo
   Headers:
         Content-Type: application/x-www-form-urlencoded; charset=UTF-8         
   Body (x-www-form-urlencoded):
         data: {"expressNo": "[单号]"}
         external_company: c2e2e01c-6c95-4146-99d6-815811755603
         sign: 7139bf10414a580b45481f3a76321c31
         timer: 2026-02-15 13:38:51
        

方式3:使用 Python 代码

import hashlib
import json
import requests
from datetime import datetime, timedelta

AK = "c2e2e01c-6c95-4146-99d6-815811755603"
SK = "5fd68fbe-16a4-4851-bc56-3b1890a40a90"

def generate_sign(data_dict, expire_time, sk):
    sorted_keys = sorted(data_dict.keys(), key=lambda x: x.lower())
    string_parts = []
    for key in sorted_keys:
        value = data_dict[key]
        string_parts.append(f"{key.lower()}{{$$}}{value}{{$$$}}")
    time_str = expire_time.strftime("%Y-%m-%d %H:%M:%S")
    string_parts.append(f"{time_str}")
    string_parts.append(f"{{$$$$}}{sk}")
    string_a = "".join(string_parts)
    return hashlib.md5(string_a.encode('utf-8')).hexdigest().lower()

# 构建请求
business_data = {"expressNo": "[单号]"}
data_params = {
    "data": json.dumps(business_data, ensure_ascii=False),
    "external_company": AK
}
expire_time = datetime.now() + timedelta(minutes=5)
sign = generate_sign(data_params, expire_time, SK)

request_data = {
    "data": data_params["data"],
    "external_company": AK,
    "sign": sign,
    "timer": expire_time.strftime("%Y-%m-%d %H:%M:%S")
}

# 发送请求
url = "https://captureupload.30post.cn/capture/api/logisticalInfoByExpNo"
response = requests.post(url, data=request_data, timeout=30)
print(response.json())
        

接口返回

数据类型: JSON

名称 类型 说明
success Number 是否成功(成功为1,失败为0)
message String 失败时为错误原因,成功时不返回
base Array 中邮基本物流信息(如果身份没有权限则不返回此节点,无数据时返回空数组)
customs Array 海关信息(如果身份没有权限则不返回此节点,无数据时返回空数组)
aireline Array 航空信息(如果身份没有权限则不返回此节点,无数据时返回空数组)
cnExpress Array 国内转运信息(如果身份没有权限则不返回此节点,无数据时返回空数组)

返回数据示例

数据类型: JSON

{
    "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"
            }
        ]
    }
}
            
根据国内转运单号查询 / 接口地址 http://captureupload.30post.cn/capture/api/logisticalInfoByCENo

data 示例

数据类型: JSON

名称 类型 必要 说明
cnExpressNo String 国内转运单号

接口返回

数据类型: JSON

同"根据物流单号查询接口

返回数据示例

数据类型: JSON

同"根据物流单号查询接口
其他信息 & 代码示例

分公司与业务类型:


分公司 : 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版代码示例


PHP版代码示例