PHP使用第三方即时获取物流动态实例详解


Posted in PHP onApril 27, 2017

前言

最近做的项目有个要求,要使用物流单号即时查询物流信息,从网上得知,关于物流的第三方API还是很多的,而我选用的是快递鸟,快递鸟是一个免费的第三方接口,Api整合全球400余家物流快递接口,永久免费不限次,接口与快递公司多通道通信,可用性达到99.9%以上,推送速度定制配置,保证接入方系统的稳定。

使用过程

登录网站http://www.kdniao.com/首先要注册,注册完之后,在用户管理后台,有一个申请API选项,注意,申请API之前需要实名认证,认证完之后就可以申请API了,它的API接口还是很丰富的。

PHP使用第三方即时获取物流动态实例详解

因为我要是用的是即时查询,所以申请的就是即时查询的api。

api的使用流程图

PHP使用第三方即时获取物流动态实例详解

从流程图中可以看到

用户只要提供快递单号和快递公司

通过api得到物流状态,并把结果返回

我们拿到结果,进行实时处理显示。

API参数

PHP使用第三方即时获取物流动态实例详解 

PHP使用第三方即时获取物流动态实例详解

上面这些都是官方给出的关于API的参数,不过我们可以看官方的demo进行了解。官方的demo也是简单易懂的。我们可以把它再次封装。

封装API

使用API需要三个固定参数

1. 商户id

2. API key

3. 请求url,ReqURL

商户id和API key都可以在快递鸟网站的我的管理首页看到,而请求url就是

http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx,这个可以在接口文档中看到。

主方法

/**
 * @param $ShipperCode 快递公司编号
 * @param $order_sn 运单号
 */
public function getMessage($ShipperCode,$order_sn){
  $requestData= "{'OrderCode':'','ShipperCode':'".$ShipperCode."','LogisticCode':'".$order_sn."'}";
  $datas = array(
    'EBusinessID' => self::EBusinessID,
    'RequestType' => '1002',//接口指令1002,固定
    'RequestData' => urlencode($requestData) ,
    'DataType' => '2', //数据返回格式 2 json
  );
  //把$requestData进行加密处理
  $datas['DataSign'] = $this -> encrypt($requestData, self::AppKey);
  $result = $this -> sendPost( self::ReqURL, $datas);
  return $result;
}

这主方法中,传递进去的参数有两个,一个是快递公司编号,一个是物流订单号。

PHP使用第三方即时获取物流动态实例详解

我们还需要把$requestData进行加密处理,也就是encrypt方法。

/*
 * 进行加密
 */
function encrypt($data, $appkey) {
  return urlencode(base64_encode(md5($data.$appkey)));
}

加密过后就直接通过ReqURL进行访问,返回的数据就是物流信息。

PHP使用第三方即时获取物流动态实例详解

源代码

<?php
/**
 * 使用快递鸟api进行查询
 * User: Administrator
 * Date: 2017/4/22 0022
 * Time: 09:09
 */
class KuaidiController{
  const EBusinessID = 1285564;
  const AppKey = '264ff9e0-2f4c-48d5-877f-1e0670400d18';
  const ReqURL = "http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx";
  /**
   * @param $ShipperCode 快递公司编号
   * @param $order_sn 运单号
   */
  public function getMessage($ShipperCode,$order_sn){
    $requestData= "{'OrderCode':'','ShipperCode':'".$ShipperCode."','LogisticCode':'".$order_sn."'}";
    $datas = array(
      'EBusinessID' => self::EBusinessID,
      'RequestType' => '1002',//接口指令1002,固定
      'RequestData' => urlencode($requestData) ,
      'DataType' => '2', //数据返回格式 2 json
    );
    //把$requestData进行加密处理
    $datas['DataSign'] = $this -> encrypt($requestData, self::AppKey);
    $result = $this -> sendPost( self::ReqURL, $datas);
    return $result;
  }
  /**
   * post提交数据
   * @param string $url 请求Url
   * @param array $datas 提交的数据
   * @return url响应返回的html
   */
  function sendPost($url, $datas) {
    $temps = array();
    foreach ($datas as $key => $value) {
      $temps[] = sprintf('%s=%s', $key, $value);
    }
    $post_data = implode('&', $temps);
    $url_info = parse_url($url);
    if(empty($url_info['port']))
    {
      $url_info['port']=80;
    }
    $httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";
    $httpheader.= "Host:" . $url_info['host'] . "\r\n";
    $httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n";
    $httpheader.= "Content-Length:" . strlen($post_data) . "\r\n";
    $httpheader.= "Connection:close\r\n\r\n";
    $httpheader.= $post_data;
    $fd = fsockopen($url_info['host'], $url_info['port']);
    fwrite($fd, $httpheader);
    $gets = "";
    $headerFlag = true;
    while (!feof($fd)) {
      if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) {
        break;
      }
    }
    while (!feof($fd)) {
      $gets.= fread($fd, 128);
    }
    fclose($fd);
    return $gets;
  }
  /*
   * 进行加密
   */
  function encrypt($data, $appkey) {
    return urlencode(base64_encode(md5($data.$appkey)));
  }
}
$model = new KuaidiController();
$res = $model -> getMessage('ZTO','12345678');
echo "<pre>";
var_dump($res);

以上所述是小编给大家介绍的PHP使用第三方即时获取物流动态,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
如何过滤高亮显示非法字符
Oct 09 PHP
PHP伪静态写法附代码
Jun 20 PHP
PHP开发中的错误收集,不定期更新。
Feb 03 PHP
解析PHP工厂模式的好处
Jun 18 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
Dec 24 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
yii2使用gridView实现下拉列表筛选数据
Apr 10 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 #PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 #PHP
PHP基于简单递归函数求一个数阶乘的方法示例
Apr 26 #PHP
php编程实现简单的网页版计算器功能示例
Apr 26 #PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 #PHP
PHP中时间加减函数strtotime用法分析
Apr 26 #PHP
yii2中dropDownList实现二级和三级联动写法
Apr 26 #PHP
You might like
php中文本数据翻页(留言本翻页)
2006/10/09 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
Python深入学习之装饰器
2014/08/31 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
Python 数据库操作 SQLAlchemy的示例代码
2019/02/18 Python
Hotels.com南非:酒店预订
2017/11/02 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
党员批评与自我批评
2014/02/12 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
公司任命书范本
2014/06/04 职场文书
教室布置标语
2014/06/26 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
中职毕业生自我鉴定
2014/09/13 职场文书
装配出错检讨书
2014/09/23 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
汽车转让协议书范本
2014/12/07 职场文书