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


Posted in PHP onApril 14, 2015

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

使用方法:

#查快递(或三个首字母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程序设计有所帮助。

PHP 相关文章推荐
在线竞拍系统的PHP实现框架(一)
Oct 09 PHP
PHP分页显示制作详细讲解
Dec 05 PHP
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
Jan 06 PHP
php调用mysql数据 dbclass类
May 07 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
Mar 19 PHP
php使用MySQL保存session会话的方法
Jun 18 PHP
PHP实现SMTP邮件的发送实例
Sep 27 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
Oct 12 PHP
php生成rss类用法实例
Apr 14 #PHP
php修改上传图片尺寸的方法
Apr 14 #PHP
php动态添加url查询参数的方法
Apr 14 #PHP
php保存任意网络图片到服务器的方法
Apr 14 #PHP
php实现改变图片直接打开为下载的方法
Apr 14 #PHP
php计算到指定日期还有多少天的方法
Apr 14 #PHP
php返回相对时间(如:20分钟前,3天前)的方法
Apr 14 #PHP
You might like
菜单效果
2006/10/14 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
详解C++编程中一元运算符的重载
2016/01/19 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
幼儿园大班教学反思
2014/02/10 职场文书
学生干部培训方案
2014/06/12 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
合作意向协议书
2015/01/29 职场文书
建党伟业观后感
2015/06/01 职场文书
护理工作心得体会
2016/01/22 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python
浅谈MySQL user权限表
2021/06/18 MySQL