快递鸟的接口对接其实很简单,先去官网注册账号,登陆把基本信息填好,然后在产品管理中订购一下“物流查询”,免费,不过其他产品是收费,免费的有对接口调用频率限制,结合自己的应用流量够用就可以。

使用前复制一下账号下的用户ID和API key,并且快递鸟对各个API提供了各种语言的demo,其实下载下来,找一下平时寄快递的运单号,本地运行一下就能用了。(名称: KdApiSearchDemo)

其实拿到demo代码,可以放到项目中,因为demo是以面向过程写的,所以为了方便自然就想封装一下。

<?php

namespace data\extend;

use data\service\Config;

/**

 * 快递鸟即时查询接口

 * @author Administrator

 *

 */

class Kdniao{

    private $ebusinessid;//商户ID

    private $appkey;     //商户秘钥

    private $request_type;//请求类型

    private $request_url; //请求URL

    /**

     * 构造函数

    */

    public function __construct($shop_id){

        $config=new Config();

        $express_config=$config->getOrderExpressMessageConfig($shop_id);

        $is_use=$express_config['is_use'];

        if($is_use==0){

            $this->ebusinessid = 'niushop';

            $this->appkey = 'niushop';

        }else{

            $this->ebusinessid = $express_config["value"]["appid"];

            $this->appkey = $express_config["value"]["appkey"];

        }

        $this->request_type = 1002;

        $this->request_url = 'http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx';

    }

    

    

    //---------------------------------------------

    /**

     * Json方式 查询订单物流轨迹

     */

    public function getOrderTracesByJson($requestData){

        //$requestData= "{'OrderCode':'','ShipperCode':'YTO','LogisticCode':'12345678'}";

        $datas = array(

            'EBusinessID' => $this->ebusinessid,

            'RequestType' => $this->request_type,

            'RequestData' => urlencode($requestData) ,

            'DataType' => '2',

        );

        $datas['DataSign'] = $this->encrypt($requestData, $this->appkey);

        $result=$this->sendPost($this->request_url, $datas);

        //根据公司业务处理返回的信息......

        return $result;

    }

    

    /**

     *  post提交数据

     * @param  string $url 请求Url

     * @param  array $datas 提交的数据

     * @return url响应返回的html

     */

    public 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;

    }

    

    /**

     * 电商Sign签名生成

     * @param data 内容

     * @param appkey Appkey

     * @return DataSign签名

     */

    public function encrypt($data, $appkey) {

        return urlencode(base64_encode(md5($data.$appkey)));

    }

}

但是运行起来就一直报错

demo中提供的请求快递鸟API是使用的fsockopen函数,该函数是PHP较高版本(5.0以上)中功能比较强大的,通过一个URL和PORT请求返回一个文件指针,后面的就可以通过文件操作函数获取返回结果。

看到这个报错,确认了我当前使用的PHP版本,然后去php.ini配置文件查看allow_url_fopen 是开的(ON),扩展包也是去掉注释的,禁用函数中也没有fsockopen。

最好我选择把接口请求写成函数,竟然就有效了,最后的总结出来的是,fscockopen函数放在php类里面不起效果,要放在函数中使用,实例如下:

解决在TP5中无法使用快递鸟的即时查询API的更多相关文章

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

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

  2. 快递鸟电子面单API对接方法?

    之前说了一下快递公司.菜鸟和快递鸟的电子面单接口,很多人不知道快递鸟要怎么对接,现在为大家讲解一下.快递鸟是全球物流接口服务商,为电商 ERP.电商平台.仓储.清关公司提供物流跟踪.电子面单.智选物流 ...

  3. 电商平台如何接入快递鸟电子面单API?

    快递鸟是全球物流接口服务商,为电商 ERP.电商平台.仓储.清关公司提供物流跟踪.电子面单.智选物流.物流金融.在线下单等服务,解决电商的物流管理模块和金融模块.现就对快递鸟电子面单API做基本描述, ...

  4. 快递鸟顺丰物流api接口对接多种方法整理

    目前很多自营电商平台.ERP系统.仓储系统.快递柜企业,对物流模块数据需求还是比较旺盛的.之前有介绍过简单的接口对接方法,这次给大家整理介绍两种快递数据的获取方法. 接口秘钥可以向顺丰公司申请,或者一 ...

  5. 解决在IDEA中无法使用Scanner输入的问题

    今天写了一段代码用来测试输入,发现不管怎么样搜无法输入数据,代码如下: @Testpublic void func01(){ Scanner scanner = new Scanner(System. ...

  6. 解决在SQLPLUS中无法使用方向键、退格键问题

    1. wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/E ...

  7. 物流一站式单号查询之快递鸟API接口(附Demo源码)

    连载篇提前看 物流一站式单号查询之快递鸟API接口 物流一站式查询之TrackingMore篇 物流一站式查询之顺丰接口篇 物流一站式查询之快递100 前情提要 前三篇中,我们已经从注册.申请接口.调 ...

  8. 【PHP】快递鸟 物流查询接口实现

    官方网址: http://www.kdniao.com 即时查询api: http://www.kdniao.com/api-track 需要登录 ,申请一下 用户ID 和 API key 代码实现: ...

  9. 快递鸟电子面单打印功能基于java

    之前的后天管理系统的电子面单打印使用的是灵通打单. 使用相对比较麻烦,需要到处Excel之后再导入,麻烦. 快递鸟有电子面单api,后台系统直接对接很是方便,不过也遇到了好些问题. 不难是不难,但是遇 ...

随机推荐

  1. 从字节码看java中 this 的隐式传参

    从字节码看java中 this 隐式传参具体体现(和python中的self如出一辙,但是比python中藏得更深),也发现了 static 与 非 static 方法的区别所在! static与非s ...

  2. vmdk多文件合成单文件并导入

    如果创建时,目录中有多个vmdk文件,可以将其合成一个,方便导到其他地方运行,如图所示 win下cmd命令,找到安装vmware目录,合并的命令如下 vmware-vdiskmanager.exe - ...

  3. tensorflow 1.0 学习:卷积层

    在tf1.0中,对卷积层重新进行了封装,比原来版本的卷积层有了很大的简化. 一.旧版本(1.0以下)的卷积函数:tf.nn.conv2d conv2d( input, filter, strides, ...

  4. 【原】gulp工作中的实战

    写这篇文章的目的是为了以后的项目中懒得再去配gulp,直接可以拿这篇博客中的来用,因为有时候配置还是挺烦人的. gulp相关插件的介绍 用法比较简单,假设大家都会用gulp,下面主要介绍一下一些插件的 ...

  5. Unity3D热更新之LuaFramework篇[03]--prefab加载和Button事件

    在上一篇文章 Unity3D热更新之LuaFramework篇[02]--用Lua创建自己的面板 中,我介绍了LuaFramework加载面板的方法,但这个方法并不适用于其它Prefab资源,在这套框 ...

  6. 【干货】利用MVC5+EF6搭建博客系统(四)(下)前后台布局实现、发布博客以及展示

    二.博客系统后台布局实现 2.1.这里所用的是MVC的布局页来实现的,后台主要分为三部分:导航.菜单.主要内容 代码实现: 这里把后台单独放在一个区域里面,所以我这里建立一个admin的区域 在布局页 ...

  7. SpringCloud入门之YAML格式文件规范学习

    1. 认识 YAML YAML(发音 /ˈjæməl/)是一个类似 XML.JSON 的数据序列化语言.其强调以数据为中心,旨在方便人类使用:并且适用于日常常见任务的现代编程语言.因而 YAML 本身 ...

  8. 如何做活动页面的滚动动画?让用户体验MAX的demo在这里!

    本文由云+社区发表 最近的一个活动页面需要做一个可以左右滑动的抽签效果,故通过用css的transform属性和js结合来模拟可以无限滚动的效果. 先上效果: demo地址:https://kiror ...

  9. 机器学习中数据清洗&预处理

    数据预处理是建立机器学习模型的第一步,对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理,那么你的模型很可能也不会有效 第一步,导入数据 进行学习的第一步,我们需要将数据导入程序以进行下 ...

  10. 全面认识golang string

    string我们每天都在使用,可是对于string的细节问题你真的了解吗? 今天我们先以一个问题开篇. 你能猜到下面代码的输出吗? package main import ( "fmt&qu ...