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 相关文章推荐
如何在HTML 中嵌入 PHP 代码
May 13 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
PHP不使用内置函数实现字符串转整型的方法示例
Jul 03 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
yii2 commands模式以及配置crontab定时任务的方法
Aug 19 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
Sep 30 PHP
PHP APP微信提现接口代码
Sep 30 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
Aug 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
pdo中使用参数化查询sql
2011/08/11 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python创建临时文件夹的方法
2015/07/06 Python
python制作websocket服务器实例分享
2016/11/20 Python
python实现SOM算法
2018/02/23 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
详解Python字符串切片
2019/05/20 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
用Python实现职工信息管理系统
2020/12/30 Python
美国在线奢侈品寄售商店:Luxury Garage Sale
2018/08/19 全球购物
开办加工厂创业计划书
2014/01/03 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
小学英语复习计划
2015/01/19 职场文书
功夫熊猫观后感
2015/06/10 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
创业计划之特色精品店
2019/08/12 职场文书
节约用水广告语60条
2019/11/14 职场文书