物流接口实现方法
一、通过百度API查询物流信息
百度提供了免费的物流查询接口,可以通过以下URL格式进行查询:
https://sp0.baidu.com/9_Q4sjW91Qh3otqbppnN2DJv/pae/channel/data/asyncqury?cb=jQuery110208172749384481603_1456294051449&appid=4001&com=物流公司名称Ν=物流号&vcode=&token=&_=1456294051453参数说明:
- cb: jQuery回调函数名(可自定义)
- appid: 应用ID,固定为4001
- com: 物流公司编码(如:jd、shentong、yuantong等)
- nu: 物流单号
- vcode: 验证码(可为空)
- token: 令牌(可为空)
- _: 时间戳参数
使用示例:
1. 查询京东快递(单号:12148326312)
https://sp0.baidu.com/9_Q4sjW91Qh3otqbppnN2DJv/pae/channel/data/asyncqury?cb=jQuery110208172749384481603_1456294051449&appid=4001&com=jd&nu=12148326312&vcode=&token=&_=14562940514532. 查询申通快递(单号:3304810729274)
https://sp0.baidu.com/9_Q4sjW91Qh3otqbppnN2DJv/pae/channel/data/asyncqury?cb=jQuery110208172749384481603_1456294051449&appid=4001&com=shentong&nu=3304810729274&vcode=&token=&_=1456294051453二、通过快递100自动识别物流公司
如果不知道物流单号属于哪家公司,可以使用快递100的自动识别接口:
http://www.kuaidi100.com/autonumber/auto?num={物流单号}三、PHP实现代码
1. 自动获取物流公司名称
private function expressname($order){ $name = json_decode($this->getcontent("http://www.kuaidi100.com/autonumber/auto?num={$order}"), true); $result = $name[0]['comCode']; if (empty($result)) { return false; } else { return $result; }}2. 完整查询流程
// 1. 先通过快递100获取物流公司编码$expressCode = $this->expressname($expressNumber);// 2. 使用百度API查询物流详情$url = "https://sp0.baidu.com/9_Q4sjW91Qh3otqbppnN2DJv/pae/channel/data/asyncqury";$params = [ 'appid' => '4001', 'com' => $expressCode, 'nu' => $expressNumber, 'vcode' => '', 'token' => '', '_' => time() . rand(100, 999)];// 发送请求并处理返回的JSON数据$response = $this->getcontent($url . '?' . http_build_query($params));四、常用快递公司编码对照表
| 公司名称 | 编码 | 公司名称 | 编码 |
|---|---|---|---|
| 申通快递 | shentong | 圆通速递 | yuantong |
| 中通快递 | zhongtong | 韵达快递 | yunda |
| 顺丰速运 | shunfeng | 京东快递 | jd |
| 百世快递 | huitongkuaidi | 邮政包裹 | youzhengguonei |
| EMS | ems | 极兔速递 | jtexpress |
| 德邦快递 | debangkuaidi | 天天快递 | tiantian |
五、注意事项
- 百度API返回的是JSONP格式数据,需要处理回调函数
- 请求时需要设置合适的User-Agent头,避免被屏蔽
- 建议添加缓存机制,避免重复请求
- 该接口为百度公开接口,可能会随时调整,请关注更新

发表评论 取消回复