微信公众平台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中操作Excel实例代码
Apr 29 PHP
PHP调用Webservice实例代码
Jul 29 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
php的闭包(Closure)匿名函数详解
Feb 22 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
zend framework中使用memcache的方法
Mar 04 PHP
Symfony2学习笔记之系统路由详解
Mar 17 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
Apr 20 PHP
PHP命名空间用法实例分析
Sep 04 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获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
PHP实现文件上传与下载
2020/08/28 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
js函数和this用法实例分析
2020/03/13 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
Python实现的二维码生成小软件
2014/07/11 Python
Python之父谈Python的未来形式
2016/07/01 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
Python如何对XML 解析
2020/06/28 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
环保专业大学生职业规划设计
2014/01/10 职场文书
开学季活动策划方案
2014/02/28 职场文书
房产买卖委托公证书
2014/04/04 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
品质保证书格式
2015/02/28 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
七年级话题作文之执着
2019/11/19 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
go goth封装第三方认证库示例详解
2022/08/14 Golang