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


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 相关文章推荐
一个MYSQL操作类
Nov 16 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
php提交post数组参数实例分析
Dec 17 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
Dec 24 PHP
PHP设计模式之观察者模式实例
Feb 22 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
Feb 25 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 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来写记数器(详细介绍)
2006/10/09 PHP
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
初步介绍PHP扩展开发经验分享
2012/09/06 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
CI框架的安全性分析
2016/05/18 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
javascript 学习笔记(onchange等)
2010/11/14 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
python代码xml转txt实例
2020/03/10 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
文秘专业应届生求职信范文
2013/11/14 职场文书
啦啦队口号大全
2014/06/16 职场文书
先进工作者申报材料
2014/12/23 职场文书
安全第一课观后感
2015/06/18 职场文书
Django+Celery实现定时任务的示例
2021/06/23 Python
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis