微信公众平台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处理整数函数的详解
Jun 09 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
yii操作session实例简介
Jul 31 PHP
PHP读书笔记整理_结构语句详解
Jul 01 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
php根据命令行参数生成配置文件详解
Mar 15 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 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 socket(fsockopen)的应用实例分析
2013/06/02 PHP
php函数与传递参数实例分析
2014/11/15 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
搭建vue开发环境
2018/07/19 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
Python之py2exe打包工具详解
2017/06/14 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
python实现汽车管理系统
2018/11/30 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
css3的transition属性详解
2014/12/15 HTML / CSS
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
毕业证代领委托书
2014/09/26 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
2015年药店工作总结
2015/04/20 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
导游词之井冈山
2019/11/20 职场文书