微信公众平台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 相关文章推荐
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
php error_log 函数的使用
Apr 13 PHP
php程序之die调试法 快速解决错误
Sep 17 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
应用开发中涉及到的css和php笔记分享
Aug 02 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
网站防止被刷票的一些思路与方法
Jan 08 PHP
smarty循环嵌套用法示例分析
Jul 19 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
PHP+MySQL实现模糊查询员工信息功能示例
Jun 01 PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 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开发注意事项总结
2015/02/04 PHP
php程序内部post数据的方法
2015/03/31 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
Vue 2.0 中依赖注入 provide/inject组合实战
2019/06/20 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
js实现点赞效果
2020/03/16 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
python条件和循环的使用方法
2013/11/01 Python
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
python微信撤回监测代码
2019/04/29 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
J2EE包括哪些技术
2016/11/25 面试题
股东授权委托书范本
2014/09/13 职场文书
毕业生学校组织意见
2015/06/04 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript
Redis基本数据类型List常用操作命令
2022/06/01 Redis
Java 多线程并发FutureTask
2022/06/28 Java/Android