微信公众平台DEMO(PHP)


Posted in PHP onMay 04, 2016

本人在SAE环境下搭建了CI框架(其实这个小东西用不着用框架的),直接把代码写在了控制器里面

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
//define your token
define("TOKEN", "109");
 
class Welcome extends CI_Controller {
 
  public function index()
  {
    /*
    $this->load->helper('url');
    $this->load->view('welcome_message');
    */
     
    // use chat response
    $this->responseMsg();
   
  }
   
  // chat response
  public function responseMsg()
  {
    //get post data, May be due to the different environments
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 
     //extract post data
    if (!empty($postStr)){
       
      $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
      $fromUsername = $postObj->FromUserName;
      $toUsername = $postObj->ToUserName;
      $MsgType = $postObj->MsgType;
      $time = time();
       
      switch($MsgType){
        case('text'):
          $keyword = trim($postObj->Content);
          $textTpl = "<xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[%s]]></MsgType>
                <Content><![CDATA[%s]]></Content>
                </xml>";
          switch($keyword){
            case(1):
              // Need to optimize
              // random read data from jokes
              $sql = 'SELECT * FROM jokes';
              $query = $this->db->query($sql);
              $res = $query->result_array();
              $num_rows = $query->num_rows();
              $key = rand(0, $num_rows - 1); // Notice: The value of key is from 0.
              //$contentStr = $key.'#'.$res[$key ]['content']; // debug
              $contentStr = $res[$key ]['content']; 
              break;
            case(2):
              $contentStr = 'Your fromUsername is: '.$fromUsername; 
              break;             
            case(3):
              $newsTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <ArticleCount>2</ArticleCount>
                     
                    <Articles>
                      <item>
                        <Title><![CDATA[%s]]></Title> 
                        <Description><![CDATA[%s]]></Description>
                        <PicUrl><![CDATA[%s]]></PicUrl>
                        <Url><![CDATA[%s]]></Url>
                      </item>
                      <item>
                        <Title><![CDATA[%s]]></Title>
                        <Description><![CDATA[%s]]></Description>
                        <PicUrl><![CDATA[%s]]></PicUrl>
                        <Url><![CDATA[%s]]></Url>
                      </item>
                    </Articles>
                     
                    </xml> ";
                     
              $resultStr = sprintf($newsTpl, $fromUsername, $toUsername, $time,'news',
                '百度','', 'http://www.baidu.com/img/bdlogo.gif', 'http://www.baidu.com',
                'Google','', '', 'http://www.google.com'); // Notice: Google's logo is not suitable.
              echo $resultStr;
              exit; // Notice: It's exit, not break.                
            case(4):
              $contentStr = "该功能正在开发中,敬请期待..."; 
              break;
               
            /* others */
             
            default:
              $contentStr = "回复数字 选择服务\n";
              $contentStr .= "1 笑话精选\n";
              $contentStr .= "2 获取您的Username...\n";  
              $contentStr .= "3 图文消息示例\n"; 
              $contentStr .= "4 开发中...\n"; 
              break;
          }
          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, 'text', $contentStr);
          break;
           
        case('image'):
           
          $media_id = $postObj->MediaId;
          $imgTpl = "<xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[%s]]></MsgType>
                <Image>
                  <MediaId><![CDATA[%s]]></MediaId>
                </Image>
                </xml>";
          $resultStr = sprintf($imgTpl, $fromUsername, $toUsername, $time, 'image', $media_id);
          break;
           
          // try get the id of the receive image and analyse
          /*
          $media_id = $postObj->MediaId;
          $textTpl = "<xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[%s]]></MsgType>
                <Content><![CDATA[%s]]></Content>
                </xml>";
          $length = strlen($media_id);
          $contentStr = "I have received the image message you sent, the id of this image is # $media_id #, and the length of media_id is # $length #";
          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, 'text', $contentStr);
          break;
          */
           
        case('voice'):
          $textTpl = "<xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[%s]]></MsgType>
                <Content><![CDATA[%s]]></Content>
                </xml>"; 
          $contentStr = '你说啥?俺听不见...';
          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, 'text', $contentStr);
          break;
         
        /* others */
         
        default:
          $resultStr = "Input something...";
          break;
      }
      echo $resultStr;
       
    }else {
      echo "";
      exit;
    }
  }
}
PHP 相关文章推荐
一个ubbcode的函数,速度很快.
Oct 09 PHP
discuz Passport 通行证 整合笔记
Jun 30 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
Zend Guard使用指南及问题处理
Jan 07 PHP
php实现多城市切换特效
Aug 09 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
详解PHP数据压缩、加解密(pack, unpack)
Dec 17 PHP
PHP对象相关知识总结
Apr 09 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 PHP
PHP如何解决微信文章图片防盗链
Dec 09 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 #PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
May 04 #PHP
PHP实现获取并生成数据库字典的方法
May 04 #PHP
PHP创建/删除/复制文件夹、文件
May 03 #PHP
Yii2使用swiftmailer发送邮件的方法
May 03 #PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 #PHP
Yii2 输出xml格式数据的方法
May 03 #PHP
You might like
php 错误处理经验分享
2011/10/11 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
php强制运行广告的方法
2014/12/01 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
2020/08/03 PHP
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
vue内置指令详解
2018/04/03 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
Python正则表达式介绍
2012/08/06 Python
Python subprocess模块学习总结
2014/03/13 Python
python计算书页码的统计数字问题实例
2014/09/26 Python
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
Python中Qslider控件实操详解
2021/02/20 Python
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
医学毕业生自荐信
2013/10/11 职场文书
法律专业学生的自我评价
2014/02/07 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript
MySQL 如何分析查询性能
2021/05/12 MySQL