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


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文件上传实例详解!!!
Jan 02 PHP
Wordpress php 分页代码
Oct 21 PHP
PHP OPCode缓存 APC详细介绍
Oct 12 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
php删除左端与右端空格的方法
Nov 29 PHP
CI框架给视图添加动态数据
Dec 01 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
PHP图片水印类的封装
Jul 06 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
PHP配置ZendOpcache插件加速
Feb 14 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
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
JavaScript Eval 函数使用
2010/03/23 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
python3序列化与反序列化用法实例
2015/05/26 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
Python hashlib模块加密过程解析
2019/11/05 Python
如何理解python对象
2020/06/21 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
银行存款证明样本
2014/01/17 职场文书
大课间活动制度
2014/01/18 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
个人求职信格式范文
2015/03/20 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript