微信公众平台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 相关文章推荐
最省空间的计数器
Oct 09 PHP
PHP获取php,mysql,apche的版本信息示例代码
Jan 16 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
php技术实现加载字体并保存成图片
Jul 27 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
PHP实现根据密码长度显示安全条
Jul 04 PHP
PHP的mysqli_sqlstate()函数讲解
Jan 23 PHP
PHP实现的多进程控制demo示例
Jul 22 PHP
Laravel 连接(Join)示例
Oct 16 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/03/27 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
PJBlog插件 防刷新的在线播放器
2006/10/25 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
初步理解Python进程的信号通讯
2015/04/09 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
快速了解Python开发环境Spyder
2020/06/29 Python
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
法律专业应届生自荐信范文
2014/01/06 职场文书
《阳光》教学反思
2014/02/23 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
助学感谢信范文
2015/01/21 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
运动会100米加油稿
2015/07/21 职场文书
Python+tkinter实现高清图片保存
2022/03/13 Python