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

使用前复制一下账号下的用户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. join和+的区别

    连接字符串的时候可以用join也可以用+,但这两者有没有区别呢? 我们先来看一下用join和+连接字符串的例子 str1 = " ".join(["hello" ...

  2. numpy中函数shape的用法

    shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度.它的输入参数可以使一个整数表示维度,也可以是一个矩阵.这 ...

  3. Ubuntu18.04下配置Nginx+RTMP服务器,实现点播/直播/录制功能

    2019.3.22更新 最新的nginx-1.15.9可与openssl1.1.1兼容了 以下原文: 这个东西我眼馋挺久了,最近终于试玩了一下,感觉很好玩,在搭建的过程在也遇到一些坑,这里总结一下 安 ...

  4. 一看看懂Protocol Buffer(协议篇)

    前言 由于笔者业团队的业务对即时通讯服务有很大的依赖,春节结束后的第一天,红包没到,产品同学先到了,产品同学和我说要做一款IM,看到需求文档后和设计图后笔者大吃一斤 这不就是一个翻版的web qq吗? ...

  5. Vue-router导航问题

    现在的项目,用的是Vue,但当时用的时候,是边学边做的,上手确实比较简单,但是已经用Vue写了一个项目了,但是感觉对Vue的还是不是很深刻,用的都是比较简单的API, 现在回头看看,有些东西,非常的精 ...

  6. 全网最详细的最新稳定OSSEC搭建部署(ossec-server(CentOS6.X)和ossec-agent(CentOS6.X))(图文详解)

    不多说,直接上干货! 前言 写在前面的话,网上能够找到一些关于ossec方面的资料,虽然很少,但是总比没有强,不过在实际的使用过程中还是会碰到许多稀奇古怪的问题.整理整理我的使用过程,就当做一篇笔记吧 ...

  7. vue-06-过度和动画

    1, css过度与动画 需要使用 v-if, v-show 来进行 1), 过度类名 v-enter: 进入时触发 v-enter-active: 执行过程中 v-enter-to: 停止时进行 v- ...

  8. Leetcode 1-10

    这篇文章介绍Leetcode1到10题的解决思路和相关代码. 1. Two sum 问题描述:给定一个整数数组,返回两个数字的索引,使它们加起来等于一个特定的目标. 例子: Given nums = ...

  9. Tomcat8源码笔记(七)组件启动Server Service Engine Host启动

    一.Tomcat启动的入口 Tomcat初始化简单流程前面博客介绍了一遍,组件除了StandardHost都有博客,欢迎大家指文中错误.Tomcat启动类是Bootstrap,而启动容器启动入口位于 ...

  10. 5-15 bootcss 之 modal 以及 jquery ui 之datepicker 小记

    最近公司在用bootstrap和Jquery UI做项目,类似与OA的东西前两天碰到点问题,记录一下.希望读者不要在遇到和我一样的问题. 1 datepicker.不知道怎么自己下载的bootcss里 ...