通过登录管理控制台->设置->访问密钥获取;如果需要更换密钥,可以直接操作“更换密钥”,更换后的新密钥生效时间会有最长5分钟的延迟,新的密钥生效后,旧的密钥立即失效。
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 | 对于请求中处理异常部分响应结果 |
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 | 请求超过额度。 |
-18010015 | 字段 {1} 的值 {0} 无效。 |
-18010016 | 只有邮政物流才可以设置尾程渠道。 |
-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://www.17track.net/zh-cn/apicarrier 获取当前支持的所有可用运输商,由于我们在持续增加更多的运输商,所以请定期更新。使用到运输商代码的相关的接口均使用我们自己定义的运输商信息中的编码“Key”来进行提交。
通过访问 https://www.17track.net/zh-cn/apicountry 获取最新的国家地区编码,在查询跟踪信息或者收到推送信息后需要通过该编码表查询发件国家地区和目的国家地区编码所对应实际国家地区。
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 |
dtS | 上网时间,时间单位:Unix时间戳,毫秒 |
dtP | 第一次试投时间,时间单位:Unix时间戳,毫秒 |
dtD | 妥投时间,时间单位:Unix时间戳,毫秒 |
dtL | 最后事件时间,时间单位:Unix时间戳,毫秒 |
dt | (暂未使用) |
psex | (暂未使用) |
Name | Description |
---|---|
a | 事件时间(可能不是有效的时间格式数据,需要按字符串处理) |
b | 地理位置坐标(暂未使用) |
c | 事件发生地点 |
d | 事件发生地点扩展(暂未使用) |
z | 事件内容描述 |
所有接口请求的跟踪单号都需要先通过register接口进行注册;
所有接口请求限制频率为3req/s,后续可能会根据实际情况进行调整;
相同的跟踪单号和运输商多次提交只算一个额度,到期删除后再提交会再重新计算额度;
系统将自动停止跟踪连续30日无事件更新或者签收后15日无事件更新的单号;
系统对于停止跟踪的单号会继续保留90天,到期后会物理删除对应的数据;
对停止跟踪的单号有一次机会可以重新激活继续进行跟踪;
该接口每次可提交注册40个跟踪单号
POST /register
请求数据示例:
[ { "number": "RR123456789CN", "carrier": 3011, "final_carrier":0, "auto_detection":false, "tag": "MyId" }, { "number": "1234" } ]
请求参数说明:
Name | Required Or Not | Type | Description |
---|---|---|---|
number | 是 | 字符串 | 跟踪单号,需满足单号格式要求 |
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": "LW503511611CN", "carrier":3011, "items": { "tag": "This is my order id." } }
请求参数说明:
Name | Required Or Not | Type | Description |
---|---|---|---|
number | 是 | 字符串 | 跟踪单号,需满足单号格式要求 |
carrier | 否 | 整数 | 运输商代码 |
items | 是 | 字典 | 需要修改的数据项目集合,目前暂时仅支持修改tag,提交的其他项目将被忽略 |
--tag | 否 | 字符串 | 自定义注册标识,最长100个字符 |
响应结果示例:
{ "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, "psex": 0, "dt": 1586726160000, "dtS": 1586726160000, "dtP": 0, "dtD": 0, "dtL": 1588846740000 } } } ] } }
响应结果说明:
Name | Description |
---|---|
code | 错误状态码 |
data | 请求对应的响应数据 |
-accepted | 正常接受并处理的集合,同时返回对应的运输商代码 |
--number | 跟踪单号 |
--tag | 自定义注册标识 |
--track | 跟踪信息 |
-rejected | 拒绝提供跟踪信息的集合,具体拒绝的单号和原因需检查对应的错误代码 |
通过登录管理控制台->设置->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, "psex": 0, "dt": 1586726160000, "dtS": 1586726160000, "dtP": 0, "dtD": 0, "dtL": 1588846740000 } } } }
Name | Description |
---|---|
sign | 数据签名 |
event | TRACKING_UPDATED |
data | 单号的跟踪详情 |