<?php
/**
* Created by PhpStorm.
* User: Yang
* Date: 2019/8/23
* Time: 10:38
*/ class Kuaidi_Query
{
private $_query_url = 'http://poll.kuaidi100.com/poll/query.do'; //实时查询请求地址
// private $_url = 'http://www.kuaidi100.com/autonumber/auto?num=906919164534&key=IobfFnLz2751'; //实时查询请求地址
private $_auto_url = 'http://www.kuaidi100.com/autonumber/auto'; //实时查询请求地址
private $_key = "";
private $_customer = "";
private $_params = array(); public function __construct($num, $com = '', $phone = '', $from = '', $to = '', $resultv2 = 1)
{
if (empty($com)) {
//归属公司智能判断
$com = $this->check($num);
}
$params = array(
'com' => $com, //快递公司编码
'num' => $num, //快递单号
'phone' => $phone, //手机号
'from' => $from, //出发地城市
'to' => $to, //目的地城市
'resultv2' => $resultv2 //开启行政区域解析
);
$this->_params = $params;
} /**
* 单号归属公司智能判断接口
* @param $num
* @return mixed
*/
public function check($num)
{
$url = $this->_auto_url."?num=".$num."&key=".$this->_key;
$data = $this->get_curl($url);
$data_array = json_decode($data, true);
return $data_array[0]['comCode'];
} /**
* 执行快递查询接口
* @return mixed
*/
public function Query()
{
$post_data = array();
$post_data["customer"] = $this->_customer;
$post_data["param"] = json_encode($this->_params);
$sign = md5($post_data["param"] . $this->_key . $post_data["customer"]);
$post_data["sign"] = strtoupper($sign);
$params = "";
foreach ($post_data as $k => $v) {
$params .= "$k=" . urlencode($v) . "&"; //默认UTF-8编码格式
}
$post_data = substr($params, 0, -1);
$query_data = $this->post_curl($this->_query_url, $post_data);
return $query_data;
} /**
* get 请求
* @param $url
* @return mixed
*/
public function get_curl($url) {
$ch = curl_init();//初始化
curl_setopt($ch, CURLOPT_URL, $url);//访问的URL
curl_setopt($ch, CURLOPT_HEADER, false);//设置不需要头信息
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//只获取页面内容,但不输出
$result = curl_exec($ch);//执行请求
curl_close($ch);//关闭curl,释放资源
$data = str_replace("\"", '"', $result);
return $result;
} /**
* post 请求
* @param $post_data
* @return mixed
*/
public function post_curl($url, $post_data)
{
//发送post请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$data = str_replace("\"", '"', $result);
$data = json_decode($data, true);
return $data;
}
}

使用方式:

<?php
/**
* Created by PhpStorm.
* User: Yang
* Date: 2019/8/23
* Time: 11:03
*/ include "../../Kuaidi_Query.php"; $k = new Kuaidi_Query(3950055201640);
$data = $k->Query();
if ($data['message'] == "ok") {
$list = $data['data'];
var_dump($list);
}else{
var_dump($data['message']);
}

结果展示:

array(11) {
[0]=>
array(6) {
["time"]=>
string(19) "2019-03-23 13:21:54"
["context"]=>
string(115) "【武汉市】 已签收 : 由董雨昂(金龙·四季阳光 )代签收,如有问题联系董雨昂(13147108459)"
["ftime"]=>
string(19) "2019-03-23 13:21:54"
["areaCode"]=>
NULL
["areaName"]=>
NULL
["status"]=>
string(6) "签收"
}
[1]=>
array(6) {
["time"]=>
string(19) "2019-03-23 09:13:51"
["context"]=>
string(106) "【武汉市】 湖北武汉黄陂区公司杨园分部 派件员 董雨昂(13147108459)正在为您派送"
["ftime"]=>
string(19) "2019-03-23 09:13:51"
["areaCode"]=>
string(14) "CN420116000000"
["areaName"]=>
string(26) "湖北,武汉市,黄陂区"
["status"]=>
string(6) "派件"
}
[2]=>
array(6) {
["time"]=>
string(19) "2019-03-23 06:55:27"
["context"]=>
string(113) "【武汉市】 已离开 湖北武汉黄陂区公司 发往 湖北武汉黄陂区公司杨园分部(15391528386)"
["ftime"]=>
string(19) "2019-03-23 06:55:27"
["areaCode"]=>
NULL
["areaName"]=>
NULL
["status"]=>
string(6) "在途"
}
[3]=>
array(6) {
["time"]=>
string(19) "2019-03-23 06:52:47"
["context"]=>
string(72) "【武汉市】 已到达 湖北武汉黄陂区公司 马上为您派送"
["ftime"]=>
string(19) "2019-03-23 06:52:47"
["areaCode"]=>
string(14) "CN420116000000"
["areaName"]=>
string(26) "湖北,武汉市,黄陂区"
["status"]=>
string(6) "派件"
}
[4]=>
array(6) {
["time"]=>
string(19) "2019-03-22 20:30:30"
["context"]=>
string(50) "【武汉市】 已到达 湖北武汉分拨中心"
["ftime"]=>
string(19) "2019-03-22 20:30:30"
["areaCode"]=>
string(14) "CN420100000000"
["areaName"]=>
string(16) "湖北,武汉市"
["status"]=>
string(6) "在途"
}
[5]=>
array(6) {
["time"]=>
string(19) "2019-03-22 20:30:27"
["context"]=>
string(85) "【武汉市】 已离开 湖北武汉分拨中心 发往 湖北武汉黄陂区公司"
["ftime"]=>
string(19) "2019-03-22 20:30:27"
["areaCode"]=>
NULL
["areaName"]=>
NULL
["status"]=>
string(6) "在途"
}
[6]=>
array(6) {
["time"]=>
string(19) "2019-03-22 20:15:30"
["context"]=>
string(50) "【武汉市】 已到达 湖北武汉分拨中心"
["ftime"]=>
string(19) "2019-03-22 20:15:30"
["areaCode"]=>
string(14) "CN420100000000"
["areaName"]=>
string(16) "湖北,武汉市"
["status"]=>
string(6) "在途"
}
[7]=>
array(6) {
["time"]=>
string(19) "2019-03-22 00:48:37"
["context"]=>
string(82) "【汕头市】 已离开 广东揭阳分拨中心 发往 湖北武汉分拨中心"
["ftime"]=>
string(19) "2019-03-22 00:48:37"
["areaCode"]=>
NULL
["areaName"]=>
NULL
["status"]=>
string(6) "在途"
}
[8]=>
array(6) {
["time"]=>
string(19) "2019-03-22 00:46:46"
["context"]=>
string(50) "【汕头市】 已到达 广东揭阳分拨中心"
["ftime"]=>
string(19) "2019-03-22 00:46:46"
["areaCode"]=>
string(14) "CN440500000000"
["areaName"]=>
string(16) "广东,汕头市"
["status"]=>
string(6) "在途"
}
[9]=>
array(6) {
["time"]=>
string(19) "2019-03-21 20:32:50"
["context"]=>
string(94) "【汕头市】 已离开 广东汕头潮阳区公司陈店分部 发往 湖北武汉网点包"
["ftime"]=>
string(19) "2019-03-21 20:32:50"
["areaCode"]=>
NULL
["areaName"]=>
NULL
["status"]=>
string(6) "在途"
}
[10]=>
array(6) {
["time"]=>
string(19) "2019-03-21 19:05:50"
["context"]=>
string(65) "【汕头市】 广东汕头潮阳区公司陈店分部 已揽收"
["ftime"]=>
string(19) "2019-03-21 19:05:50"
["areaCode"]=>
string(14) "CN440513000000"
["areaName"]=>
string(26) "广东,汕头市,潮阳区"
["status"]=>
string(6) "揽收"
}
}

PHP 之快递100接口封装的更多相关文章

  1. php利用快递100接口获取物流信息

    PHP使用CURL调用快递100接口查询运单信息 类代码如下: <?php/** * 快递100接口调用类 * @author 齐云海 * date: 2019/05/29 */ class E ...

  2. 在Asp.Net MVC中利用快递100接口实现订阅物流轨迹功能

    前言 分享一篇关于在电商系统中同步物流轨迹到本地服务器的文章,当前方案使用了快递100做为数据来源接口,这个接口是收费的,不过提供的功能还是非常强大的,有专门的售后维护团队.也有免费的方案,类似于快递 ...

  3. PHP最近做了物流快递查询的接口用得是快递100

    最近做了物流快递查询的接口用得是快递100的,分享下心得体会 主要使用了2种接口,一个是api的 返回json xml 各种数据的 一个是返回的URL的  就是一个带结果的网址  . 1  申请 找一 ...

  4. Delphi xe 10.3.2-快递接口封装-【快递鸟(即时查询和单号识别)】

    编译环境:Windows 7 +Delphi xe 10.3.2 封装了快递鸟接口,注意的坑:MD5要转为小写. function TKDniaoAPI.StrtoMd5(const str: str ...

  5. .netcore 写快递100的快递物流信息查询接口

    快递100的物流信息查询接口,官方提供了一些demo;还好官方提供的代码是.netcore版本写的,不过写的有点low;根据官方提供的代码,我按照.netcore 的风格重构了代码:核心代码如下: / ...

  6. java抓取快递100信息接口

    package zeze; import java.io.IOException; import org.json.JSONArray; import org.json.JSONException; ...

  7. 快速上手微信小程序-快递100

    2007 年 1 月 9 日,乔布斯在旧金山莫斯科尼会展中心发布了首款 iPhone,而在十年后的 1 月 9 日,微信小程序正式上线.张小龙以这样的形式,向乔布斯致敬. 小程序在哪里? 小程序功能模 ...

  8. Java微信公众平台接口封装源码分享

    前言:      这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验.今天看来,这些方法的应用还是可以的,至少实现了我之前的 ...

  9. C#快递跟踪(基于快递100深度定制)

    本文主要介绍快递跟踪的相关信息.如根据快递单号预测所属快递公司,判断快递是否已被签收,以及改良官方model后可在不用申请授权的情况下实现json,html,xml及text等多种格式以及单行多行,降 ...

随机推荐

  1. MySQL5.7.28免安装版配置

    下载 安装配置 问题及解决方案 一.下载 找到你要的版本点击“looking for the latest GA version?”切换,我这个安装的是5.7.28,然后往下拉: 找到免安装的压缩包: ...

  2. React中setState如何修改深层对象?

    在React中经常会使用到setState,因为在react生态中,state就是一切.在开发过程中,时长会在state中遇到一些比较复杂的数据结构,类似下面这样的: 这时需要我们修改list中obj ...

  3. iOS - 解决警告“ld: Warning: Directory Not Found for Option”

    有时候我们可能从项目中删除了某个目录.文件以后,编译出现警告信息: ld: warning: directory not found for option“XXXXXX” 具体类似下图: 很奇怪,为什 ...

  4. XML文件解析之JDOM解析

    1.JDOM介绍 JDOM的官方网站是http://www.jdom.org/,JDOM解析用到的jar包可以在http://www.jdom.org/dist/binary/中下载,最新的JDOM2 ...

  5. c#创建目录和文件夹,数据写入并生成txt文件

    c#创建目录: // 获取程序的基目录.System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径.System.Diagnostics.Pro ...

  6. Go语言—— Array,Slice,Map 和 Set

    转自:https://se77en.cc/ Array(数组) 内部机制 在 Go 语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也可以是结构类型 ...

  7. spark not serializable异常分析及解决方案

    转载自: http://bigdataer.net/?p=569 1.背景 在使用spark开发分布式数据计算作业过程中或多或少会遇到如下的错误: Serialization stack: objec ...

  8. Java集合--Stack

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3308852.html 第1部分 Stack介绍 Stack简介 Stack是栈.它的特性是:先进后出(F ...

  9. let和const的区别

    es6语法中新增了 let和const 不再只是有var 1. let的用法 let是用来声明变量的,它和var的用法差不多,但是let所声明的变量只在它的代码块内有效,像for循环里用let会更好点 ...

  10. Qt 把连续两次单击当成双击

    方法1: 主要通过计时器,在一段时间内的连续两次单击,触发双击事件 void init() { m_nClickCount = 0; m_timer = new QTimer(this); conne ...