微信公众平台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 相关文章推荐
PHP_MySQL教程-第一天
Mar 18 PHP
php 多线程上下文中安全写文件实现代码
Dec 28 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
基于python发送邮件的乱码问题的解决办法
Apr 25 PHP
如何用php获取文件名后缀
Jun 09 PHP
8个PHP数组面试题
Jun 23 PHP
四个PHP非常实用的功能
Sep 29 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
Jul 17 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 PHP
tp5.1框架数据库子查询操作实例分析
May 26 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 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 CURL获取邮箱地址的详解
2013/06/03 PHP
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
php array_map()函数实例用法
2021/03/03 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
Python中运行并行任务技巧
2015/02/26 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
应用服务器有那些
2012/01/19 面试题
金融专业应届生求职信
2013/11/02 职场文书
迟到检讨书800字
2014/01/13 职场文书
学生喝酒检讨书
2014/02/06 职场文书
小学班级口号
2014/06/09 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
员工生日活动方案
2014/08/24 职场文书
2014年技术员工作总结
2014/11/18 职场文书
如何写辞职书
2015/02/26 职场文书
员工自我工作评价
2015/03/06 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
Android 中的类文件和类加载器详情
2022/06/05 Java/Android