Skip to content

查询多个包裹状态

接口概述

一次调用返回一批包裹的当前状态和轨迹历史。每个运单号独立解析:查到的放在 Data.Success,查不到的放在 Data.Errors

请求信息

  • Method: POST
  • Path: /api/status/lookup
  • Authentication: Bearer Token

请求头

字段说明
Content-Typeapplication/json
AuthorizationBearer <token>

请求参数

请求体为 JSON 格式,包含以下字段:

参数类型必填说明
TrackingNumberarray待查询的 WMG 运单号数组。即使只查一个也必须是 JSON 数组。

请求体示例

json
{
    "TrackingNumber": [
        "C240129142515839830635",
        "C240126144626997791271"
    ]
}

认证方式

本接口使用 Bearer Token 认证。

请先通过 获取 Token 取得 Token,并以 Authorization: Bearer <Token> 形式发送。

响应信息

响应为 JSON 格式。

响应格式

字段类型说明
Codeinteger0 表示成功;非 0 表示失败
Messagestring可读的结果说明
Dataobject按运单号逐条给出的结果

成功响应

  • Status Code: 200
json
{
  "Code": 0,
  "Message": "Success",
  "Data": {
    "Success": [
      {
        "TrackingNumber": "C240129142515839830635",
        "LastStatus": "DR_DR",
        "LastStatusDateTime": "2024-01-29T14:27:10+08:00",
        "Activities": [
          {
            "StatusDateTime": "2024-01-29T14:27:10+08:00",
            "StatusCode": "DR_DR",
            "StatusDesc": "Data Received via API",
            "Remarks": "",
            "ReceiveBy": ""
          }
        ]
      }
    ],
    "Errors": [
      {
        "TrackingNumber": "C240126144626997791271",
        "Remarks": "No Record(s)"
      }
    ]
  }
}
字段类型说明
Data.Successarray成功解析的包裹。全部未匹配时为空数组。
Data.Success[].TrackingNumberstringWMG 运单号。
Data.Success[].LastStatusstring最新一条轨迹的状态码。包裹尚无可对外发布的状态时为空。
Data.Success[].LastStatusDateTimestring最新一条轨迹的时间,ISO 8601 格式并带时区偏移(+08:00)。
Data.Success[].Activitiesarray轨迹历史,按时间倒序(最新在前)。
Data.Success[].Activities[].StatusDateTimestring该条轨迹的时间,ISO 8601 格式并带时区偏移(+08:00)。
Data.Success[].Activities[].StatusCodestring状态码——见 Delivery Status
Data.Success[].Activities[].StatusDescstring状态码对应的描述文本。
Data.Success[].Activities[].Remarksstring该条轨迹的补充备注;没有时为空字符串。
Data.Success[].Activities[].ReceiveBystring预留字段,始终返回空字符串。
Data.Errorsarray未能解析的运单号。全部匹配成功时为空数组。
Data.Errors[].TrackingNumberstring提交的运单号。
Data.Errors[].Remarksstring查询失败的原因。

错误响应

  • Status Code: 200(业务逻辑错误)或 4xx/5xx(系统错误)
json
{
    "Code": 1,
    "Message": "TrackingNumber require",
    "Data": []
}

结果码

Code说明
0成功
1失败

示例

Bash

bash
BASE_URL="https://api.postal.test.wmgdelivery.com"
TOKEN="your_access_token"

curl -X POST "$BASE_URL/api/status/lookup" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"TrackingNumber":["C240129142515839830635","C240126144626997791271"]}'

Windows PowerShell

powershell
$BASE_URL = "https://api.postal.test.wmgdelivery.com"
$TOKEN    = "your_access_token"

# 即使只有一个单号也要强制成数组,保证序列化为 JSON 数组
$body = @{
    TrackingNumber = @("C240129142515839830635", "C240126144626997791271")
} | ConvertTo-Json

$response = Invoke-RestMethod -Uri "$BASE_URL/api/status/lookup" -Method Post `
    -ContentType "application/json" -Body $body -Headers @{Authorization = "Bearer $TOKEN"}
$response | ConvertTo-Json -Depth 10

Python

python
import requests

BASE_URL = "https://api.postal.test.wmgdelivery.com"
TOKEN    = "your_access_token"

resp = requests.post(f"{BASE_URL}/api/status/lookup", json={
    "TrackingNumber": [
        "C240129142515839830635",
        "C240126144626997791271",
    ],
}, headers={"Authorization": f"Bearer {TOKEN}"}, timeout=30)
payload = resp.json()

# 两个数组都要检查——单个包裹查不到不会改变 Code
print(payload["Data"]["Success"], payload["Data"]["Errors"])

Node.js / TypeScript

typescript
const BASE_URL = "https://api.postal.test.wmgdelivery.com";
const TOKEN = "your_access_token";

const res = await fetch(`${BASE_URL}/api/status/lookup`, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": `Bearer ${TOKEN}`,
  },
  body: JSON.stringify({
    TrackingNumber: [
      "C240129142515839830635",
      "C240126144626997791271",
    ],
  }),
});
const payload = await res.json();

// 两个数组都要检查——单个包裹查不到不会改变 Code
console.log(payload.Data.Success, payload.Data.Errors);

PHP

php
<?php
$BASE_URL = 'https://api.postal.test.wmgdelivery.com';
$TOKEN    = 'your_access_token';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $BASE_URL . '/api/status/lookup');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Bearer ' . $TOKEN,
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'TrackingNumber' => [
        'C240129142515839830635',
        'C240126144626997791271',
    ],
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
curl_close($ch);

$payload = json_decode($response, true);

// 两个数组都要检查——单个包裹查不到不会改变 Code
print_r([$payload['Data']['Success'], $payload['Data']['Errors']]);
?>

注意事项

  • 部分查不到不算失败。 只要请求本身合法,响应就是 Code: 0Message: "Success"——即使所有运单号都落进了 Data.Errors。请遍历 Data.SuccessData.Errors 两个数组,不要只看 Code
  • 两个数组合起来覆盖你提交的全部运单号,顺序与提交顺序一致。
  • 所有时间均为新加坡时间(UTC+08:00),以带偏移量的 ISO 8601 格式返回。
  • 请按 StatusCode 做业务分支,不要按 StatusDesc 做字符串匹配。描述文本会随承运商和账号配置变化,而状态码是稳定的。
  • 仅内部使用的状态记录会被过滤掉,因此 Activities 可能短于包裹的完整内部历史。
  • 运单号按原样精确匹配——不会转为大写,请完全按签发时的形式发送。
  • 只能查询到属于当前认证账号的包裹;属于其他账号的单号会被报为 No Record(s),而不是权限错误。
  • TrackingNumber 必须是 JSON 数组,传纯字符串会被校验拒绝。
  • 服务端未对数组长度设上限,但请把批量大小控制在你自己客户端超时能承受的范围内——整批在一个请求里完成解析。

错误码

codemessage说明
1TrackingNumber requireTrackingNumber 缺失或为空。
1Error encountered, please contact tech@wmg-group.com with screenshot of error page for resolution.未预期的服务端错误。
1003Token errorToken 缺失、已过期或被新登录顶替。请重新调用 获取 Token

单个运单号解析失败不会出现在这张表里——它们会以 Remarks: "No Record(s)" 的形式返回在 Data.Errors 中,而 Code 仍为 0