解决在TP5中无法使用快递鸟的即时查询API

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

使用前复制一下账号下的用户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类里面不起效果,要放在函数中使用,实例如下:

原文地址:https://www.cnblogs.com/zerofc/p/10168002.html

时间: 2024-10-08 20:10:53

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

解决在IE8中无法使用原生JSON的问题

转自:http://www.iitshare.com/ie8-not-use-native-json.html 起因 在项目中要将页面上的js对象传给后台,想到可以用json转成字符串传递. 1 2 var obj = {"a":1 "b":2, "c":3}; var str = JSON.stringify(obj); 上述代码在firefox,chrome中测试都没问题,可是在ie8下确提示JSON Not Defined,google了一

电商ERP如何接入快递鸟电子面单API?

快递鸟是全球物流接口服务商,为电商 ERP.电商平台.仓储.清关公司提供物流跟踪.电子面单.智选物流.物流金融.在线下单等服务,解决电商的物流管理模块和金融模块.现就对快递鸟电子面单API做基本描述,并提供电子面单接口的对接方式. 一.接口介绍 快递鸟电子面单接口支持四通一达.顺丰.EMS.宅急送.德邦.优速等15家国内常用快递的面单打印.通过快递鸟接口在线打印电子运单,即时生成运单号,无需录单,提高发货效率,提升送达时效.打印速度提升 4-6 倍.省去录单环节.取消抽单环节.充当捡货单.提升送

java对接快递鸟单号查询自动识别接口,调用示例

应用场景 (1)PC端.移动端应用或网站应用集成运单物流信息查询功能时,只需要录入单号即可完成查询,无需用户输入快递公司.(2)电商网站要在快递鸟查询或者订阅运单时,可通过单号识别先行判断物流公司后,再订阅到快递鸟. API参数一.接口描述/说明(1)该接口仅对运单号做出识别,识别可能属于的一家或多家快递公司.(2)接口并不返回物流轨迹,用户可结合即时查询接口和订阅查询接口完成轨迹查询.订阅的动作.(3)接口识别会返回一家或者多家快递公司,返回的数据根据快递鸟大数据分析结果排序(4)若识别失败,

常用快递单号物流查询API接口通用对接指南(JAVA快递鸟对接)

快递查询接口通用API是给发货电商用来实现查询快递物流轨迹功能的,接口对接前要先到快递鸟网站申请接口秘钥和APIKEY 快递API的应用场景与用途 最常见的应用场景如下: (1)电商网站:例如B2C.团购.B2B.批发分销站.C2C.本地生活交易等网站. (2)管理系统:订单处理平台.订货平台.发货平台.分销系统.渠道管理系统.客户管理系统.ERP等. 快递API的用途如下: (1)让顾客登录网站后,直接在“我的订单”页面内就能看到订单的物流状态. (2)自动筛选出“已签收”.“疑难件”等状态的

免费顺丰快递单号查询电子面单api接口对接【快递鸟API】

顺丰速运快递查询接口API和电子面单接口怎么对接?除了通过顺丰自己的接口对接外,用的最多的就是第三方通过快递鸟对接了,通过顺丰单号和手机号后四位查询轨迹信息,如果是通过快递鸟下单获得的顺丰单号,可通过单号直接查询,具体下载快递鸟接口技术文档查看接口说明.ShipperCode为SF,且快递单号非快递鸟渠道返回时,必填,对应收件人/寄件人手机号后四位:ShipperCode为SF,且快递单号为快递鸟渠道返回时,不填. 一.接入前准备(TO商家业务人员) 1.申请快递鸟用户ID和API key1.1

快速实现常用快递单号查询api接口对接方法

网上的物流快递查询接口有很多,但是大部分都比较麻烦.所以这里介绍一个比较简单的查询方法,不需要对接友情链接,免费获取api接口技术文档以及demo 主要是利用 快递鸟的免费查询api接口: 快递鸟是全球最大的第三方快递物流接口服务商, 目前已经集成了418家快递单号查询接口,31家电子面单接口.高实时.高稳定.高并发,支持快递单号自动识别. 快递鸟第三方快递查询接口很好用,关键免费,使用的用户很多(有十几个千人技术QQ群),大的ERP基本都用的是快递鸟的接口,非淘系的电商平台也都是用快递鸟提供的

快递鸟物流查询API接口对接案例

下面是以快递鸟提供的开发者接口进行展开,如有错误,请指正并及时修改. 首先,申请一个快递鸟的账号: 然后进入http://www.kdniao.com/reg界面点击免费申请,免费申请的接口每天接口的请求次数都是没有限制的,超过3000次/每天需接入订阅推送接口. 按照申请流程一步步做完后,即可对接. 注册信息必须填写正确,如果有误可能导致接口无法正常使用.   使用 案例分为3个 使用的是Chrome的postman插件进行Api测试调用 使用JAVA环境进行快递查询 使用.net环境进行快递

中通快递物流单号查询API接口免费对接案例

快递查询API接口是使用的物流单号即可实现查询物流信息.主要应用在电商商城.ERP系统商.WMS系统商.快递柜.银行等企业.多家快递物流公司接口统一接入,建议对接接口提供商,一次性可以接入多家快递,在后期的技术维护也会省下很多工作.? ? 目前快递查询API接口有两种实现方式,一种是主动查询,一种是订阅接口推送数据.以快递鸟接口为例(接口对接需要接口秘钥,这里用的是测试的,不能够正式使用,可以到快递鸟官网申请http://www.kdniao.com/,是免费申请秘钥的)最后附有两个方法的dem

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

之前的后天管理系统的电子面单打印使用的是灵通打单. 使用相对比较麻烦,需要到处Excel之后再导入,麻烦. 快递鸟有电子面单api,后台系统直接对接很是方便,不过也遇到了好些问题. 不难是不难,但是遇到的坑着实是不少,特此记录一下. 快递鸟电子面单API地址:http://www.kdniao.com/api-eorder 都是在正式环境下,申请对应的商户id等一系列东西. 在对应的快递鸟后台,可以进行如下的批量打印. 想把这个打印功能集成到自己内部系统,可以下载官方的demo 跑起来挺容易的,