欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

易信 / 微信 公众平台 查快递 php代码

程序员文章站 2022-05-22 21:26:36
...

易信/微信公众平台查快递 使用方法,编辑以下内容发送至公众平台即可: 如(查询易客满单号为APELAX1040039963的快递 ecmsAPELAX1040039963或者易客(易客满)APELAX1040039963【快递公司名和快递编号间要有个空格】 注:本项目使用到kuaidi100的API; 另外那个美

易信 / 微信 公众平台 查快递

使用方法,编辑以下内容发送至公众平台即可:
如(查询易客满单号为APELAX1040039963的快递
ecms APELAX1040039963 或者 易客(易客满) APELAX1040039963 【快递公司名和快递编号间要有个空格】

注:本项目使用到kuaidi100的API;
另外那个美国亚马逊用的易客满快递是自己写的采集,
练手作品(之前那个微信的太粗糙了哈~),欢迎指正及提意见~
其实再加个数据库,加个计划任务,再加个微信/易信的消息发送功能就可以实现快递的实时更新了。(这个是我后期想做的~)

文件太多,全部项目请移步:
GitHub:https://github.com/skiy/express
本人博客:www.skiy.net
token = $token;
    }

    //判断是否来自微信服务器
    public function valid(){
        $echoStr = $_GET["echostr"];

        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }
    */

    private $toUsername;
    private $fromUsername;
    private $createTime;
    private $msgId;
    private $msgType;

    private $time;
    private $content;

    private $postStr;

    public function responseMsg()
    {

        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

        $this->postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        $this->toUsername = $this->postObj->ToUserName;
        $this->fromUsername = $this->postObj->FromUserName;
        $this->createTime = $this->postObj->CreateTime;
        $this->msgId = $this->postObj->MsgId;
        $this->msgType = $this->postObj->MsgType;
        $this->time = time();

        $resultStr = "error";

        if (!empty($postStr)) {
            $resultStr = $this->get_text();
        }

        echo $resultStr;
    }


    //接收到文本
    public function get_text()
    {
        $textTpl = "%s";

        if ($this->msgType != "text") {
            $content = "快递信息输入错误。";
        } else {

            $this->content = $this->postObj->Content;

            $this->content = preg_replace("/(\s{2,})/", " ", $this->content);
            $content_list = explode(" ", $this->content);

            if (count($content_list) == 2) {
                include_once "get_companies.php";

                $company = new company();
                $company_infos = $company::get_companies_info($content_list[0]);

                //如果快递100不支持此快递则diy
                if(count($company_infos) == 0) {
                    $is_diy = true;
                    $company::$companies = include_once 'fetch/add_companies.php';
                    $company_infos = $company::get_companies_info($content_list[0]);
                }
                $num = $content_list[1];
                $code = $company_infos[0]['code'];        //获取英文代码
                $com = $company_infos[0]['company'];        //获取公司名称

                $numinfo = "快递:" . $com . "\n" . "单号:" . $num . "\n";
                
                if(!$is_diy) {
                    $kd_url = "http://m.kuaidi100.com/query?type=" . $code . "&postid=" . $num;
                } else {
                    $kd_url = dirname('http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]).'/fetch/index.php?code='.$code."&postid=" . $num;
                }

                $json_getdata = file_get_contents($kd_url);
                //$get_kdinfo = json_decode($json_getdata);	//object
                $get_kdinfo = json_decode($json_getdata, true);    //array
                $last_t = "查询时间:\n" . $get_kdinfo['updatetime'] . "\n\n";    //查询时间

                $kd_shipinfo = $get_kdinfo['data'];    //快递数据数组
                $kd_total = count($kd_shipinfo) - 1;
                $ship = '';
                $detail = "\n点击查看详情";

                //物流倒序详情
                for ($i = $kd_total; $i >= 0; $i--) {
                    $shipinfo = $kd_shipinfo[$i]['time'] . "\n" . $kd_shipinfo[$i]['context'] . "\n";
                    $ship = $shipinfo . $ship;
                }
                //顺序物流详情
                /*foreach ($kd_shipinfo as $v){
                    $shipinfo = $v['time']."\n".$v['context']."\n";
                    $ship = $shipinfo.$ship;
                }
                */
                $get_kdinfo = $numinfo . $last_t . "【物流详情】\n" . $ship;
                if ($ship) {
                    $contentStr = $get_kdinfo;
                } else {
                    $contentStr = $numinfo . ">没有物流数据!".$kd_url;
                }

                $contentStr .= $detail;

            } else {
                $contentStr = "格式错误,正确格式如下:\n快递公司名称 快递单号";
            }

        }

        $resultStr = sprintf($textTpl,
            $this->fromUsername,
            $this->toUsername,
            $this->time,
            "text",
            $contentStr);

        return $resultStr;
    }

    //判断签名,返回bool
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);

        if ($tmpStr == $signature) {
            return true;
        } else {
            return false;
        }
    }
}
get_companies();
    }

    /*
     * return array companies infos
     */
    public static function get_companies()
    {
        return include_once self::$file_name;
    }

    /*
     * 通过编码取得公司名
     * @param string $code 编码
     * return string 公司名
     */
    public static function get_company_name($code)
    {
        foreach (self::$companies as $keys => $values) {
            if ($values['code'] == $code) {
                return $values['company'];
            }
        }
        return;
    }

    /*
     * 通过公司名取得编码
     * $param string $name 公司名
     * return string 编码
     */
    public static function get_company_code($name)
    {
        foreach (self::$companies as $keys => $values) {
            if ($values['name'] == $name) {
                return $values['code'];
            }
        }
        return;
    }

    /*
     * 通过快递公司名或者编码取得完整编码 模糊查找全部
     * $param string $input 公司名
     * return array 编码和公司名
     */
    public static function get_companies_info($input)
    {
        $lists = array();
        foreach (self::$companies as $keys => $values) {
            if (mb_stristr($values['company'], $input)) {
                unset($values['id']);
                $lists[] = $values;
            }
        }

        //如果通过名称取不到值则通过键名
        if (count($lists) == 0) {
            foreach (self::$companies as $keys => $values) {
                if (mb_stristr($values['code'], $input)) {
                    unset($values['id']);
                    $lists[] = $values;
                }
            }
        }
        return $lists;
    }

    /*
     * 不需要类型直接取得编码和公司名
     * @param string 编码或者公司名
     * return array 编码和公司名
     */
    public static function get_company_info($input)
    {
        foreach (self::$companies as $keys => $values) {
            if (in_array($input, $values)) {
                unset($values["id"]);
                return $values;
            }
        }
        return;
    }
}

 * @created:  1/6/15 21:15
 * @modified: 
 */

//lang={cn / en}
//https://www.ecmsglobal.com/oms/showtracking?trackingno=APELAX1040039963&lang=cn
//
     
$lang = "cn";
$postid = isset($_GET['postid']) ? $_GET['postid'] : 0;
$kd_url = "https://www.ecmsglobal.com/oms/showtracking?trackingno={$postid}&lang={$lang}";

$page_info = file_get_contents($kd_url);
//$page_info = file_get_contents("a.html");

$page_dom = "".$page_info;
$xmldoc = new DOMDocument();
@$xmldoc->loadHTML($page_dom);
$xmldoc->normalizeDocument();
$page_xml= new Domxpath($xmldoc);

$event_date = $page_xml->query('//div[@class="order"]//ul//div[@class="column event_date"]');
$event_where = $page_xml->query('//div[@class="order"]//ul//div[@class="column event_where"]');
$event_desc = $page_xml->query('//div[@class="order"]//ul//div[@class="column event_desc"]');

$thisinfo = array();
$add_infos = array();
foreach ($event_date as $keys => $values) {
    $location = $event_where->item($keys)->textContent;
    $context = $event_desc->item($keys)->textContent;
    $thisinfo[] = array(
        'time' => $values->textContent,
        'location' => $location,
        'context' => $location.",\n".$context,
    );
}

if (count($thisinfo) > 0) {
    $add_infos = array(
        'message' => "ok",
        'nu' => $postid,
        'companytype' => "ecms",
        'ischeck' => "1",
        'com' => "ecms",
        'updatetime' => $event_date->item(0)->textContent,
        'status' => "200",
        'codenumber' => $postid,
        'data' => $thisinfo
    );
}
    
return $add_infos;
易信 / 微信 公众平台 查快递 php代码易信 / 微信 公众平台 查快递 php代码易信 / 微信 公众平台 查快递 php代码