【永久免费】Tracking API&Webhook

51Tracking 每月可通过API免费查询200单国际运单轨迹,支持webhook主动更新最新轨迹信息。
51Tracking帮助电子商务企业高效地更新和管理他们的货物。
您可以使用51Tracking的查询API无缝管理物流轨迹,并从管理门户使用51Tracking的购买服务。或者您可以通过API和webhook存储物流轨迹数据,并自行定制购买服务。

本快速入门指南引导你完成 3 种常见方案,让你了解如何使用 51Tracking 来创建和管理物流轨迹。

  1. 什么是物流追踪?

追踪是指与货件相关的信息,包括快递员的姓名、快递员提供的追踪号码和物流节点。

对于包含“跟踪”的所有字段,请参阅跟踪对象。
2. 获取 API 密钥

51Tracking 通过在标头中添加Tracking-Api-Key来验证用户的请求。

要获取您的 API 密钥,请注册51Tracking账户,注册成功后自动生成属于您的API Key,同时也可在账户后台生成新的API Key。
3. API 端点
https://api.51Tracking.com/v4

所有端点只能通过HTTPS访问,并位于api.51Tracking.com
4. 常见场景
场景 1. 创建物流单号进行查询

使用 POST API https://api.51Tracking.com/v4/trackings/create

API document

curl --location --request POST ‘https://api.51Tracking.com/v4/trackings/create’
–header ‘Tracking-Api-Key: your 51Tracking api key’
–header ‘Content-Type: application/json’
–data’{
“tracking_number”: “9261290312833844954982”,
“courier_code”: “usps”
}’

创建物流单号追踪事件时,我们建议您为我们提供快递单号(必填)、物流商简码(必填)和其他快递信息(选填)。

以下是提供快递员信息的 2 种方法

1 . 如果您知道具体的快递公司,请填写该字段(例如,ups-mi) courier_code

2 . 对于某些物流商,必须填写一些额外的字段进行查询追踪,否则您的跟踪将无法创建。

请查看我们的特殊物流商字段 以获取必填字段。
场景 2.更新物流单号信息

使用 API https://api.51Tracking.com/v4/trackings/update/id

如果您要更新订单信息和物流单号添加额外信息,可以使用该API接口进行更新。
场景 3.获取有关物流轨迹的更新

1 . 通过 Webhook

51Tracking可以通过Webhook向您推送每次物流轨迹更新的通知。有了它,您可以存储所有物流轨迹详细信息并构建自己的查询页面。

要设置您的Webhook,请前往后台-开发者中心以填写您的Webhook URL 并保存。

Webhook 响应示例

{
“code”: 200,
“message”: Success,
“data”: {
“id”: “978dbf23f77a6db1123d2b0d37be271e”,
“tracking_number”: “9261290312833844954982”,
“courier_code”: “USPS”,
“order_number”: “1234”,
“order_id”: “1234”,
“order_date”: “2022-08-17T20:10:45+00:00”,
“created_at”: “2022-08-18T19:08:49+00:00”,
“update_at”: “2022-09-21T19:02:21+00:00”,
“delivery_status”: “delivered”,
“archived”: “tracking”,
“updating”: true,
“destination_country”: “HK”,
“origin_country”: “US”,
“tracking_postal_code”: null,
“tracking_ship_date”: null,
“tracking_destination_country”: null,
“tracking_courier_account”: null,
“tracking_key”: null,
“tracking_origin_country”: null,
“customer_name”: “Joe”,
“customer_email”: “example@mail.com”,
“customer_sms”: “+11234567890”,
“title”: “Product_1234”,
“logistics_channel”: null,
“note”: “VIP client”,
“service_code”: “USPS Tracking Plus”,
“weight”: null,
“substatus”: “delivered001”,
“status_info”: null,
“previously”: null,
“destination_track_number”: null,
“exchange_number”: null,
“signed_by”: null,
“scheduled_delivery_date”: null,
“scheduled_address”: null,
“latest_event”: “Delivered, In/At Mailbox”,
“latest_checkpoint_time”: “2022-09-06T12:46:00”,
“transit_time”: 16,
“stay_time”: 16,
“origin_info”: {
“courier_code”: “usps”,
“courier_phone”: null,
“weblink”: “https://www.usps.com/”,
“reference_number”: null,
“pickup_date”: “2022-08-21T04:26:00”,
“departed_airport_date”: null,
“arrived_abroad_date”: null,
“customs_received_date”: null,
“arrived_destination_date”: “2022-09-06T12:46:00”,
“trackinfo”: [
{
“checkpoint_date”: “2022-09-06T12:46:00”,
“tracking_detail”: “Delivered, In/At Mailbox”,
“location”: “ALBUQUERQUE,NM,87105”,
“checkpoint_delivery_status”: “delivered”,
“checkpoint_delivery_substatus”: “delivered001”
},

]
},
“destination_info”: {
}
}
}

2 . 通过 API 获取物流轨迹

若要获取最新的物流轨迹节点,请使用 GET API 接口 https://api.51Tracking.com/v4/trackings/get/tracking_numbers=9261290312833844954982

注意: GET API 每秒限制 2 个请求,如果超出,将显示错误。

请求示例

curl --location --request GET ‘https://api.51tracking.com/v4/trackings/get?tracking_numbers=9261290312833844954982’
–header ‘Tracking-Api-Key: your 51Tracking api key’
–header ‘Content-Type: application/json’

响应示例

{
“meta”: {
“code”: 200,
“message”: “Request response is successful”
},
“data”: {
“success”: [
{
“id”: “string”,
“tracking_number”: “string”,
“courier_code”: “string”,
“order_number”: “string”,
“shipping_date”: “string”,
“order_date”: “string”,
“create_at”: “string”,
“update_at”: “string”,
“delivery_status”: “string”,
“archived”: “tracking”,
“updating”: “true”,
“destination_country”: “string”,
“destination_state”: “string”,
“destination_city”: “string”,
“origin_country”: “string”,
“origin_state”: “string”,

<think>嗯,用户问的是这一句代码的详细解释:`if ((_idsPtr->m_trackingMode & TrackingMode::ARRAY_TRACKING))`。首先,我需要理解这段代码的结构和每个部分的作用。 首先,`_idsPtr`应该是一个指向某个对象的指针,可能是结构体或类的实例,其中包含`m_trackingMode`成员变量。这个变量可能存储了当前的跟踪模式,使用位掩码的方式组合多个模式。 接下来是`TrackingMode::ARRAY_TRACKING`,这应该是一个枚举值,代表数组跟踪模式。根据之前的对话,用户可能知道`TrackingMode`使用位掩码,每个模式对应一个二进制位。例如,`ARRAY_TRACKING`可能是1(二进制0001),`MARKER_TRACKING`是2(0010)等。 然后,`&`操作符是按位与运算。这里的作用是检查`m_trackingMode`中是否设置了`ARRAY_TRACKING`对应的位。按位与运算的规则是两个位都为1时结果才为1,否则为0。所以当`m_trackingMode`的对应位为1时,整个表达式的结果非零,条件成立;否则不成立。 用户可能想知道为什么使用按位与来检查标志位,以及整个条件判断的逻辑。可能还需要了解为什么需要这样的检查,或者如何设置和清除这些标志位。 此外,用户可能对`_idsPtr`的结构不太清楚,或者对位掩码的实际应用场景有疑问。需要解释位掩码的优势,比如高效存储多个布尔状态,以及如何通过位运算进行快速判断。 还需要考虑用户可能的背景。他们可能是C++开发者,正在处理与跟踪模式相关的代码,可能在开发或调试过程中遇到了问题,需要理解这段代码的作用,或者如何修改它来添加新的跟踪模式。 另外,用户可能没有完全理解按位运算在权限或状态检查中的具体应用,需要进一步举例说明,比如在权限管理中如何使用类似的位掩码来检查用户是否有某个权限。 最后,要确保回答清晰,分步骤解释每个部分,并提供相关的示例和注意事项,帮助用户全面理解这行代码的作用和背后的原理。</think>这一行代码的作用是**检查当前跟踪模式 (`m_trackingMode`) 是否启用了 `ARRAY_TRACKING`(数组跟踪)模式**。其核心逻辑是通过 **按位与运算 (`&`)** 来判断某个二进制位是否被置为 `1`。以下是逐层解析: --- ### **1. 代码结构分解** ```cpp if ((_idsPtr->m_trackingMode & TrackingMode::ARRAY_TRACKING)) ``` - **`_idsPtr`**:一个指向对象的指针,可能是一个结构体或类实例(如 `TrackingIds` 类)。 - **`m_trackingMode`**:该对象的成员变量,存储当前跟踪模式的位掩码(bitmask)。 - **`TrackingMode::ARRAY_TRACKING`**:枚举值,表示数组跟踪模式对应的二进制标志位。 - **`&`**:按位与运算符,用于检测 `m_trackingMode` 中是否包含 `ARRAY_TRACKING` 标志。 --- ### **2. 位掩码(Bitmask)原理** 假设 `TrackingMode` 的枚举值设计为二的幂(每个标志对应一个独立的二进制位): ```cpp enum class TrackingMode { NONE = 0, // 0b0000 ARRAY_TRACKING = 1 << 0, // 0b0001 MARKER_TRACKING = 1 << 1, // 0b0010 DEBUG_MODE = 1 << 2 // 0b0100 }; ``` - **按位与 (`&`)**:用于检查某个特定的二进制位是否为 `1`。 - 若 `m_trackingMode` 的二进制位与 `ARRAY_TRACKING` 的掩码(`0b0001`)相与结果不为 `0`,则说明 `ARRAY_TRACKING` 被启用。 #### **示例** ```cpp int m_trackingMode = TrackingMode::ARRAY_TRACKING | TrackingMode::MARKER_TRACKING; // 0b0011 if (m_trackingMode & TrackingMode::ARRAY_TRACKING) { // 条件成立,执行数组跟踪逻辑 } ``` --- ### **3. 为什么使用按位与?** - **高效性**:按位运算直接操作二进制位,无需遍历多个布尔变量。 - **简洁性**:用一个整数即可表示多个独立状态。 - **扩展性**:新增模式时只需定义新的二进制位(如 `DEBUG_MODE = 1 << 2`)。 --- ### **4. 代码的完整逻辑** ```cpp // 假设 _idsPtr->m_trackingMode 的值为: // - 0b0001(仅 ARRAY_TRACKING) // - 0b0011(ARRAY_TRACKING | MARKER_TRACKING) // - 0b0000(无模式) if ((_idsPtr->m_trackingMode & TrackingMode::ARRAY_TRACKING)) { // 如果 m_trackingMode 的 ARRAY_TRACKING 位为 1,执行此分支 // 例如: processArrayTracking(); // 执行数组跟踪逻辑 } else { // 否则跳过数组跟踪 } ``` --- ### **5. 与逻辑或 (`||`) 的对比** | 运算符 | 用途 | 示例 | 说明 | |--------|------|------|------| | **按位或 (`|`)** | **组合模式** | `mode = A | B` | 启用 A 和 B 模式 | | **按位与 (`&`)** | **检查模式** | `if (mode & A)` | 判断是否启用 A 模式 | | **逻辑或 (`||`)** | **布尔判断** | `if (a || b)` | 仅判断布尔值(true/false) | **关键区别**: - 按位运算直接操作二进制位,适用于位掩码。 - 逻辑运算仅判断整体布尔值,无法处理多个独立标志。 --- ### **6. 常见错误与注意事项** #### **(1) 枚举值未设计为二的幂** ```cpp enum TrackingMode { A = 1, // 0b0001 B = 3 // 0b0011 ← 错误:与 A 冲突 }; ``` - **问题**:`A | B` 会导致掩码冲突,无法准确判断模式。 #### **(2) 忘记显式转换为整数类型** - C++ 的 `enum class` 默认不允许隐式转换为整数: ```cpp if ((_idsPtr->m_trackingMode & static_cast<int>(TrackingMode::ARRAY_TRACKING))) { ... } ``` #### **(3) 优先级问题** - 按位运算符优先级低于比较运算符(如 `==`、`>`),需用括号明确逻辑: ```cpp if ((x & MASK) == MASK) { ... } // 安全写法 ``` --- ### **7. 替代方案:`std::bitset`** 如果使用 `std::bitset` 代替位掩码,代码会更直观: ```cpp std::bitset<3> trackingMode; // 3 位表示三种模式 trackingMode.set(0); // 启用 ARRAY_TRACKING(第 0 位) if (trackingMode.test(0)) { // 执行数组跟踪逻辑 } ``` --- ### **8. 总结** - **核心逻辑**:通过按位与 (`&`) 检查 `m_trackingMode` 是否包含 `ARRAY_TRACKING` 标志。 - **关键点**: 1. 枚举值必须为二的幂(如 `1 << n`)。 2. 使用位运算组合和检查模式。 3. 注意类型转换和运算符优先级。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值