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 相关文章推荐
真正的ZIP文件操作类(php)
Jul 21 PHP
php REMOTE_ADDR之获取访客IP的代码
Apr 22 PHP
PHP开发不能违背的安全规则 过滤用户输入
May 01 PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 PHP
php使用百度ping服务代码实例
Jun 19 PHP
CodeIgniter实现更改view文件夹路径的方法
Jul 04 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
支持png透明图片的php生成缩略图类分享
Feb 08 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
php无限级分类实现方法分析
Oct 19 PHP
Mac系统完美安装PHP7详细教程
Jun 06 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 UTF8编码内的繁简转换类
2009/07/20 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
如何在PHP中使用数组
2020/06/09 PHP
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
使用vue构建多页面应用的示例
2020/10/22 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
Ubuntu下安装PyV8
2016/03/13 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
浅析python继承与多重继承
2018/09/13 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
Python列表切片常用操作实例解析
2020/03/10 Python
关于python 跨域处理方式详解
2020/03/28 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
房屋买卖协议书
2014/04/10 职场文书
党务公开方案
2014/05/06 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
文员岗位职责
2015/02/04 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
关于 Python json中load和loads区别
2021/11/07 Python