微信公众平台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
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
php 深入理解strtotime函数的使用详解
May 23 PHP
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
preg_match_all使用心得分享
Jan 31 PHP
PHP根据两点间的经纬度计算距离
Oct 31 PHP
php数组操作之键名比较与差集、交集赋值的方法
Nov 10 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
php从csv文件读取数据并输出到网页的方法
Mar 14 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
php的array_multisort()使用方法介绍
2012/05/16 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
php自动加载代码实例详解
2021/02/26 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
jquery移动节点实例
2015/01/14 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
DOM事件探秘篇
2017/02/15 Javascript
js实现一键复制功能
2017/03/16 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
python实现机器人行走效果
2018/01/29 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
python实现的Iou与Giou代码
2020/01/18 Python
pytorch 修改预训练model实例
2020/01/18 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
台湾家适得:Homeget
2019/02/11 全球购物
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
施工员岗位职责
2014/03/16 职场文书
关于责任的演讲稿
2014/05/20 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
真诚的求职信
2014/07/04 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
Golang jwt身份认证
2022/04/20 Golang