+发表新主题
查看: 1534|回复: 0

[代码片段] 微信公众平台之快递查询功能

[复制链接]

[代码片段] 微信公众平台之快递查询功能

[复制链接]
百无禁忌 发表于 2013-12-26 17:15:27 浏览:  1534 回复:  0 [显示全部楼层] 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本文实例讲述了微信公众平台之快递查询功能用法。分享给大家供大家参考。具体如下:
使用方法:
#查快递(或三个首字母ckd)#快递编号#快递单号
如(查询EMS单号为1034616494006的快递):
#ckd#15#1034616494006
常用快递编号:<br />
15EMS,56申通,57顺丰,77圆通,
80韵达,87中通,85宅急送,62天天
1. class.base.php文件:
  1. <?php
  2. /**
  3. * 微信公众平台基础类 For Fshare
  4. * @author: Skiychan
  5. * @created:  2013.11.19
  6. */
  7. class Wechat{
  8. // public $token = '';
  9. /* public function __construct($token){
  10.   $this->token = $token;
  11. }  */
  12. //判断是否来自微信服务器
  13. /* public function valid(){
  14.   $echoStr = $_GET["echostr"];
  15.   if($this->checkSignature()){
  16.    echo $echoStr;
  17.    exit;
  18.   }
  19. }
  20. */
  21. public function responseMsg(){
  22.   $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  23.   if (!empty($postStr)){
  24.    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  25.    $fromUsername = $postObj->FromUserName;
  26.    $toUsername = $postObj->ToUserName;
  27.    $keyword = trim($postObj->Content);
  28.    $time = time();
  29.    $textTpl = "<xml>
  30.       <ToUserName><![CDATA[%s]]></ToUserName>
  31.       <FromUserName><![CDATA[%s]]></FromUserName>
  32.       <CreateTime>%s</CreateTime>
  33.       <MsgType><![CDATA[%s]]></MsgType>
  34.       <Content><![CDATA[%s]]></Content>
  35.       <FuncFlag>0</FuncFlag>
  36.       </xml>";   
  37.    if(!empty($keyword)){
  38.     //当输入文字类型
  39.     if($msgType = "text"){
  40.      //$contentStr = $keyword.$fromUsername.$time;
  41.      //$preg = "/^\#([\W\w]*?)\#([\W\w]*?)\#(.*)/"; //0为功能,1为选项,2为余下的值
  42.      //$preg = "/\#([\w]+)/"; //0为功能,1为选项,2为余下的值
  43.      $preg = "/\#([\w\d\x{4e00}-\x{9fa5}]+)/u"; //0为功能,1为选项,2为余下的值
  44.      preg_match_all($preg,$keyword,$newdata);
  45.      $fn_name = $newdata[1][0];
  46.      //获取快递的参数
  47.      if(strtolower($fn_name)=="skiy"){
  48.       $me = "我是此公众帐号的开发者,英文名Skiy。\n如果你对本功能有任何意见和建议,欢迎联系我,\n我的QQ是1005043848\n微信是forskiy,邮箱:\ndeveloper@zzzzy.com";
  49.       $contentStr = $me;
  50.      }      
  51.      //获取快递的参数
  52.      if($fn_name=="快递"||strtolower($fn_name)=="kuaidi"){
  53.       $kdlist = '';
  54.       //启用PDO连接sqlite的方式
  55.       $db = new PDO("sqlite:somedata/data.dat");
  56.       $results = $db->query('SELECT * FROM kuaidi')->fetchAll();
  57.       foreach ($results as $key=>$row) {
  58.        //var_dump($row);
  59.        //$list_one = $row['id']." ".$row['code']." ".$row['company']."\n";
  60.        $list_one = $row['id'].' '.$row['company']."\n";
  61.        $kdlist = $kdlist.$list_one;
  62.       }  
  63.       //主机支持sqlite3的方式
  64. /*      $db = new SQLite3("somedata/data.dat");
  65.       $results = $db->query('SELECT * FROM kuaidi');
  66.       while ($row = $results->fetchArray()) {
  67.        //var_dump($row);
  68.        $list_one = $row['id']." ".$row['code']." ".$row['company']."\n\r";
  69.        $kdlist = $kdlist.$list_one;
  70.       }  */  
  71.       $contentStr = $kdlist;
  72.      }
  73.      if($fn_name=="查快递"||strtolower($fn_name)=="ckd"){
  74.       $id = $newdata[1][1];
  75.       $num = $newdata[1][2];
  76.       $db = new PDO("sqlite:somedata/data.dat");
  77.       $results = $db->query('SELECT code,company FROM kuaidi WHERE id = '.$id)->fetchAll();
  78.       $code = $results[0]['code'];  //获取英文代码
  79.       $com = $results[0]['company'];  //获取公司名称
  80.       $numinfo = "快递:".$com."\n"."单号:".$num."\n";
  81.       $kd_url = "http://m.kuaidi100.com/query?type=".$code."&postid=".$num;
  82.       $json_getdata = file_get_contents($kd_url);
  83.       $get_kdinfo = json_decode($json_getdata);  //object
  84.       $get_kdinfo = json_decode($json_getdata,true); //array
  85.       $last_t = "查询时间:\n".$get_kdinfo['updatetime']."\n\n";  //查询时间
  86.       $kd_shipinfo = $get_kdinfo['data']; //快递数据数组
  87.       $kd_total = count($kd_shipinfo)-1;
  88.       $ship = '';
  89.       //物流倒序详情
  90.       for($i = $kd_total;$i>=0;$i--){
  91.        $shipinfo = $kd_shipinfo[$i]['time']."\n".$kd_shipinfo[$i]['context']."\n";
  92.        $ship = $shipinfo.$ship;
  93.       }
  94.       //顺序物流详情
  95.       /*foreach ($kd_shipinfo as $v){
  96.        $shipinfo = $v['time']."\n".$v['context']."\n";
  97.        $ship = $shipinfo.$ship;
  98.       }
  99.       */
  100.       $get_kdinfo = $numinfo.$last_t."【物流详情】\n".$ship;
  101.       if($ship){
  102.        $contentStr = $get_kdinfo;
  103.       }else{
  104.        $contentStr = $numinfo.">没有物流数据!";
  105.       }
  106.      }
  107.      $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  108.      echo $resultStr;
  109.     }else{
  110.      echo "Input something...";
  111.     }
  112.    }
  113.   }else {
  114.    echo "You have no enter something...";
  115.    exit;
  116.   }
  117. }
  118. //判断签名,返回bool
  119. private function checkSignature(){
  120.   $signature = $_GET["signature"];
  121.   $timestamp = $_GET["timestamp"];
  122.   $nonce = $_GET["nonce"];
  123.   $token = TOKEN;
  124.   $tmpArr = array($token, $timestamp, $nonce);
  125.   sort($tmpArr);
  126.   $tmpStr = implode( $tmpArr );
  127.   $tmpStr = sha1( $tmpStr );
  128.   if( $tmpStr == $signature ){
  129.    return true;
  130.   }else{
  131.    return false;
  132.   }
  133. }
  134. }
  135. 2. index.php文件:
  136. <?php
  137. /**
  138. *
  139. * 微信公众平台消息接口 For Fshare(分享资讯)
  140. * @author: Skiychan (Wechat:forskiy)
  141. * @created:2013.11.19
  142. *
  143. */
  144. include_once 'class.base.php';
  145. define('TOKEN', 'skiychan');
  146. $wx = new Wechat();
  147. //$wx->valid();
  148. $wx->responseMsg();
复制代码
希望本文所述对大家的php程序设计有所帮助。
回复

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网