为 Node.js 的 Ship 跟踪 API 库之后
这个库允许您通过Node.js快速并方便地使用AfterShip跟踪API.
欲知此库的更新情况,请参见: GitHub 发布页面。 。 。 .
如果您需要使用 AfterShip 产品支持,请联系 支持@aftership.com。 。 。 .
目录
在你开始之前
在开始整合之前:
- 创建 AfterShip 账户。 。 。 .
- 创建 API 密钥。 。 。 .
- 安装节点.js 16版或稍后版本.
API 和 SDK 版本
- SDK版本: 17.0
- API 版本: 2026-07
快速启动
安装
npm install --save @aftership/tracking-sdk
构造器
使用选项创建 Ship 后实例
| 名称 | 类型 | 需求 | 说明 |
|---|---|---|---|
| 键 | 字符串 | ✔ | 您的 IP API 密钥后 |
| 认证类型( a) | 语句 | 默认值 : AuthType.API_KEY AES 认证 : AuthType.AES RSA 认证 : AuthType.RSA | |
| 密语( s) | 字符串 | 如果认证类型是 AuthType.AES 或者说 AuthType.RSA | |
| 域名 | 字符串 | 在Ship API域名之后. 默认值 : https://api.aftership.com (中文(简体) ) | |
| 用户代理( a) | 字符串 | 用户定义的用户代理字符串, 请遵循 RFC9110 (法语) 格式标准. | |
| 代理服务器 | 字符串 | 用于请求的 HTTP 代理 URL . 默认值 : null 示例 http://192.168.0.100:8888 | |
| 最大重试( r) | 编号 | 每个请求的重试次数 。 默认值: 2. min为0, Max为10. | |
| 超时 | 编号 | 每个请求的超时, 以毫秒计 . |
示例
// Step 1: Import the AfterShip client
import { AfterShip } from "@aftership/tracking-sdk";
// or
// const { AfterShip } = require('@aftership/tracking-sdk');
// Step 2: Initialize the client object
const aftership = new AfterShip({ api_key: "YOUR_API_KEY" });
// Step 3: Create the query object
const query = {};
// Step 4: Make the request
aftership.tracking
.getTrackingById(
"valid_value",
query,
)
.then((result) => console.log(result))
.catch((e) => console.log(e));
限制费率
见 费率限制 以了解AfterShip利率限制政策.
API返回其在每个响应头的当前速率限制状态,SDK在成功响应和速率限制错误上都会暴露出这些头,这样您就可以主动地监视您的消费,而不是等待 429 错误.
| 页眉 | 说明 |
|---|---|
X-RateLimit-Limit | 当前终点每秒的费率上限 |
X-RateLimit-Remaining | 1秒窗口所剩请求数 |
X-RateLimit-Reset | 重置速度限制时的 Unix 时间戳 |
每一次成功的对策都表明 response_headers 对象并列 data (标题名称为小写). 以上面的快速启动为例:
const remaining = Number(result.response_headers["x-ratelimit-remaining"]);
const resetAt = Number(result.response_headers["x-ratelimit-reset"]);
if (remaining <= 1) {
// Throttle or defer lower-priority requests until `resetAt`
}
当超过费率限制时,请求失败 429 带有相同信头的错误——见 处理错误。 。 。 .
处理错误
SDK会在请求中出现出错时返回出错对象,其规格如下:
| 名称 | 类型 | 说明 |
|---|---|---|
| 消息 | 字符串 | 错误的详细信息 |
| 代码 | 语句 | API 错误代码enum 错误 . |
| 元码 | 编号 | API响应元码. |
| 状态( c) | 编号 | HTTP状态代码. |
| 响应( b) | 字符串 | API反应机体. |
| 响应( h) | 对象 | API响应头. |
错误列表
| 代码 | 元码 | 状态( c) | 消息 |
|---|---|---|---|
| 申请 | 400个 | 400个 | 请求无效或无法以其他方式送达. |
| 参赛者( J) | 4001 (英语) | 400个 | 无效的JSON数据 . |
| 跟踪( A) | 4003 (英语) | 400个 | 跟踪已经存在. |
| 跟踪( D) | 4004 (中文(简体) ) | 404 (韩语) | 追踪不存在. |
| 跟踪( N) | 4005 (英语) | 400个 | 跟踪 数字的值无效 . |
| 跟踪( R) | 4006号 | 400个 | 需要跟踪对象. |
| 跟踪( N) | 4007 (英语) | 400个 | 需要跟踪 数字. |
| VALUE 评价 | 第4008号 | 400个 | [field name] 的值无效. |
| 数值( REQ) | 4009 (英语) | 400个 | [域名]是需要的. |
| (原始内容存档于2018-09-21) (英语). SLUG IVALID | 第40条 | 400个 | 弹片的值无效 . |
| 错过 OR 评估 REQUID FIELD | 第4011号 | 400个 | 该信使所需的字段缺少或无效值 。 除了跟踪 数字,还需要: [字段 名称] |
| 糟糕的学校 | 第4012号 | 400个 | 错误消息将是以下之一: 1. 无法进口货运,因为承运人不在贵国核准的承运人自动检测清单中。 在此添加载体 : https://admin.aftership.com/ settings/couriers2 (中文(简体) )无法进口货物,因为我们无法从这个追踪号码中识别到承运人。 3个 无法导入货运, 因为跟踪号格式无效 。 4.四. 由于该承运人不再得到支持,无法进口货运。 5 (韩语). 无法进口货运,因为追踪号不属于该组中的承运人. |
| 缩略语 RETRACK 注: | 第4013号 | 400个 | 不允许重新追踪 。 您只能重新追踪不活动跟踪 . |
| 通知 已撤销 | 第4014条 | 400个 | 需要通知对象. |
| 识别( I) | 第4015号 | 400个 | Id的值无效. |
| 重新开放 | 第4016号 | 400个 | 不允许重新追踪 。 只能重新追踪一次. |
| 跟踪( N) 格式 估价 | 第4017号 | 400个 | 跟踪 数字的格式无效 . |
| API KEY 评估 | 401 (中文(简体) ) | 401 (中文(简体) ) | API 密钥无效 . |
| 请求( N) | 403 (韩语) | 403 (韩语) | 请求是可以理解的,但被拒绝或不允许访问. |
| 无 | 404 (韩语) | 404 (韩语) | 请求的 URI 无效或请求的资源不存在 . |
| (原始内容存档于2018-07-26) (英语). TOO MANY REQUEST | 429个 | 429个 | 您已超过 API 的呼叫率限制 。 默认限制为每秒10个请求. |
| 内部错误 | 500个 | 500个 | Ship死后出了点事. |
| 内部错误 | 502 (中文(简体) ) | 502 (中文(简体) ) | Ship死后出了点事. |
| 内部错误 | 第503条 | 第503条 | Ship死后出了点事. |
| 内部错误 | 504 (中文(简体) ) | 504 (中文(简体) ) | Ship死后出了点事. |
|
终点
AfterShip 实例的属性与 API 端点完全相同 :
- 跟踪
- 获取跟踪
- 创建跟踪
- 通过身份追踪
- 以 ID 更新跟踪
- 以 ID 删除跟踪
- 以 ID 重追踪已过期的跟踪
- 标记跟踪由 ID 完成
- 邮递员
- 找快递员
- 侦测信使
- 信使连接
- 获取信使连接
- 创建信使连接
- 通过 id 获取快递连接
- 通过 id 更新快递连接
- 以 id 删除信使连接
- 估计交付日期
- 估计交付日期的预测
- 估计交付日期批次预测
/跟踪
获取 /跟踪
const query = {};
aftership.tracking
.getTrackings(query)
.then((result) => console.log(result))
.catch((e) => console.log(e));
邮政 /跟踪
const createTrackingRequestBody = {
tracking_number: "valid_value",
};
aftership.tracking
.createTracking(createTrackingRequestBody)
.then((result) => console.log(result))
.catch((e) => console.log(e));
获取 /跟踪/{id}
const query = {};
aftership.tracking
.getTrackingById(
"valid_value",
query,
)
.then((result) => console.log(result))
.catch((e) => console.log(e));
点 /跟踪/{id}
const updateTrackingByIdRequestBody = {};
aftership.tracking
.updateTrackingById("valid_value", updateTrackingByIdRequestBody)
.then((result) => console.log(result))
.catch((e) => console.log(e));
迪莱特 /跟踪/{id}
aftership.tracking
.deleteTrackingById("valid_value")
.then((result) => console.log(result))
.catch((e) => console.log(e));
邮政 /跟踪/{id}/再跟踪
aftership.tracking
.retrackTrackingById("valid_value")
.then((result) => console.log(result))
.catch((e) => console.log(e));
邮政 /跟踪/{id}/标记-已完成
const markTrackingCompletedByIdRequestBody = {};
aftership.tracking
.markTrackingCompletedById(
"valid_value",
markTrackingCompletedByIdRequestBody,
)
.then((result) => console.log(result))
.catch((e) => console.log(e));
警车
获取 警车
const query = {};
aftership.courier
.getCouriers(query)
.then((result) => console.log(result))
.catch((e) => console.log(e));
邮政 警监/侦察员
const detectCourierRequestBody = {
tracking_number: "valid_value",
};
aftership.courier
.detectCourier(detectCourierRequestBody)
.then((result) => console.log(result))
.catch((e) => console.log(e));
/ cour- 连接
获取 / cour- 连接
const query = {};
aftership.courierConnection
.getCourierConnections(query)
.then((result) => console.log(result))
.catch((e) => console.log(e));
邮政 / cour- 连接
const postCourierConnectionsRequestBody = {
courier_slug: "valid_value",
credentials: {},
};
aftership.courierConnection
.postCourierConnections(postCourierConnectionsRequestBody)
.then((result) => console.log(result))
.catch((e) => console.log(e));
获取 /courier-连接/{id}
aftership.courierConnection
.getCourierConnectionsById("valid_value")
.then((result) => console.log(result))
.catch((e) => console.log(e));
帕齐 /courier-连接/{id}
const putCourierConnectionsByIdRequestBody = {
credentials: {},
};
aftership.courierConnection
.putCourierConnectionsById(
"valid_value",
putCourierConnectionsByIdRequestBody,
)
.then((result) => console.log(result))
.catch((e) => console.log(e));
迪莱特 /courier-连接/{id}
aftership.courierConnection
.deleteCourierConnectionsById("valid_value")
.then((result) => console.log(result))
.catch((e) => console.log(e));
/估计交付日期
邮政 /估计交付日期/预测
const predictRequestBody = {
slug: "valid_value",
origin_address: {}, // EstimatedDeliveryDateRequestOriginAddress
destination_address: {}, // EstimatedDeliveryDateRequestDestinationAddress
};
aftership.estimatedDeliveryDate
.predict(predictRequestBody)
.then((result) => console.log(result))
.catch((e) => console.log(e));
邮政 估计交付日期/预期批次
const predictBatchRequestBody = {};
aftership.estimatedDeliveryDate
.predictBatch(predictBatchRequestBody)
.then((result) => console.log(result))
.catch((e) => console.log(e));
帮助
如果你被卡住,我们在这里帮助:
- 问题跟踪器 对于与本套件相关的问题、特性请求、错误报告和一般性讨论。 在创建新问题之前尝试搜索 .
- 通过Ship 正式支持后联系 支持@aftership.com
许可证
版权 (c) 2025 Sip之后
持有麻省理工学院执照.