版本特性
1. 支持批量订阅物流单号、定时跟踪及全量推送物流信息。
2. 支持7 种物流状态。
开发文档
获取API访问密钥
通过登录管理控制台->设置->访问密钥获取;如果需要更换密钥,可以直接操作“更换密钥”,更换后的新密钥生效时间会有最长5分钟的延迟,新的密钥生效后,旧的密钥立即失效。
API地址
API地址:https://api.17track.net/track/v1
数据请求
所有API接口统一采用http(s) POST方式提交请求,请求和响应数据均使用UTF-8编码的JSON格式。所有请求基地址均以http(s)://api.17track.net/track/v1/开始。 所有请求都需要将密钥作为请求头一起提交,头名称为17token,如下所示(注册单号请求):
curl -X POST
--header '17token:your secret key'
--header 'Content-Type:application/json'
--data '[{"number":"RR123456789CN"}]'
https://api.17track.net/track/v1/register
数据封装
{
"code": 0,
"data": {
"accepted":[],
"rejected":[]
}
}
响应结果采用统一的数据封装格式,说明如下;
Name | Description |
---|---|
code | 处理的错误代码,0表示没有错误,其他错误情形参照错误状态码。 |
data | 响应的数据内容对象封装。 |
- accepted | 对于请求中正常处理部分响应结果。 |
- rejected | 对于请求中处理异常部分响应结果。 |
响应状态
HTTP状态码
Name | Description |
---|---|
200 | 请求得到正常处理,具体的处理结果需要检查返回数据。 |
401 | 请求未经授权、密钥错误、访问IP不在白名单内或者账号被禁用。 |
404 | 请求的Url地址错误。 |
429 | 访问频率超出限制。 |
500 | 服务器错误。 |
503 | 服务临时不可用。 |
错误状态码
错误状态码是在http状态码返回的基础上,对数据处理结果的具体表示。
Name | Description |
---|---|
0 | 成功。 |
-18010001 | IP地址不在白名单内。 |
-18010002 | 访问密钥无效。 |
-18010003 | 内部服务错误,请稍候重试。 |
-18010004 | 账号被禁用。 |
-18010005 | 未授权的访问。 |
-18010010 | 需要提供数据项 {0}。 |
-18010011 | 数据项 {0} 的值无效。 |
-18010012 | 数据项 {0} 的格式无效。 |
-18010013 | 提交数据无效。 |
-18010014 | 请求参数 number 数量超过40个。 |
-18010015 | 字段 {1} 的值 {0} 无效。 |
-18010016 | 只有邮政物流才可以设置尾程渠道。 |
-18010018 | 需要传递附加参数国家二字码和邮编,示例:'FR-12345'。 |
-18010019 | 需要传递附加参数邮编,示例:'3078CM'。 |
-18010020 | 需要传递附加参数电话,示例:'8888'。 |
-18010022 | 需要传递附加参数发货日期. 示例: '2024-01-01'. |
-18010201 | WebHook地址不能为空。 |
-18010202 | WebHook地址格式不正确。 |
-18010203 | WebHook测试失败,Http状态码:{0}。 |
-18010204 | 没有设置Webhook地址,无法推送。 |
-18010205 | IP地址格式不正确。 |
-18010206 | 推送失败。 |
-18019901 | 跟踪单号 {0} 已经注册过,不需重复注册。 |
-18019902 | 跟踪单号 {0} 还未注册,请先进行注册。 |
-18019903 | 运输商不能被识别。 |
-18019904 | 只能重新跟踪已经停止跟踪的跟踪单号。 |
-18019905 | 每个物流单号只能被重新跟踪一次。 |
-18019906 | 只能停止跟踪正在跟踪中的跟踪单号。 |
-18019907 | 超出了每天限额。 |
-18019908 | 额度已经用完。 |
-18019909 | 暂时没有跟踪信息。 |
-18019910 | 运输商代码 {0} 不正确。 |
-18019801 | 存在相同单号的多个运输商注册信息, 请明确指定需要变更的现有运输商参数[carrier_old]。 |
-18019802 | 提交变更的新运输商参数[carrier_new] {0} 可能错误。 |
-18019803 | 请求变更的运输商参数不能相同。 |
-18019804 | 请求变更的新运输商参数[carrier_new] or [final_carrier_new]必须明确指定其一。 |
-18019805 | 没有注册指定运输商 {0} 的跟踪单号 {1},或者现有运输商参数[carrier_old]错误。 |
-18019806 | 已经停止跟踪的跟踪单号不能修改运输商,请激活后再进行修改。 |
-18019807 | 超出运输商修改次数上限。 |
-18019808 | 最近注册或修改后还未返回跟踪结果,请等待跟踪结果返回后再进行修改。 |
-18019809 | 已经存在跟踪单号的运输商为 {0} 的注册信息,不能修改为重复的注册信息。 |
-18019810 | 满足修改条件的数据不唯一。 |
-18019811 | 没有有效的数据修改项。 |
参数格式
跟踪单号:跟踪单号必须是连续的5到50个字母和数字的组合。 运输商:运输商代码必须是有效的运输商Key,具体可参考运输商编码。
基础信息
运输商编码
- 访问 https://res.17track.net/asset/carrier/info/apicarrier.all.json 获取当前支持的所有可用运输商,由于我们在持续增加更多的运输商,所以请定期更新。使用到运输商代码的相关的接口均使用我们自己定义的运输商信息中的编码“Key”来进行提交。下载运输商列表。
附加跟踪参数
某些运输商除要求提供运单号外,还需要提供额外的跟踪信息才可以进行轨迹查询,请参考以下内容:
- JSON 格式 访问这里;
- CSV 格式 访问这里;
- 特别说明一,存在部分运输商需要两个额外跟踪信息才能进行轨迹查询:
1. 以PostNL(14041)为例 , 额外附加信息同时需要目的地国家二字码和邮编。请求时,param参数传参格式如下:FR-1000AA,两个额外信息以"-"分隔,"-"前面为目的地国家二字码,后面为邮编; - 特别说明二,存在部分运输商官方提供多种查询渠道,不同查询渠道需要的查询条件不同:
以New Zealand Couriers(100592)为例,额外附加信息同时需要number_type(查询渠道的类型)和parameter(对应查询渠道的条件值)。请求时,param参数传参格式如下:1-1000000,两个额外信息以"-"分隔,"-"前面为number_type,后面为parameter; 该运输商额外附加信息param非必填,不传则默认以Bar code的方式查询; - 17TRACK 会基于新增运输商及运输商的查询要求持续更新上述内容。
国家地区编码
- 通过访问 https://res.17track.net/asset/carrier/info/country.all.json 获取最新的国家地区编码,在查询跟踪信息或者收到推送信息后需要通过该编码表查询发件国家地区和目的国家地区编码所对应实际国家地区。
包裹状态
Name | Description |
---|---|
0 | 查询不到。 |
10 | 运输途中。 |
20 | 运输过久。 |
30 | 到达待取。 |
35 | 投递失败。 |
40 | 成功签收。 |
50 | 可能异常。 |
查询状态
Name | Description |
---|---|
0 | 无法识别。 |
1 | 正常查有信息。 |
2 | 尚无信息。 |
10 | 网站错误。 |
11 | 处理错误。 |
12 | 查询错误。 |
20 | 网站错误,使用缓存。 |
21 | 处理错误,使用缓存。 |
22 | 查询错误,使用缓存。 |
跟踪信息
Name | Description |
---|---|
w1 | 第一运输商编号。 |
w2 | 第二运输商编号。 |
b | 发件国家地区编码。 |
c | 目的国家地区编码。 |
z0 | 最新一条事件信息(第一、第二运输商事件集合中的最新一条)。 |
z1 | 第一运输商事件信息集合,顺序全部以降序存放。 |
z2 | 第二运输商事件信息集合,顺序全部以降序存放。 |
z9 | 联合运输商事件信息集合,顺序全部以降序存放,关于联合运输商。 |
ygt1 | 查询耗时(第一运输商),单位毫秒。 |
ygt2 | 查询耗时(第二运输商),单位毫秒。 |
ygt9 | 查询耗时(联合运输商),单位毫秒。 |
ylt1 | 最后采集时间(第一运输商),2079-01-01表示该时间无效。 |
ylt2 | 最后采集时间(第二运输商),2079-01-01表示该时间无效。 |
ylt9 | 最后采集时间(联合运输商),2079-01-01表示该时间无效。 |
is1 | 第一运输商查询状态,第一运输商编号(w1)不为0的时侯该状态有效,否则无效。 |
is2 | 第二运输商查询状态,第二运输商编号(w2)不为0的时候该状态有效,否则无效。 |
ln1 | 第一运输商事件信息使用的语言。 |
ln2 | 第二运输商事件信息使用的语言。 |
ln9 | 联合运输商事件信息使用的语言。 |
hs | 最新一条事件的哈希值。 |
e | 包裹状态。 |
f | 妥投时效(仅对妥投签收的有时效信息,-1表示时效信息无效)。 |
yt | 其他提示信息。 |
zex | 跟踪信息扩展。 |
跟踪信息扩展-暂未使用
Name | Description |
---|---|
trC | 原始渠道,只有头程是联合运输商时才可能有值,默认为空。 |
trN | ,只有头程是联合运输商时才可能有值,默认为0。 |
事件信息
Name | Description |
---|---|
a | 事件时间(可能不是有效的时间格式数据,需要按字符串处理)。 |
b | 地理位置坐标(暂未使用)。 |
c | 事件发生地点。 |
d | 事件发生地点扩展。 |
z | 事件内容描述。 |
注意事项
- 所有接口请求的跟踪单号都需要先通过register接口进行注册;
- 每个接口请求限制频率为 3req/s,超限会报 429 错误;
- 相同的跟踪单号和运输商多次提交只算一个额度,到期删除后再提交会再重新计算额度;
- 系统将自动停止跟踪连续30日无事件更新或者签收后15日无事件更新的单号;
- 系统对于停止跟踪的单号会继续保留90天,到期后会物理删除对应的数据;
- 对停止跟踪的单号有一次机会可以重新激活继续进行跟踪;
API接口参考(v1.0)
注册运单
- 该接口每次可提交注册40个跟踪单号。
- POST /register 请求数据示例:
[
{
"number": "RR123456789CN",
"extra_param":"",
"carrier": 3011,
"final_carrier": 21051,
"auto_detection":false,
"tag": "MyId"
},
{
"number": "1234"
}
]
请求参数说明:
Name | Required Or Not | Type | Description |
---|---|---|---|
number | 是 | 字符串 | 跟踪单号,需满足单号格式要求。 |
extra_param | 否 | 字符串 | 物流单号附加跟踪参数(较少的运输商要求提供邮编或下单日期才能查询包裹信息); |
carrier | 否 | 整数 | 运输商代码,目前我们可以准确识别绝大多数万国邮联的跟踪单号以及合作运输商的定制跟踪单号,注册这类单号时运输商代码可以传,也可以不传,如果传错,我们会进行纠正并返回正确的运输商代码。如果在注册时返回错误代码-18019903则表示我们无法准确识别注册单号所属的运输商,为了避免识别错误给你带来损失,此时请传递正确的运输商代码重新进行注册既可。 |
final_carrier | 否 | 整数 | 尾程运输商代码(仅支持邮政渠道)。 |
auto_detection | 否 | 布尔值 | 是否开启运输商自动检测,默认为false,只有在carrier未设置且该参数设置为true时才生效。该参数生效时,将使用17TRACK主站相同的识别算法识别第一运输商,但是不确保一定可以识别到且不保证识别结果的准确性。 |
tag | 否 | 字符串 | 自定义注册标识,最长100个字符。 |
响应结果示例:
{
"code": 0,
"data": {
"accepted": [
{
"origin": 1,
"number": "RR123456789CN",
"carrier": 3011
}
],
"rejected": [
{
"number": "1234",
"error": {
"code": -18010012,
"message": "The format of '1234' is invalid."
}
}
]
}
}
响应结果说明:
Name | Description |
---|---|
code | 错误状态码。 |
data | 请求对应的响应数据。 |
-accepted | 正常接受注册的单号,同时返回对应的运输商代码,如果执行过纠正策略,返回的运输商可能和传入的不同。 |
--number | 正常接受注册的单号。 |
--carrier | 正常接受注册的运输商代码。 |
--origin | 正常接受注册的运输商识别方式:1:准确识别(包含强制矫正过的)2:用户输入3:自动检测(不确保准确)。 |
-rejected | 拒绝接受注册的单号,具体拒绝的单号和原因可以检查对应的错误代码。 |
修改运输商
- 用于修运第一运输商和尾程运输商,该接口每次可提交修改40个跟踪单号。
- POST /changecarrier 请求数据示例:
[
{
"number": "RR123456789CN",
"carrier_old": 3011,
"carrier_new": 3013,
"final_carrier_old": 0,
"final_carrier_new": 0
}
]
请求参数说明:
Name | Required Or Not | Type | Description |
---|---|---|---|
number | 是 | 字符串 | 跟踪单号,需满足单号格式要求。 |
carrier_old | 否 | 整数 | 旧的运输商代码,如果没有注册相同单号的多个运输商的情况下可以不设置。 |
carrier_new | 是 | 整数 | 新的运输商代码。 |
final_carrier_old | 否 | 整数 | (仅邮政物流渠道支持)旧的尾程运输商代码,如果该注册单号没有重复,可以不设置(仅邮政单号支持)。 |
final_carrier_new | 是 | 整数 | (仅邮政物流渠道支持)新的尾程运输商代码。 |
响应结果示例:
{
"code": 0,
"data": {
"accepted": [
{
"number": "RR123456789CN",
"carrier": 3013
}
],
"rejected": []
}
}
响应结果说明:
Name | Description |
---|---|
code | 错误状态码。 |
data | 请求对应的响应数据。 |
-accepted | 正常接受且成功执行变更的单号,同时返回对应的最新的运输商代码。 |
-rejected | 拒绝接受修改的单号,具体拒绝的单号和原因可以检查对应的错误代码。 |
修改信息
- 用于修改和跟踪相关的附属信息。
- POST /changeinfo 请求数据示例:
{
"number": "RR123456789CN",
"carrier":3011,
"items": {
"param": "1234",
"tag": "This is my order id."
}
}
请求参数说明:
Name | Required Or Not | Type | Description |
---|---|---|---|
number | 是 | 字符串 | 跟踪单号,需满足单号格式要求。 |
carrier | 否 | 整数 | 运输商代码。 |
items | 是 | 字典 | 需要修改的数据项目集合,目前暂时仅支持修改tag,提交的其他项目将被忽略。 |
--tag | 否 | 字符串 | 自定义注册标识,最长100个字符。 |
--param | 否 | 字符串 | 附加跟踪参数。 |
响应结果示例:
{
"code": 0,
"data": {
"accepted": [
{
"number": "LW503511611CN",
"carrier": 3011
}
],
"rejected": []
}
}
响应结果说明:
Name | Description |
---|---|
code | 错误状态码。 |
data | 请求对应的响应数据。 |
-accepted | 正常接受且成功执行变更的单号,同时返回对应的最新的运输商代码。 |
-rejected | 拒绝接受修改的单号,具体拒绝的单号和原因可以检查对应的错误代码。 |
停止跟踪
- 该接口每次可提交40个跟踪单号。
- POST /stoptrack 请求数据示例:
[
{
"number": "RR123456789CN",
"carrier": 3011
}
]
请求参数说明:
Name | Required Or Not | Type | Description |
---|---|---|---|
number | 是 | 字符串 | 跟踪单号,需满足单号格式要求。 |
carrier | 否 | 整数 | 运输商代码,不传的时候如果有多条相同单号的数据(运输商不同),则处理多条。 |
响应结果示例:
{
"code": 0,
"data": {
"accepted": [
{
"number": "RR123456789CN",
"carrier": 3011
}
]
}
}
响应结果说明:
Name | Description |
---|---|
code | 错误状态码。 |
data | 请求对应的响应数据。 |
-accepted | 正常接受并处理的请求。 |
-rejected | 拒绝接受处理的请求,具体拒绝的单号和原因需检查对应的错误代码。 |
重启跟踪
- 该接口每次可提交40个跟踪单号。
- POST /retrack 请求数据示例:
[
{
"number": "RR123456789CN",
"carrier": 3011
}
]
请求参数说明:
Name | Required Or Not | Type | Description |
---|---|---|---|
number | 是 | 字符串 | 跟踪单号,需满足单号格式要求。 |
carrier | 否 | 整数 | 运输商代码,不传的时候如果有多条相同单号的数据(运输商不同),则处理多条。 |
响应结果示例:
{
"code": 0,
"data": {
"accepted": [
{
"number": "RR123456789CN",
"carrier": 3011
}
]
}
}
响应结果说明:
Name | Description |
---|---|
code | 错误状态码。 |
data | 请求对应的响应数据。 |
-accepted | 正常接受并处理的请求。 |
-rejected | 拒绝接受处理的请求,具体拒绝的单号和原因需检查对应的错误代码。 |
获取列表
- 查询注册单号列表信息。
- POST /gettracklist 请求数据示例:
{
"number": "RR123456789CN",
"carrier": 3011,
"register_time_from": "2019-01-01 12:24:00",
"register_time_to": "2019-02-01",
"tracking_time_from": "2019-01-01",
"tracking_time_to": "2019-12-01",
"push_time_from": "2019-01-01",
"push_time_to": "2019-12-01",
"push_state": 0,
"stop_time_from": "2019-01-01",
"stop_time_to": "2019-12-01",
"package_state": 10,
"tracking_state": 0,
"page_no": 1
}
请求参数说明:
Name | Required Or Not | Type | Description |
---|---|---|---|
number | 否 | 字符串 | 跟踪单号,需满足单号格式要求。 |
carrier | 否 | 整数 | 运输商代码。 |
register_time_from | 否 | 日期时间 | 注册时间从(UTC时间)。 |
register_time_to | 否 | 日期时间 | 注册时间到(UTC时间)。 |
tracking_time_from | 否 | 日期时间 | 最近跟踪时间从(UTC时间)。 |
tracking_time_to | 否 | 日期时间 | 最近跟踪时间到(UTC时间)。 |
push_time_from | 否 | 日期时间 | 最近推送时间从(UTC时间)。 |
push_time_to | 否 | 日期时间 | 最近推送时间到(UTC时间)。 |
push_state | 否 | 整数 | 推送结果:0:未推送;1:推送成功;2:推送失败。 |
stop_time_from | 否 | 日期时间 | 停止跟踪时间从(UTC时间)。 |
stop_time_to | 否 | 日期时间 | 停止跟踪时间到(UTC时间)。 |
package_state | 否 | 整数 | 包裹状态。 |
tracking_state | 否 | 布尔值 | 跟踪状态:1:自动跟踪;0:停止跟踪。 |
page_no | 否 | 整数 | 页码。 |
响应结果示例:
{
"code": 0,
"data": {
"accepted": [
{
"number": "RV929123748CN",
"w1": 3011,
"b": 301,
"w2": 10011,
"c": 1001,
"e": 20,
"rt": "2019-08-26 09:48:16",
"tt": "2020-01-16 02:52:11",
"pt": "2019-11-08 06:16:25",
"ps": 200,
"st": "2020-02-28 02:36:59",
"sr": 1,
"ir": true,
"ts": false,
"mc": 0,
"tag": null
}
]
}
}
响应结果说明:
Name | Description |
---|---|
code | 错误状态码。 |
data | 请求对应的响应数据。 |
-accepted | 正常处理请求返回结果集合,如果没有满足条件的数据,返回集合为空。 |
--number | 跟踪单号。 |
--w1 | 第一运输商编号。 |
--w2 | 第二运输商编号。 |
--b | 发件国家地区编码。 |
--c | 目的国家地区编码。 |
--e | 包裹状态。 |
--rt | 注册时间。 |
--tt | 最近跟踪时间。 |
--pt | 最近推送时间。 |
--ps | 推送HTTP状态码。 |
--st | 停止跟踪时间。 |
--sr | 停止跟踪原因:1:过期自动停止;2:接口请求停止;3:手工操作停止;4:运输商无效停止。 |
--ir | 是否已经重启跟踪:1:重新启动过跟踪;0:未重启过跟踪。 |
--ts | 跟踪状态:1:自动跟踪;0:停止跟踪。 |
--mc | 运输商已经修改次数。 |
--tag | 自定义注册标识。 |
-errors | 查询条件设置错误。 |
获取详情
- 该接口每次可提交40个跟踪单号。
- POST /gettrackinfo 请求数据示例:
[
{
"number": "RR123456789CN",
"carrier": 3011
}
]
请求参数说明:
Name | Required Or Not | Type | Description |
---|---|---|---|
number | 是 | 字符串 | 跟踪单号,需满足单号格式要求。 |
carrier | 否 | 整数 | 运输商代码,不传的时候如果有多条相同单号的数据(运输商不同),则处理多条。 |
响应结果示例:
{
"code": 0,
"data": {
"accepted": [
{
"number": "RM101474005CN",
"tag": "",
"track": {
"b": 301,
"c": 1803,
"e": 10,
"f": -1,
"w1": 3011,
"w2": 18031,
"z1": [
{
"a": "2015-05-13 14:47",
"b": null,
"c": "",
"d": "",
"z": "电子信息已收到"
}
],
"z2": [
{
"a": "2015-05-31 00:00",
"b": null,
"c": "",
"d": "",
"z": "Distribué ANDORRE LA VIEILLE (09)."
}
],
"z9": [],
"ygt1": 370,
"ygt2": 0,
"ygt9": 0,
"is1": 1,
"is2": 0,
"ln1": "zh-CHS",
"ln2": null,
"ln9": null,
"hs": 627236210,
"z0": {
"a": "2015-05-29 09:00",
"b": null,
"c": "BLAGOVESCH 1",
"d": "",
"z": "移交海关"
},
"ylt1": "2015-06-01 20:44:52",
"ylt2": "2079-01-01 00:00:00",
"ylt9": "2079-01-01 00:00:00",
"yt": "",
"zex": {
"trN": "",
"trC": 0
}
}
}
]
}
}
响应结果说明:
Name | Description |
---|---|
code | 错误状态码。 |
data | 请求对应的响应数据。 |
-accepted | 正常接受并处理的集合,同时返回对应的运输商代码。 |
--number | 跟踪单号。 |
--tag | 自定义注册标识。 |
--track | 跟踪信息。 |
-rejected | 拒绝提供跟踪信息的集合,具体拒绝的单号和原因需检查对应的错误代码。 |
删除运单
- 用于删除已经注册成功的运单。
- POST /deleteTrack 请求数据示例:
[
{
"number": "RR123456789CN",
"carrier":3011
}
]
请求参数说明:
Name | Required Or Not | Type | Description |
---|---|---|---|
number | 是 | 字符串 | 跟踪单号,需满足单号格式要求。 |
carrier | 是 | 字符串 | 运输商代码。 |
响应结果示例:
{
"code":0,
"data":
{
"accepted":
[
{
"number":"621366941543",
"carrier":100271
}
],
"rejected":
[
]
}
}
响应结果说明:
Name | Description |
---|---|
code | 错误状态码。 |
data | 请求对应的响应数据。 |
-accepted | 对于请求中正常处理部分响应结果。 |
--number | 运单号。 |
--carrier | 运输商代码。 |
-rejected | 对于请求中处理异常部分响应结果。 |
--number | 运单号。 |
--carrier | 运输商代码。 |
手动推送
- POST /push
- 该接口每次可提交 40 个物流单号;
- 成功提交接口后对应物流单号会进入任务队列,由全局调度发起推送; 请求数据示例:
[
{
"number": "RR123456789CN",
"carrier":3011
}
]
请求参数说明:
名称 | 是否必须 |
类型 |
描述 |
---|---|---|---|
number | 是 | 字符串 | 物流单号。 |
carrier | 否 | 数值 | 运输商代码,不传的时候如果有多条相同单号的数据(运输商不同),则处理多条。 |
响应示例
{
"code": 0,
"data": {
"accepted": [
{
"number": "RR123456789CN",
"carrier": 3011
}
]
}
}
响应结果说明:
名称 | 类型 |
描述 |
---|---|---|
code | 数值 | 错误状态码。 |
data | 对象 | 请求对应的响应数据。 |
-accepted | 数组 | 正常接受并处理的请求。 |
-rejected | 数组 | 拒绝接受处理的请求,具体拒绝的单号和原因需检查对应的 错误状态码。 |
Webhook
设置
通过登录管理控制台->设置->WebHook设置回调接口Url,如果不设置,将不会进行通知;
通知策略:如果通知的Webhook URL返回http状态码200表示已被正常处理将不会进行重试,否则都会认为本次通知失败。通知失败后会依次尝试分别在其后的第10分钟、第30分钟、第60分钟后进行重试,如果仍然不能正常通知,将放弃对应单号当前的变更通知,但是不会影响其后续的变更通知;
数据及签名
当跟踪事件有更新或者根据策略不再对单号进行跟踪时时,系统会产生一个POST请求发送到你在设置页面设置的回调url上。推送数据格式统一采用如下格式:
{
"sign": "a829f039332706b9b888eba84b77bd01f425ed327d2c4a92b50bba5beb0a0260",
"event": "TRACKING_STOPPED",
"data": {
"number": "RM101474005CN",
"carrier":3011,
"tag":""
}
}
数据格式
Name | Description |
---|---|
sign | 数据签名。 |
event | 推送类型,目前暂时只提供;TRACKING_STOPPED:停止跟踪通知;TRACKING_UPDATED:跟踪信息更新通知,当跟踪的单号事件有变更时,会推送最新的跟踪信息。 |
data | 推送的数据,会根据event不同而不同。 |
签名验证
为了确保消息来源的身份是17TRACK推送的,最好对接收到的数据进行签名验证。验证时将event、data的值和API访问密钥通过右斜杠拼接event/data/secretkey,然后计算SHA256;如果计算出的结果和sign一致,则表示消息来源合法有效。
签名举例
- 推送通知的数据统一采用UTF-8编码的JSON数据格式,对接收到的原始数据(不需要进行任何格式化、空格和换行等处理)进行解析,比如收到的数据是:
{ "sign":"a829f039332706b9b888eba84b77bd01f425ed327d2c4a92b50bba5beb0a0260", "event":"TRACKING_STOPPED", "data":{ "number":"RM101474005CN", "carrier":3011 } }
- 则解析结果为:
"event": `TRACKING_STOPPED` "data": {"number":"RM101474005CN","carrier":3011,"tag":""}
- 如果secretkey为 6A8D7CFC3F7A41149E0A4EE8ABD0DD8A,则待签名的数据为:
TRACKING_STOPPED/{"number":"RM101474005CN","carrier":3011,"tag":""}/6A8D7CFC3F7A41149E0A4EE8ABD0DD8A
- 将此数据经过SHA256并采用十六进制编码,如果计算的结果和sign一致,则表示数据合法有效。
通知类型
停止跟踪通知
{
"sign": "a829f039332706b9b888eba84b77bd01f425ed327d2c4a92b50bba5beb0a0260",
"event": "TRACKING_STOPPED",
"data": {
"number": "RM101474005CN",
"carrier": 3011,
"tag":""
}
}
Name | Description |
---|---|
sign | 数据签名。 |
event | TRACKING_STOPPED |
data | 停止跟踪的单号。 |
事件更新通知
{
"sign": "34f40c8fc37f9a7100c65215b0df85c58cc4880cf2e832fe91c86de1bc00b181",
"event": "TRACKING_UPDATED",
"data": {
"number": "STOAA0000272952YQ",
"tag": "",
"track": {
"b": 301,
"c": 2105,
"e": 10,
"f": -1,
"w1": 190316,
"w2": 0,
"is1": 1,
"is2": 0,
"hs": 730243286,
"ln1": "en",
"ln2": null,
"ln9": "en",
"ygt1": 366,
"ygt2": 0,
"ygt9": 423,
"ylt1": "2020-05-11 12:05:58",
"ylt2": "2079-01-01 00:00:00",
"ylt9": "2020-05-11 12:05:58",
"yt": "",
"z0": {
"a": "2020-05-07 10:19",
"b": null,
"c": "",
"d": "BLOOMINGTON, CA 92316",
"z": "Departed Shipping Partner Facility, USPS Awaiting Item -> Your item departed a shipping partner facility at 10:19 am on May 7, 2020 in BLOOMINGTON, CA 92316. This does not indicate receipt by the USPS or the actual mailing date."
},
"z1": [
{
"a": "2020-05-07 10:19",
"b": null,
"c": "",
"d": "BLOOMINGTON, CA 92316",
"z": "Departed Shipping Partner Facility, USPS Awaiting Item -> Your item departed a shipping partner facility at 10:19 am on May 7, 2020 in BLOOMINGTON, CA 92316. This does not indicate receipt by the USPS or the actual mailing date."
},
{
"a": "2020-05-05 16:49",
"b": null,
"c": "",
"d": "BLOOMINGTON, CA 92316",
"z": "Arrived Shipping Partner Facility, USPS Awaiting Item"
},
{
"a": "2020-04-12 21:16",
"b": null,
"c": "",
"d": "FREMONT, CA 94538",
"z": "Picked Up by Shipping Partner, USPS Awaiting Item"
}
],
"z2": [],
"z9": [
{
"a": "2020-04-13 17:07",
"b": null,
"c": "China, Shenzhen",
"d": "",
"z": "Item inbound in sorting center."
},
{
"a": "2020-04-13 17:02",
"b": null,
"c": "China, Shenzhen",
"d": "",
"z": "Item accepted."
}
],
"zex": {
"trN": "92612927005099010009150135",
"trC": 21051
}
}
}
}
Name | Description |
---|---|
sign | 数据签名。 |
event | TRACKING_UPDATED |
data | 单号的跟踪详情。 |