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 相关文章推荐
PHP4之真OO
Oct 09 PHP
非常不错的MySQL优化的8条经验
Mar 24 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 PHP
php使用curl存储cookie的示例
Mar 31 PHP
PHP基于数组实现的分页函数实例
Aug 20 PHP
php绘制一条弧线的方法
Jan 24 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
PHP的全局错误处理详解
Apr 25 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
Apr 26 PHP
PHP实现通过二维数组键值获取一维键名操作示例
Oct 11 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 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 常用字符串函数总结
2008/03/15 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
JavaScript 高效运行代码分析
2010/03/18 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
2013/04/28 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
python 实时遍历日志文件
2016/04/12 Python
详解python的数字类型变量与其方法
2016/11/20 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
python模拟斗地主发牌
2020/04/22 Python
python怎么判断素数
2020/07/01 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
澳大利亚家具商店:Freedom
2020/12/17 全球购物
铁路安全事故反思
2014/04/26 职场文书
检讨书1000字
2014/10/11 职场文书
2015年社区工作总结
2015/04/08 职场文书
放飞理想主题班会
2015/08/14 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL