易信 / 微信 公众平台 查快递
程序员文章站
2023-12-28 22:55:04
...
使用方法,编辑以下内容发送至公众平台即可:
如(查询易客满单号为APELAX1040039963的快递
ecms APELAX1040039963 或者 易客(易客满) APELAX1040039963 【快递公司名和快递编号间要有个空格】
注:本项目使用到kuaidi100的API;
另外那个美国亚马逊用的易客满快递是自己写的采集,
1. [文件] class.base.php
<?php /** * 公众平台基础类 For Fshare * @author: Skiychan * @created: 2013.11.19 * @modified: 2015.01.03 */ class BaseClass { /* public $token = ''; public function __construct($token){ $this->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 = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; 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<a href='http://api.oupag.com/developer/kuaidi/getdata.php?code=" . $code . "&num=" . $num . "'>点击查看详情</a>"; //物流倒序详情 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; } } }
2. [文件] get_companies.php
<?php /** * 快递公司的class * @author: Skiychan. * @created: 1/3/15 * @modified: */ class company { public static $file_name = "company_lists.php"; public static $companies; public function __construct() { self::$companies = $this->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; } }
3. [文件] ecms.php
<?php /** * ecms.php * 易客满(美国亚马逊发中国专用快递) * @author: Skiychan<developer@zzzzy.com> * @created: 1/6/15 21:15 * @modified: */ //lang={cn / en} //http://www.php.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 = "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>".$page_info; $xmldoc = new DOMDocument(); @$xmldoc->loadHTML($page_dom); $xmldoc->normalizeDocument(); $page_xml= new Domxpath($xmldoc); $event_date = $page_xml->query('//p[@class="order"]//ul//p[@class="column event_date"]'); $event_where = $page_xml->query('//p[@class="order"]//ul//p[@class="column event_where"]'); $event_desc = $page_xml->query('//p[@class="order"]//ul//p[@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;
4. [图片] sc1.png
5. [图片] sc2.png