编程 快递100 订阅推送接入:salt 传空串也要验签,回调不返回 200 就重试三次后丢弃

2026-11-14 20:00:59

快递100 订阅推送对接笔记:param 字段、返回码与 md5(param+salt) 验签

对接快递100 的快递信息订阅推送,链路分三段:订阅接口提交单号 → 快递100 跟踪运单 → 状态变化时回调你方接口,直到单号生命周期结束(一般以“已签收”为准)。

订阅请求地址:https://poll.kuaidi100.com/poll,POST,Content-Type: application/x-www-form-urlencoded。

订阅请求参数

body 只有两个顶层字段:schema(json 默认 / xml)和 param(JSON 字符串)。

param 内字段:

字段必填说明
company是快递公司编码,一律小写,严格对齐编码表,如 yuantong、zhongtong、ems
number是单号 6–32 字符,允许 -,其他字符会导致订阅失败
from / to否中文省市区。填了有助于签收状态判断,to 还影响到达目的地后的监控频率;resultv2=8(时效预测)时 to 必填
key是授权码,企业版获取
parameters.callbackurl是回调地址,默认仅支持 http,需要 https 需联系快递100 技术人员处理
parameters.salt否签名用随机字符串,不能含空格和不可见字符;建议同一单重复订阅时保持一致,否则前后签名对不上
parameters.resultv2否空=关闭;1=行政区域解析+轨迹状态名称;4=在 1 基础上加高级状态名称/状态值/出发目的当前城市;8=在 4 基础上加预计到达时间和预计轨迹
parameters.autoCom否1 开启智能判断单号所属公司,开启后 company 必须留空
parameters.interCom否1 走国际版,仅邮政体系国际单、EMS 等
parameters.phone否收发件人手机号,顺丰速运、顺丰快运、中通快递必填;电商虚拟号取 - 后四位
departureCountry / departureCom / destinationCountry / destinationCom否国际版使用

一次请求只能提交一个单号。单量大时适度并发,尽量不要集中提交。

订阅返回与返回码

{"result": true, "returnCode": "200", "message": "提交成功"}

返回码含义:

  • 200 提交成功。
  • 500 服务器错误。服务器间隙或临时异常;参数不规范(如快递公司写错)也会报这个。
  • 501 重复订阅。该单已订阅成功且仍在跟踪中,要等 status=abort 或 shutdown 后隔半小时再提交。
  • 502 提交内容含敏感关键字被安全防护拦截(回调地址或内容含敏感词)。
  • 600 不是合法订阅者:授权 Key 出错,或账号无可用单量。
  • 601 KEY 已过期,需充值。
  • 700 不支持的快递公司,编码有误。
  • 701 订阅数据有错误(不支持的快递公司、单号为空、超长)或回调地址错误。
  • 702 识别不到单号对应快递公司(编码错或无可用单量)。

同一快递公司同一单号每月最大订阅 4 次,超过会报重复订阅;40 天内重复订阅不重复收费。

推送请求(打到你的 callbackurl)

同样是 POST form,只有两个字段:sign 和 param。

param 中的字段:

  • status:监控状态,polling 监控中 / shutdown 结束(已签收)/ abort 中止 / updateall 重新推送。
  • billstatus:已弃用,忽略。
  • message:监控状态相关消息,如“3天查询无记录”“60天无变化”。顺丰、中通手机号传错会通过此字段返回异常。
  • autoCheck:0 表示推送信息对应你提交的原始公司编码,1 表示对应快递100 纠正后的编码。
  • comOld / comNew:原始编码 / 纠正后编码。
  • lastResult:message、state、status、condition、ischeck、com、nu、data[]、routeInfo、isLoop。
  • state:0 在途、1 揽收、2 疑难、3 签收、4 退签、5 派件、8 清关、14 拒签。
  • ischeck:0 未签收、1 已签收。
  • data[] 元素含 context / ftime / time / status / statusCode / areaCode / areaName / areaCenter / location / areaPinYin。
  • routeInfo 含 from / cur / to。
  • resultv2=8 时额外有 arrivalTime、totalTime、remainTime、predictedRoute。

签名规则:salt 不为 null 时推送带 sign,算法为 md5(param + salt),结果转 32 位大写;salt 为空串时推送同样会带 sign,不验会报签名错误。

下面是依据文档签名规则写的 PHP 回调验签示例,未在生产环境实测:

true, 'returnCode' => '200', 'message' => '成功']);

Go 侧验签片段,同样未在生产环境实测:

// 依据文档签名规则编写,未在生产环境实测
func verifySign(param, salt, sign string) bool {
sum := md5.Sum([]byte(param + salt))
expect := strings.ToUpper(hex.EncodeToString(sum[:]))
return subtle.ConstantTimeCompare([]byte(expect), []byte(sign)) == 1
}

回调应答

必须返回:

{"result": true, "returnCode": "200", "message": "成功"}

xml 模式下对应:


true200成功

先把数据落库再应答,其他字段会被忽略。

如果提交回调地址失败,30 分钟后重新回调,3 次仍失败自动放弃这次更新推送,等下一次状态更新再推。status=abort(3 天查询无记录 / 60 天无变化)这类推送也必须返回成功应答,否则同样会重试。

跟踪节奏与超时

订阅成功后一般 15 分钟内做第一次监控,有跟踪信息就推送;之后一般每 2–4 小时监控一次,并按单号状态调整。查询集中在早 8 点到晚 22 点,凌晨的变化在 7–8 点统一同步。

连续 3 天查不到跟踪信息:先判断公司编码是否正确。

  • 编码正确:推 autoCheck=0、comOld/comNew 为空、message="3天查询无记录"、status=abort,此时重新提交订阅。
  • 编码错误:快递100 用正确编码 + 原单号重新订阅监控,并推 status=abort、autoCheck=0、comNew=正确编码。此时不要再重订,改公司编码,或新增一条 comNew + 原单号的运单。之后若收到 status=polling 且 autoCheck=1,这条是纠正后的跟踪信息,应保存。

有轨迹后某节点起连续 10 天无变化,查询频率降为每天一次,直到第 60 天推 status=abort、message 含“60天”,之后停止跟踪。

常见问题

  1. 验证签名失败:sign 不是 md5(param+salt) 的大写,或者 salt 与订阅时不一致(salt 为空串时也要按空串算)。
  2. 重复订阅 501:单还在 polling,一单只需订阅一次。
  3. 非法 IP:回调地址或调用来源不在白名单内。
  4. 收不到推送:先看管理后台订阅是否成功;账号是否因刷单被关闭;单号本身 3 天无揽收会被“超时关闭”,需按 abort 重订(40 天内不重复收费)。
  5. HTTP_CLIENT_ERROR: Received fatal alert: protocol_version:对方 TLS 版本过低,回调地址需升级 TLS。
  6. 回调地址变更:变更后要重新订阅才会推到新地址。
  7. 重开、重推、关闭:管理后台可对订阅记录操作,重推用于补发历史推送。
  8. 快递100 回调会拦截部分敏感字段,自定义参数建议放在 callbackurl 的 query 里。

文档与 SDK

  • 接口文档:https://api.kuaidi100.com/document/60509440a62a19500e1987b7
  • Java Demo(含 Subscribe 与回调参考实现):https://github.com/kuaidi100-api/java-demo

快递公司编码表、API 调试工具在文档中心。

复制全文 生成海报 快递100 物流 接口对接 PHP Go

推荐文章

程序员茄子在线接单