微信公众平台之快递查询功能用法实例

前端技术 2023/09/09 PHP

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

使用方法:

#查快递(或三个首字母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();

希望本文所述对大家的php程序设计有所帮助。

本文地址:https://www.stayed.cn/item/26097

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。