微信公众平台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+iframe实现隐藏无刷新上传文件
Feb 10 PHP
php简单实现无限分类树形列表的方法
Mar 27 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
PHP面相对象中的重载与重写
Feb 13 PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
php curl批处理实现可控并发异步操作示例
May 09 PHP
php微信开发之图片回复功能
Jun 14 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
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
在Python的Django框架中创建和使用模版
2015/07/15 Python
python画图常规设置方式
2020/03/05 Python
Python对象的属性访问过程详解
2020/03/05 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
EJB3.1都有哪些改进
2012/11/17 面试题
安全员岗位职责
2013/11/11 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
公司运动会策划方案
2014/05/25 职场文书
法制宣传口号
2014/06/16 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
资料员岗位职责
2015/02/10 职场文书
出生证明范本
2015/06/15 职场文书
2015国庆节感想
2015/08/04 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
如何用Navicat操作MySQL
2021/05/12 MySQL
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android