PHP实现微信公众平台快递查询功能
来源:绵阳动力网络公司  时间:2015-04-15  阅读:34

本文实例讲述了微信公众平台之快递查询功能用法。分享给大家供大家参考。具体如下:

使用方法:

#查快递(或三个首字母ckd)#快递编号#快递单号

如(查询EMS单号为1034616494006的快递):

#ckd#15#1034616494006

常用快递编号:<br />

15EMS,56申通,57顺丰,77圆通,

80韵达,87中通,85宅急送,62天天

1. class.base.php文件:

<?php 
/** 
 * 微信公众平台基础类 For Fshare 
 * @author: Skiychan 
 * @created:  2013.11.19 
 */
class Wechat{ 
// public $token = ''; 
/* public function __construct($token){ 
  $this->token = $token; 
 }  */
 //判断是否来自微信服务器 
/* public function valid(){ 
  $echoStr = $_GET["echostr"]; 
  if($this->checkSignature()){ 
   echo $echoStr; 
   exit; 
  } 
 } 
*/
 public function responseMsg(){ 
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 
  if (!empty($postStr)){ 
   $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 
   $fromUsername = $postObj->FromUserName; 
   $toUsername = $postObj->ToUserName; 
   $keyword = trim($postObj->Content); 
   $time = time(); 
   $textTpl = "<xml> 
      <ToUserName><![CDATA[%s]]></ToUserName> 
      <FromUserName><![CDATA[%s]]></FromUserName> 
      <CreateTime>%s</CreateTime> 
      <MsgType><![CDATA[%s]]></MsgType> 
      <Content><![CDATA[%s]]></Content> 
      <FuncFlag>0</FuncFlag> 
      </xml>";     
   if(!empty($keyword)){ 
    //当输入文字类型 
    if($msgType = "text"){ 
     //$contentStr = $keyword.$fromUsername.$time; 
     //$preg = "/^\#([\W\w]*?)\#([\W\w]*?)\#(.*)/"; //0为功能,1为选项,2为余下的值 
     //$preg = "/\#([\w]+)/"; //0为功能,1为选项,2为余下的值 
     $preg = "/\#([\w\d\x{4e00}-\x{9fa5}]+)/u"; //0为功能,1为选项,2为余下的值 
     preg_match_all($preg,$keyword,$newdata); 
     $fn_name = $newdata[1][0]; 
     //获取快递的参数 
     if(strtolower($fn_name)=="skiy"){ 
      $me = "我是此公众帐号的开发者,英文名Skiy。\n如果你对本功能有任何意见和建议,欢迎联系我,\n我的QQ是1005043848\n微信是forskiy,邮箱:\ndeveloper@zzzzy.com"; 
      $contentStr = $me; 
     }       
     //获取快递的参数 
     if($fn_name=="快递"||strtolower($fn_name)=="kuaidi"){ 
      $kdlist = ''; 
      //启用PDO连接sqlite的方式 
      $db = new PDO("sqlite:somedata/data.dat"); 
      $results = $db->query('SELECT * FROM kuaidi')->fetchAll(); 
      foreach ($results as $key=>$row) { 
       //var_dump($row); 
       //$list_one = $row['id']." ".$row['code']." ".$row['company']."\n"; 
       $list_one = $row['id'].' '.$row['company']."\n"; 
       $kdlist = $kdlist.$list_one; 
      }   
      //主机支持sqlite3的方式 
/*      $db = new SQLite3("somedata/data.dat"); 
      $results = $db->query('SELECT * FROM kuaidi'); 
      while ($row = $results->fetchArray()) { 
       //var_dump($row); 
       $list_one = $row['id']." ".$row['code']." ".$row['company']."\n\r"; 
       $kdlist = $kdlist.$list_one; 
      }  */  
      $contentStr = $kdlist; 
     } 
     if($fn_name=="查快递"||strtolower($fn_name)=="ckd"){ 
      $id = $newdata[1][1]; 
      $num = $newdata[1][2]; 
      $db = new PDO("sqlite:somedata/data.dat"); 
      $results = $db->query('SELECT code,company FROM kuaidi WHERE id = '.$id)->fetchAll(); 
      $code = $results[0]['code'];  //获取英文代码 
      $com = $results[0]['company'];  //获取公司名称 
      $numinfo = "快递:".$com."\n"."单号:".$num."\n"; 
      $kd_url = "http://m.kuaidi100.com/query?type=".$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 = ''; 
      //物流倒序详情 
      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.">没有物流数据!"; 
      } 
     } 
     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); 
     echo $resultStr; 
    }else{ 
     echo "Input something..."; 
    } 
   } 
  }else { 
   echo "You have no enter something..."; 
   exit; 
  } 
 } 
 //判断签名,返回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. index.php文件:

<?php 
/**  
*   
* 微信公众平台消息接口 For Fshare(分享资讯)  
* @author: Skiychan (Wechat:forskiy)  
* @created:2013.11.19  
*   
*/
include_once 'class.base.php';
define('TOKEN', 'skiychan'); 
$wx = new Wechat(); 
//$wx->valid(); 
$wx->responseMsg(); 


 
  • 电话咨询

  • 0816-2318288