微信公众平台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扩展函数
Oct 09 PHP
实现了一个PHP5的getter/setter基类的代码
Feb 25 PHP
PHP Document 代码注释规范
Apr 13 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
Oct 29 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
php中的比较运算符详解
Oct 28 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
php简单图像创建入门实例
Jun 10 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
Laravel-admin之修改操作日志的方法
Sep 30 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 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类
2008/04/09 PHP
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
python静态方法实例
2015/01/14 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
Python线程指南分享
2019/11/19 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
python设置环境变量的作用整理
2020/02/17 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
自我评价怎么写好呢?
2013/12/05 职场文书
高职教师岗位职责
2013/12/24 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
社区工作者个人总结
2015/02/28 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
作文之亲情600字
2019/09/23 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
Python 文字识别
2022/05/11 Python