精华内容
下载资源
问答
  • 大家好 今天教大家“如何查询自己的快递包裹到哪里了” 有时候 我们单独发件 不是通过淘宝或者拼多多 怎么方便查询自己的快递到哪了 看我操作就好 这个地方输入快递单号就可以了 有时候查询不到就选择官网查询 ...
  • 快递查询c++代码

    2018-03-28 14:49:31
    可以查询快递状态,可以查询快递到哪里了,c++源代码 可以查询快递状态,可以查询快递到哪里了,c++源代码
  • 将需要查询的安能单号保存同一TXT文档中 打开快递批量查询高手,在“添加单号”功能上,将单号导入 导入好后,单击保存 弹出一个提醒,是否手动选择快递公司,我们选择“是” 在所显示出的下拉列表中

    怎么用快递单号批量查询物流信息呢?一般来说,如果是在淘宝上购买的商品,可以直接查看,或者在快递官网上查询。可是身为商家,拥有大量的单号,该如何批量查询呢?下面随小编一起用快递批量查询高手来操作。
    需要哪些工具?
    下载一个快递批量查询高手**(注册时介绍人请填写:与我)**
    多个安能物流的单号
    怎么批量查询?
    将需要查询的安能单号保存到同一TXT文档中

    在这里插入图片描述
    打开快递批量查询高手,在“添加单号”功能上,将单号导入
    在这里插入图片描述
    导入好后,单击保存
    在这里插入图片描述
    弹出一个提醒,是否手动选择快递公司,我们选择“是”
    在这里插入图片描述
    在所显示出的下拉列表中,选中“安能物流”这个快递公司
    在这里插入图片描述
    回到主界面,开始查物流
    在这里插入图片描述
    等全部查询完成,即可一一浏览到各个单号的信息
    在这里插入图片描述
    双击一个单号进去,即可看到该单号更详细的物流情况
    在这里插入图片描述

    展开全文
  • 淘宝的快递物流查询

    2021-05-28 17:44:43
    现在电商已经融入我们的生活中,每个人都是买家,可自己购买了宝贝,不知道在哪里看买的宝贝物流信息,而现在有了快递批量查询高手这款工具,下面简单介绍从淘宝网已买的宝贝导入来批量查询的方法。 首先在...

    现在电商已经融入我们的生活中,每个人都是买家,可自己购买了宝贝,不知道在哪里看买到的宝贝物流信息,而现在有了快递批量查询高手这款工具,下面简单介绍从淘宝网已买到的宝贝导入来批量查询的方法。
    首先在浏览器上面下载一个快递批量查询高手
    在这里插入图片描述

    然后打开进入主界面,点添加单号
    在这里插入图片描述

    然后在下面有一个从淘宝网已买到的宝贝导入点进去
    在这里插入图片描述

    然后在跑出来的页面选择成交时间和查询的页数
    在这里插入图片描述

    然后开始导入,把我们要导入的淘宝号登入一下
    在这里插入图片描述

    然后登录成功后将自动获取快递单号和购买信息
    在这里插入图片描述

    然后软件自动回到主界面,批量查询到淘宝网已买到的宝贝物流
    在这里插入图片描述

    然后随便点一个单号进去,可看到更详细的物流信息
    在这里插入图片描述

    展开全文
  • 所以经常要去查看自己的东西到哪里!以前老是要登陆到对应的快递网站查询。今天终于被我找到一个可以一次搞定n个快递网站查询的站点了。嘿嘿!在www.hi-ego.com可以到国内外22个快递。不错!以后就用它了。方便...
     习惯了在网上购物!所以经常要去查看自己的东西到哪里!以前老是要登陆到对应的快递网站查询。今天终于被我找到一个可以一次搞定n个快递网站查询的站点了。嘿嘿!在www.hi-ego.com可以查到国内外22个快递。不错!以后就用它查了。方便了!
    展开全文
  • 快递查询小助手是本人亲自编写的一款小软件,目的是为了方便大家查询自己的快递,很多人买了东西但是不知道东西已经寄到哪里,所以开发此工具……
  • 输入快递公司、快递单号,查询出这个快件的所有动态(从哪里出发,哪里) 在注册、登录等场景下的手机验证码(要求有一定的防刷策略) 通过输入公司名的关键词,查看这个公司是否已经注册、法人信息、有...

    有位朋友让我给他新开的网站帮忙做几个小功能,如下:

    1. 输入快递公司、快递单号,查询出这个快件的所有动态(从哪里出发,到了哪里)
    2. 在注册、登录等场景下的手机验证码(要求有一定的防刷策略)
    3. 通过输入公司名的关键词,查看这个公司是否已经注册、法人信息、有类似名称的公司等等

    并且可以用的接口、文档都提供给我了。
    其中需求 1、2,都通过 聚合数据 这家网站提供的接口实现;需求 3 通过 云聚数据 来实现。

    本项目的文件

    因为朋友的网站是用 ThinkPHP 写的,为了保持将来代码的兼容,这三个功能也用 ThinkPHP 写成。

    项目的所有文件都放在了 GitHub 上,部分敏感数据已经隐藏,你需要自行替换,地址如下:

    GitHub 地址:使用聚合数据API查询快递数据-短信验证码-企业核名

    因为这三个功能并不是正式产品,将来会需要嵌入到网站的各个功能模块中去,所以为了查看起来方便,三个功能的代码都写在一个文件里,你只要重点关注以下几个文件就好:

    • /Home/Conf/config.php 参数配置文件
    • /Home/Controller/IndexController.class.php 后端代码、API的请求与处理
    • /Home/View/Index_index.html 前端 html

    申请 KEY 和阅读开发文档

    分别到上面两家网站上找到“快递”、“短信”、“核名”的文档地址,根据里面的说明,把 KEY、URL 等信息放入配置文件Home/Conf/config.php,方便后面重复使用。

    常用快递API文档

    短信API文档

    核名-文档

    注意 短信的 API 服务,要先到网站的后台添加“短信模板”,让管理员审核后才可以正常调用

    最后,Home/Conf/config.php 配置文件里的内容如下

    复制代码

    return array(
        // 快递查询
        'EXPRESS_APP_KEY' => '你的快递 APPKEY',
        'EXPRESS_QUERY_URL' => 'http://v.juhe.cn/exp/index', //快递单号查询
        'EXPRESS_COM_URL' => 'http://v.juhe.cn/exp/com', //快递公司查询
        // 发短信
        'SEND_SMS_KEY' => '你的短信接口 APPKEY',
        'SEND_SMS_URL' => 'http://v.juhe.cn/sms/send',
        // 核名
        'COMPANY_KEY' => '核名 APPKEY',
        'COMPANY_URL' => 'http://eci.yjapi.com/ECIFast/Search',
        //数据库配置信息
        'DB_TYPE'   => 'mysql', // 数据库类型
        'DB_HOST'   => 'localhost', // 服务器地址
        'DB_NAME'   => '你的数据库名', // 数据库名
        'DB_USER'   => '你的数据库用户名', // 用户名
        'DB_PWD'    => '密码', // 密码
        'DB_PORT'   => 3306, // 端口
        'DB_PREFIX' => 'pre_', // 数据库表前缀 
        'DB_CHARSET'=> 'utf8', // 字符集
    );

    复制代码

    设置数据库

    为了防止恶意用户利用暴露在外的短信接口捣乱,需要对每个手机号码的行为进行记录。例如:

    • 向某个手机号码发送短信验证码后, 60 秒内不能再次发送
    • 必须在 1 小时内填写短信验证码,否则会过期
    • 避免 ajax 请求地址被机器人程序利用,在表单里要使用图片验证码才能提交数据

    关于“表单验证码”我们后面代码会说明,这里先创建表结构如下,用于记录短信发送记录:

    复制代码

    CREATE TABLE `pre_smsrecord` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `mobile` varchar(11) NOT NULL DEFAULT '',
      `tpl_id` int(11) NOT NULL,
      `code` int(6) NOT NULL,
      `time` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=M

    复制代码

    • mobile 是手机号码
    • tpl_id是在网站后台添加并通过审核的短信模板
    • code是发送的验证码(一般是4位或6位)
    • time是发送时间戳

    直接下载sql进行还原:在本项目的 GitHub 地址上也可以直接从 /Pubic 目录找到 sql 文件,你可以直接把它还原你的 MySQL 上。

    表单验证码的实现

    最终效果如下:

    验证码

    因为三个功能都需要表单验证码,所以首先实现它。

    打开 /Home/View/Index_index.html,注意里面图片验证码 img 标签,以及对应的 javascript

    复制代码

    <p>
        (通用)输入验证码 <input type="text" name="verify" id="verify">
        <img id="verify-img" src="/?m=Home&c=Index&a=verify" alt="">
        <a id="btn-refresh-verify" href="javascript:;" title="">刷新</a>
    </p>
    <script type="text/javascript" charset="utf-8">
    jQuery(document).ready(function($) {
        // 刷新验证码按钮
        $("#btn-refresh-verify").click(function(event) {
        
            $("#verify-img").attr('src', '/?m=Home&c=Index&a=verify' + "&time=" + new Date().getTime());
        });
    });
    </script>

    复制代码

    对应的后端代码在 /Home/Controller/IndexController.class.php 中

    复制代码

    /**
    * +--------------------------------------------------------------------------
    * 生成验证码
    *
    * +--------------------------------------------------------------------------
    */
    public function verify(){
        $Verify = new \Think\Verify();
        $Verify->entry();
    }
    /**
    * +--------------------------------------------------------------------------
    * 检查验证码
    *
    * @param string $code 输入的验证码
    * @return boolean
    * +--------------------------------------------------------------------------
    */
    protected function check_verify($code){
        $verify = new \Think\Verify();
        return $verify->check($code);
    }

    复制代码

    通用的 Curl 方法,用来向第三方网站的 API 发起请求并获取返回值

    因为 3 个功能实际上都是通过网络来请求一个第三方网站的 API 接口地址,因此可以统一成一个通用的方法。代码如下,可以传入三个变量,分别为 :url、参数数组、请求方式(是否是post,默认为0),返回一个 json 格式的数据。

    复制代码

    /**
    * +--------------------------------------------------------------------------
    * 通用的“聚合数据”请求接口,返回JSON数据
    *
    * @param string $url 接口地址
    * @param array $params 传递的参数
    * @param int $ispost 是否以POST提交,默认GET
    * @return json
    * +--------------------------------------------------------------------------
    */
    public function juhecurl($url,$params=false,$ispost=0){
        $httpInfo = array();
        $ch = curl_init();
        curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
        curl_setopt( $ch, CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22' );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 30 );
        curl_setopt( $ch, CURLOPT_TIMEOUT , 30);
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
        if( $ispost )
        {
            curl_setopt( $ch , CURLOPT_POST , true );
            curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
            curl_setopt( $ch , CURLOPT_URL , $url );
        }
        else
        {
            if($params){
                curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
            }else{
                curl_setopt( $ch , CURLOPT_URL , $url);
            }
        }
        $response = curl_exec( $ch );
        if ($response === FALSE) {
              //echo "cURL Error: " . curl_error($ch);
            return false;
        }
        $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
        $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
        curl_close( $ch );
        return $response;
    }

    复制代码

    后面我们获取快递数据、发送短信、查询企业名称,都可以调用这个通用的方法。

    获取快递数据列表的实现

    最终效果如下:

    快递查询

    打开 /Home/View/Index_index.html

    复制代码

    <h1>获取快递数据</h1>
    <div id="express-module">
        <p>
            选择公司
            <select name="express-company" id="express-company">
                <option value="sf">顺丰</option>
                <option value="sto">申通</option>
                <option value="yt">圆通</option>
                <option value="yd">韵达</option>
                <option value="tt">天天</option>
                <option value="ems">EMS</option>
                <option value="zto">中通</option>
                <option value="ht">汇通</option>
            </select>
        </p>
        <p> 
            输入单号 <input type="text" name="express-number" id="express-number"> 
        </p>
        <p>
            <button id="btn-query-express" type="button" class="btn btn-default">查询快递</button> 
        </p>
        
        <p>返回结果:</p>
        <p id="reason" style="color:#FF0000"></p>
        
        <p>快件动态:</p>
        <ul id="express-result">
            
        </ul>
    </div>    
    <!-- 引入jquery库 -->
    <script src="__PUBLIC__/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript" charset="utf-8">
    jQuery(document).ready(function($) {
        //点击快递查询按钮
        $("#btn-query-express").click(function(event) {
            $("#reason").html("");
            // 更新验证码
            $("#verify-img").attr('src', '/?m=Home&c=Index&a=verify' + "&time=" + new Date().getTime());
            $.getJSON(
                '/?m=Home&c=Index&a=getExpressData', 
                {
                    company: $("#express-company").val(),
                    number: $("#express-number").val(),
                    verify: $("#verify").val(),
                }, 
                function(json, textStatus) {
                    if(json['resultcode'] == 200){
                        var result_list = json['result']['list'];
                        $("#express-result").html("");
                        for(var i = 0, l = result_list.length; i < l; i++) {
                            $("#express-result").append("<li>" + result_list[i]['datetime'] + "," + result_list[i]['remark'] + "," +result_list[i]['zone'] + "</li>");
                        }
                    }
                    $("#reason").html(json['reason']);
            });
        });
    });
    </script>

    复制代码

    对应的后端代码为如下,特别注意,你要把 $content = $this->juhecurl(C("EXPRESS_QUERY_URL"), $params, 1); 这段的注释去掉(因为我开发的时候查询余额不足,所以使用了一个写死的数组来让程序能正常运行)

    复制代码

    /** 
    * +--------------------------------------------------------------------------
    * 获取快递数据
    *
    * @param string $get.company 快递公司代码
    * @param string $get.number 快递单号
    * @return json
    * +--------------------------------------------------------------------------
    */
    public function getExpressData(){
        // 传入 get 参数,包括公司代号、快递单号、验证码
        $com    = I("get.company");
        $no     = I("get.number");
        $verify = I("get.verify");
        // 处理验证码
        if ( !$this->check_verify($verify) ) {
            $content = array('resultcode'=>1000, 'reason'=>'验证码填写错误');
            echo json_encode($content);
            exit();
        }
        // 处理机器人程序刷接口(目前通过IP判断)
        $ip = get_client_ip(0, true);
        $Record = M("expressrecord");
        $express_record = $Record->where("ip='" . $ip . "'")->find();
        if( $express_record && ( (time() - $express_record['time']) < 60 ) ){
            echo json_encode(array('reason'=>'60秒内只能查询一次'));
            exit();
        }
        if ( $com && $no ) {
            $params = array(
                'key' => C("EXPRESS_APP_KEY"),
                'com'  => $com,
                'no' => $no
            );
            // 开发测试阶段直接返回值,不请求 API
            // $content = $this->juhecurl(C("EXPRESS_QUERY_URL"), $params, 1);
            $content = array('resultcode'=>200, 'reason'=>'查询成功', 'result'=>array('list'=>array()));
            // 删除旧记录(如果有),然后添加新的记录
            $Record->where("ip='" . $ip . "'")->delete();
            $data = array(
                'ip' => $ip,
                'time'=>time()
            );
            $Record->add($data);
            //$returnArray = json_decode($content,true);
            echo json_encode($content, true);
        }
    }

    复制代码

    短信验证码的发送和检验

    短信验证码

    废话不多说,前端html直接上代码。这里实际上有两个动作,一个是“给我手机号码 xxxxx 发个验证码”,另一个是“我已经收到了,并填写了,请看我填写的验证码对不对”。

    复制代码

    <h1>发送短信验证码与检查</h1>
    <div id="sms-module">
        <p>
            短信模板:
            <select name="send-sms-tplid" id="send-sms-tplid">
                <option value="5596">申请注册</option>
                <option value="5602">申请找回密码</option>
                <option value="5603">在线核名</option>
            </select>
        </p>
        
        <p>
            手机号码:<input type="text" name="send-sms-mobile" id="send-sms-mobile">
        </p>
        
        <p>
            输入手机验证码:<input type="text" name="send-sms-code" id="send-sms-code">
            <span id="sms-count-down"></span>
            <button id="btn-send-sms" type="button" class="btn btn-default">发送验证码</button>
        </p>
        
        <p>
            <button id="btn-check-sms" type="button" class="btn btn-default">提交手机验证码</button>
        </p>
    </div>
    <script type="text/javascript" charset="utf-8">
    /**
    * 发送短信验证码后,60秒倒计时
    */
    var seconds_left = 60;
    function sms_count_down(){
        if(seconds_left > 0){
            seconds_left = seconds_left-1;
            //var b=new Date();
            
            document.getElementById("sms-count-down").innerHTML = seconds_left + "秒";
            setTimeout("sms_count_down()",1000);
        } else {
            //根据 http://stackoverflow.com/questions/7526601/setattributedisabled-false-changes-editable-attribute-to-false
            // 不能为 setAttribute 设置任何值,都会变成 ”disabled“,要使用 removeAttribute
            document.getElementById("btn-send-sms").removeAttribute("disabled");
            document.getElementById("btn-send-sms").innerHTML = "重新发送";
            document.getElementById("sms-count-down").innerHTML = "";
        }
    }
    jQuery(document).ready(function($) {
    //发送短信
        $("#btn-send-sms").click(function(event) {
            $("#reason").html("");
            $.getJSON(
                '/?m=Home&c=Index&a=sendSMS', 
                {
                    tplid: $("#send-sms-tplid").val(),
                    mobile: $("#send-sms-mobile").val(),
                }, 
                function(json, textStatus) {
                    $("#reason").html(json['reason']);
                    var error_code = json['error_code'];
                    if(error_code == 0){
                        // 测试阶段,不禁用,可检查 60 秒重复发送
                        //$("#btn-send-sms").attr("disabled", true);
                        //开始倒计时
                        sms_count_down();
                    }else{
                        $("#btn-send-sms").html("重新发送");
                    }
        
            });
        });
        //检查短信验证码
        $("#btn-check-sms").click(function(event) {
            $("#reason").html("");
            // 更新验证码
            $("#verify-img").attr('src', '/?m=Home&c=Index&a=verify' + "&time=" + new Date().getTime());
            $.getJSON(
                '/?m=Home&c=Index&a=checkSmsCode', 
                {
                    tplid: $("#send-sms-tplid").val(),
                    mobile: $("#send-sms-mobile").val(),
                    code: $("#send-sms-code").val(),
                    verify: $("#verify").val(),
                }, 
                function(json, textStatus) {
                    $("#reason").html(json['reason']);
        
            });
        });
        
    });

    复制代码

    同样因为有两个动作,后端会稍微复杂一点点

    复制代码

    /**
    * +--------------------------------------------------------------------------
    * 请求发送短信接口,60秒后才能重新发送
    *
    * @param int $get.tplid 短信模板id
    * @param string $get.mobile 手机号码
    * @return json
    * +--------------------------------------------------------------------------
    */
    public function sendSMS(){
        $tpl_id = I("get.tplid"); // 短信模板id:注册 5596 找回密码 5602 在线核名 5603
        $mobile = I("get.mobile"); // 手机号码
        // 检查数据库记录 ,是否在 60 秒内已经发送过一次
        $Record = M("smsrecord");
        $where = array(
            'mobile' => $mobile,
            'tpl_id' => $tpl_id,
        );
        $sms_record = $Record->where($where)->find();
        if( $sms_record && ( (time() - $sms_record['time']) < 60 ) ){
            echo json_encode(array('reason'=>'60秒内不能多次发送'));
            exit();
        }
        // 如果60秒内没有发过,则发送验证码短信(6位随机数字)
        $code = mt_rand(100000, 999999);
        $smsConf = array(
            'key'   => C("SEND_SMS_KEY"), //您申请的APPKEY
            'mobile'    => $mobile, //接受短信的用户手机号码
            'tpl_id'    => $tpl_id, //您申请的短信模板ID,根据实际情况修改
            'tpl_value' =>'#code#=' . $code //您设置的模板变量,根据实际情况修改 '#code#=1234&#company#=聚合数据'
        );
         
        //测试阶段,不发短信,直接设置一个“发送成功” json 字符串
        $content = $this->juhecurl(C("SEND_SMS_URL") ,$smsConf, 1); //请求发送短信
        //$content = json_encode(array('error_code'=>0, 'reason'=>'发送成功'));
        if($content){
            $result = json_decode($content,true);
            $error_code = $result['error_code'];
            if($error_code == 0){
                // 状态为0,说明短信发送成功
                // 数据库存储发送记录,用于处理倒计时和输入验证,首先要删除旧记录
                $Record->where("mobile=" . $mobile)->delete();
                    $data = array(
                        'mobile' => $mobile,
                        'tpl_id'=> $tpl_id,
                        'code'=>$code,
                        'time'=>time()
                    );
                    $Record->data($data)->add();
                //echo "短信发送成功,短信ID:".$result['result']['sid'];
            }else{
                //状态非0,说明失败
                //echo "短信发送失败(".$error_code."):".$msg;
            }
        }else{
            //返回内容异常,以下可根据业务逻辑自行修改
            //$result['reason'] = '短信发送失败';
        }
        echo $content;
    }
    /**
    * +--------------------------------------------------------------------------
    * 检查填写的手机验证码是否填写正确
    * 可以添加更多字段改造成注册、登录等表单
    *
    * @param string $get.verify 验证码
    * @param string $get.mobile 手机号码
    * @param int $get.tplid 短信模板ID
    * @param int $get.code 手机接收到的验证码
    * +--------------------------------------------------------------------------
    */
    public function checkSmsCode(){
        $verify = I("get.verify");
        $tpl_id = I("get.tplid"); // 短信模板id:注册 5596 找回密码 5602 在线核名 5603
        $mobile = I("get.mobile"); // 手机号码
        $code = I("get.code"); // 手机收到的验证码
        if(!$this->check_verify($verify)){
            $content = array('resultcode'=>1000, 'reason'=>'验证码填写错误');
            echo json_encode($content);
            exit();
        }
        // 检查数据库记录,输入的手机验证码是否和之前通过短信 API 发送到手机的一致
        $Record = M("smsrecord");
        $where = array(
            'mobile' => $mobile,
            'tpl_id' => $tpl_id,
            'code' => $code,
        );
        $sms_record = $Record->where($where)->find();
        if($sms_record){
            echo json_encode(array('reason'=>'短信验证码核对成功'));
            // 处理后面的程序(如继续登录、注册等)
        }else{
            echo json_encode(array('reason'=>'短信验证码错误'));
        }
    }

    复制代码

    最后是企业核名

    因为这个接口本来只提供了每次查询一个关键词,而朋友的网站要求能每次查询用“,”分隔的多个关键词,因此需要对提交的数据和返回到前端的进行一番处理(循环处理多个列表)。

    企业核名

    前端代码比较简单

    复制代码

    <h1>企业核名</h1>
    <div id="company-module">
        <p>
            省份:上海
            <input type="hidden" name="company-province" id="company-province" value="SH">
        </p>
        <p>
            <input type="text" name="company-name" id="company-name">
        </p>
    </div>
    <button id="btn-company" type="button" class="btn btn-default">企业核名</button>
    <p>公司查询列表:</p>
    <ul id="company-result">
        
    </ul>
    <javascript 略……
    //企业核名(可输入多个以逗号分隔的名称来多次查询)
    $("#btn-company").click(function(event) {
        $("#reason").html("");
        $("#company-result").html("");
        // 更新验证码
        $("#verify-img").attr('src', '/?m=Home&c=Index&a=verify' + "&time=" + new Date().getTime());
        $.getJSON(
            '/?m=Home&c=Index&a=getCompanyName', 
            {
                province: $("#company-province").val(),
                companyName: $("#company-name").val(),
                verify: $("#verify").val(),
            }, 
            function(json, textStatus) {
                if(json['reason']){
                    $("#reason").html(json['reason']);
                } else {
                    //console.log(json);
                    var json_list = JSON.parse(json);
                    if (json_list.length > 0){
                        for(i in json_list){
                            var result_list = json_list[i].Result;
                            if (result_list.length > 0){
                                for(j in result_list){
                                    //console.log(result_list[j]);
                                    $("#company-result").append("<li> 名称:" + result_list[j].Name + ", 法人:" + result_list[j].OperName + ", 状态:" + result_list[j].Status + "</li>");
                                }
                            }
                        }
                    }
                }
        });
    });
    </javascript>

    复制代码

    后端代码

    复制代码

    /** 
    * +--------------------------------------------------------------------------
    * 企业核名
    * 该接口 http://eci.yjapi.com/ECIFast/Search 仅支持 GET 方式,因此 $param 为字符串形式
    *
    * @param string $get.province 省份
    * @param string $get.companyName 公司名
    * @return json
    * +--------------------------------------------------------------------------
    */
    public function getCompanyName(){
        // 传入 get 参数
        $province                = I("get.province");
        $companyName    = I("get.companyName");
        $verify         = I("get.verify");
        // 处理验证码
        if ( !$this->check_verify($verify) ) {
            $content = array('resultcode'=>1000, 'reason'=>'验证码填写错误');
            echo json_encode($content);
            exit();
        }
        // 处理机器人程序刷接口(目前通过IP判断)
        $ip = get_client_ip(0, true);
        $Record = M("companyrecord");
        $company_record = $Record->where("ip='" . $ip . "'")->find();
        // if( $company_record && ( (time() - $company_record['time']) < 60 ) ){
        //     echo json_encode(array('reason'=>'60秒内只能查询一次企业名称'));
        //     exit();
        // }
        $resultArray = array();
        if ( $province && $companyName ) {
            // 删除旧记录(如果有),然后添加新的记录
            $Record->where("ip='" . $ip . "'")->delete();
            // 循环处理多个公司名
            $companies = explode(",", $companyName);
            foreach ($companies as $key => $value) {
                $params = "key=" . C("COMPANY_KEY") . "&province={$province}&companyName={$value}";
                // 开发测试阶段直接返回值,不请求 API
                $content = $this->juhecurl(C("COMPANY_URL"), $params, 0);
                $returnArray = json_decode($content,true);
                // 循环插入新的结果
                $resultArray[] = $returnArray;
                //$content = array('resultcode'=>200, 'reason'=>'查询成功', 'result'=>array('list'=>array()));
            }
            $data = array(
                'ip' => $ip,
                'time'=>time()
            );
            $Record->add($data);
            $content = json_encode($resultArray, true);
            echo json_encode($content, true);
        }
    }

    复制代码

    结束

    至此三个功能都已经完成了,但是在防止恶意用户利用接口干坏事的策略上,还可以更进一步。例如

    • 必须要注册用户才能发送请求
    • 手机号码每天只能限制发送有限的验证码(因为目前即使每分钟发送一次,一天下来也比较可观了)
    • 手机号码注册后,再次请求发送验证码时,只能发给“已有”的手机号码数据表里的手机号码,而不能把“找回密码”发给一个还没注册的人。

    转载于:https://my.oschina.net/u/2560829/blog/739811

    展开全文
  • 输入快递公司、快递单号,查询出这个快件的所有动态(从哪里出发,哪里) 在注册、登录等场景下的手机验证码(要求有一定的防刷策略) 通过输入公司名的关键词,查看这个公司是否已经注册、法人信息、有类似...
  • 发货了,货物到哪里了?不知道怎么去实时查询,不好安排签收时间。 针对这些问题我们已经新增了对快递单号实时查询的功能,客户可以在会员中心直接查看订单的物流跟踪信息。 商家可进入订单修改页面后,点“添加...
  • 我们经常会去查快递的物流单号,可是这些物流单号是从哪里来的呢? 快递鸟集合了多家快递公司查询接口,输入相应快递公司编码和快递单号就可以获取对应的物流信息很方便快捷。 项目目标 教会大家如何用...
  • 输入快递公司、快递单号,查询出这个快件的所有动态(从哪里出发,哪里) 在注册、登录等场景下的手机验证码(要求有一定的防刷策略) 通过输入公司名的关键词,查看这个公司是否已经注册、法人信息、有类似...
  • 双十一让商家们很期待,但是有一件是也是很让商家烦恼那就是快递发货和走件速度 ,快递公司收件后有没有按时走件呢,或快递公司在哪个快递有没有疑漏呢,或在哪里环节停流时间比较长没有及时转下一站呢,...
  • 小程序在哪里? 小程序功能模块在“发现”频道最下方的位置。如果没有,请先将微信升级最新版本,然后在通讯录搜索‘小程序示例’,点击之后返回“发现频道”即可。Tip:小程序搜索目前不支持模糊查询 小程序会...
  • 输入快递公司、快递单号,查询出这个快件的所有动态(从哪里出发,哪里)在注册、登录等场景下的手机验证码(要求有一定的防刷策略)通过输入公司名的关键词,查看这个公司是否已经注册、法人信息、有类似名称的...
  • 输入快递公司、快递单号,查询出这个快件的所有动态(从哪里出发,哪里)在注册、登录等场景下的手机验证码(要求有一定的防刷策略)通过输入公司名的关键词,查看这个公司是否已经注册、法人信息、有类似名称的...
  • 顺丰快递到哪里了,你还在用手机查吗?OUT啦!现在用电脑也可以查快递了,而且支持批量呢!实在是太方便了!下面随小编一起用快递批量查询高手批量分析顺丰快递物流,也可以在查询后到官网上验证一下是否正确。 批量...
  • 本软件采用Delphi开发, 部分代码公布,请联系本人 ...您可以,看网络电视,欣赏最新正版高清电影,弹弹堂游戏,斗地主,植物大战僵尸,打桌球,身份证查询,快递查询,减肥食谱,智商测试等超可爱实用应用...
  • <br>下载后解压硬盘的任何位置(如:D:\百业通快递收费统计软件),然后用鼠标双击程序文件:“百业通快递收费统计软件.exe”就可以自动运行了! <br>使用方法: 运行软件后,看光标在哪里,就在那里输入对应的...
  • 小程序在哪里? 小程序功能模块在“发现”频道最下方的位置。如果没有,请先将微信升级最新版本,然后在通讯录搜索‘小程序示例’,点击之后返回“发现频道”即可。Tip:小程序搜索目前不支持模糊查询 小程序会...
  • 软件工程实验报告 一

    2013-12-14 23:56:38
    任务一:自行选择一个软件项目,有背景说明、功能需求概述;...所以,这个系统可以查询到自己的物流到哪里领取(并不是物流到了哪里),并且可以查看是否被领取。 需求概述 1. 查询物流:注册会员可以查询物流是
  • 1、 微信号 Bitsea  离开了微博的和菜头去了哪里?答案:微信。...对,是各种资讯,上社会新闻、中科技产品、下菜谱保健。在这个娱乐至死的信息世界里... 史上最强大的微信机器人,可查天气、查快递、查公交、
  • 发送方创建完包后,包会被传递最近的网络转发设备中,转发设备会根据头部中记录的信息判断接下来该往哪里发送,这个过程需要一张表,这张表里记录了每一个地址对应的转发方向,也就是按照头部里记录的目的地址在...
  • 在艾尚团购系统的程序后台有“艾尚统计”服务,让您了解您的成交订单从哪里来,给出排名,并且可以按年、月、日、时进行筛选统计,让您对您的广告投放计划更加心有成竹。 物流信息实时查询 使用艾尚团购程序,...
  • 1、创建工作流完成后跳转到哪里,必填字段填写的判断,提交工作流的表单的完成。 2、获取待处理工作流,以及所有的工作流 3、不是当前的审批者,不能编辑相应的表单 4、新建不能编辑、退出不能编辑的bug -- 完成 5、...
  • 开奖API调用.txt

    2019-09-03 15:44:27
    作为用户希望的是有一个输入订单号的输入框,点击查询按钮就能够看到快递到哪了。那么输入的快递单号就是请求参数,包裹在什么时候到达哪里就是返回内容。 搭建开放平台的目的 1、为第三方开发者提供基础服务。 ...
  • java范例开发大全(pdf&源码)

    热门讨论 2013-07-04 13:04:40
    实例73 快递报价单 99 5.3 数组的排序 101 实例74 冒泡排序法 102 实例75 数组递增排序 103 实例76 部分数组递增排序 103 实例77 选择排序法 104 实例78 快速排序法 106 第6章 字符串(教学视频:138分钟) 108 6.1 ...
  • Java范例开发大全 (源程序)

    热门讨论 2011-04-27 07:47:22
     实例60 我的位置在哪里 83  实例61 复制数组 85  实例62 插入新元素 86  实例63 数组的合并 87  实例64 去除重复元素 88  实例65 数组求和计算 90  实例66 求最大值、最小值和平均值 91  5.2 二维...
  • java范例开发大全源代码

    热门讨论 2011-10-30 23:31:51
     实例60 我的位置在哪里 83  实例61 复制数组 85  实例62 插入新元素 86  实例63 数组的合并 87  实例64 去除重复元素 88  实例65 数组求和计算 90  实例66 求最大值、最小值和平均值 91  5.2...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

查快递到哪里了