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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
php中simplexml_load_string使用实例分享
Feb 13 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
简单谈谈 php 文件锁
Feb 19 PHP
PHP实现ASCII码与字符串相互转换的方法
Apr 29 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 PHP
Laravel开启跨域请求的方法
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分页示例代码
2007/03/19 PHP
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
Javascript Object.extend
2010/05/18 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
js日期联动示例
2014/05/02 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python 中文乱码问题深入分析
2011/03/13 Python
python查找第k小元素代码分享
2013/12/18 Python
python去掉字符串中重复字符的方法
2014/02/27 Python
python将ip地址转换成整数的方法
2015/03/17 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
python远程邮件控制电脑升级版
2019/05/23 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
大学秋游活动方案
2014/02/11 职场文书
培训协议书范本
2014/04/22 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
搞笑结婚保证书
2015/05/08 职场文书
python中的装饰器该如何使用
2021/06/18 Python
Python学习之时间包使用教程详解
2022/03/21 Python
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android