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


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 相关文章推荐
抓取YAHOO股票报价的类
May 15 PHP
PHP常用代码大全(新手入门必备)
Jun 29 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
php实现图片添加水印功能
Feb 13 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
CodeIgniter启用缓存和清除缓存的方法
Jun 12 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 16 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
php常用数学函数汇总
2014/11/21 PHP
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
javascript验证身份证号
2015/03/03 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
使用python实现生成用户信息
2017/03/20 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
python记录程序运行时间的三种方法
2017/07/14 Python
Python实现购物车程序
2018/04/16 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
django 简单实现登录验证给你
2019/11/06 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
python数据抓取3种方法总结
2021/02/07 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
简单说下OSPF的操作过程
2014/08/13 面试题
Ajax和javascript的区别
2013/07/20 面试题
三好学生自我鉴定
2013/12/17 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
创建青年文明号材料
2014/05/09 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
英文演讲稿开场白
2014/08/25 职场文书
合伙经营协议书范本
2014/09/13 职场文书
小学少先队活动总结
2015/05/08 职场文书
故意杀人案辩护词
2015/05/21 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书
什么是Python装饰器?如何定义和使用?
2022/04/11 Python