微信公众平台DEMO(PHP)

本人在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;
    }
  }
}
(0)

相关推荐

  • PHP中的.htaccess伪静态文件

    工具/原料 url重写 iis7 方法/步骤 安装iis,这个就不多说了.使用系统自带的启动或关闭windows功能来安装. http://www.microsoft.com/web/downloads/,下载并安装"web 平台安装程序",目前最新版本为5.0,双击,下一步到底即可. 打开Internet Information Services(IIS)管理器,在管理中已经多了一个"Web 平台安装程序",双击打开. 搜索"url",搜索结果

  • Centos安装php高版本

    Centos系统自带的php版本很低,如果我们需要使用高版本的php,可以不用编译安装,直接用yum安装会非常省时省力. 简介 PHP(超文本预处理器)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.PHP 独特的语法混合了C.Java.Perl以及PHP自创的语法. 用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多

  • PHP.vs.JAVA

    现在市场上的OA基本上可归结为两大阵营,即php阵营和java阵营.但对接触Oa不久的用户来说,看到的往往只是它们的表相,只是明显的价格差异,却很难看出它们之间的实际差异.其实, PHP + MYSQL 不值钱不仅仅局限于oa软件,而是整体上PHP + MYSQL开发的软件都不如java开发的软件值钱.为什么PHP + MYSQL 的OA为什么不值钱呢?首先得明白php和java之间的差异才行. 1.系统的技术架构比较  分层是将系统进行有效组织的方式,分而治之的思想是计算机领域中非常重要的思想

  • 100行PHP代码实现socks5代理服务器

    前两天在B站上看到一个小伙纸100元组装个电脑打LOL画质流畅,突发奇想100行代码能(简单)实现个啥好玩的.我主要是做php开发的,于是就有了本文. 当然,由于php(不算swoole扩展)本身不擅长做网络服务端编程,所以这个代理,只是个玩具,离日常使用有点距离.如果想使用稳定可靠的加密(所以能禾斗学上网)代理,可以用这个:https://github.com/momaer/asocks-go也是100来行代码使用go实现. 写的过程中发现php多线程还是难的.比如我开始想每个连接新建一个线程

  • 抛弃 PHP 代价太高

    前言 我初次尝试编程使用的语言是php,并且在数个使用php作为主要开发语言的公司工作过.但是,我并不会对其他语言视而不见,并且现如今php已经不是我主要的开发语言了. 我认为我是一个可以因为"不需要过度担心语言设计"与"尽可能轻松地快速地赚钱.完成工作"就会很快乐的人.我最近刚从一个主要以php作为前端开发的全职工作岗位中离职. 最近我通读了那篇虽然已经陈旧但仍勾起如此真实的痛苦,以至于我无法再忽视的博文<Eevee.PHP:糟糕的设计带来的碎片 >.

  • java解析php函数json_encode unicode 编码问题

    android开发中在和服务器端接口对接时出现编码问题,从服务器端获取到的数据是 "\u8bbe\u59071ID-\u8bbe\u59071\u540d\u79f0;\u8bbe\u59073id-\u8bbe\u59073\u540d\u79f0;\u8bbe\u59077id-\u8bbe\u59077\u540d\u79f0" 接口是通过php函数中json_encode进行编码后返回的,在客户端通过java.net.URLdecoder.decode()解码不管用,但是直接将

  • win10环境PHP 7 安装配置【教程】

    PHP 7出来好一段时间了,前些日子工作比较忙,没时间研究,现在有点时间了,公司里生产环境不能随便升级,家里自己的电脑还是可以装一下看看效果的. 下面简单说明一下PHP 7 + Apache 2.4的安装. Apache 2.4 安装配置 安装 Apache 2.4,在官方网站上没有Windows下的编译版本,需要到http://httpd.apache.org/docs/2.4/platform/windows.html找到提供Windows编译版本下载的镜像网站,我用的是:http://ww

  • wdcp添加tomcat,同时支持php和java教程

    用wdcp官方提供的脚本安装lnamp环境,安装请参考:http://www.wdlinux.cn/bbs/thread-6292-1-1.html,本文主要讲如何在LNAMP环境下安装JDK+Tomcat6使同一台服务器同时支持PHP和JAVA语言.服务器系统和各软件版本如下所示 [root@E ~]# uname -a Linux E.CentOS6.4 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_

  • java URL 获取PHP JSON 数据

    1:php地址  http://127.0.0.6/?c=json 2:java 输出的结果是 [{"id":1,"name":"zhdc"},{"id":2,"name":"\u5c0f\u6731"}] index.php <?php if(isset($_REQUEST['c'])){ $c = $_REQUEST['c']; if($c == "json"

  • 100多行PHP代码实现socks5代理服务器[2]

    100多行PHP代码实现socks5代理服务器,这次是使用swoole纯异步来写,使用状态机来处理数据.目前用它访问开源中国木有压力,但访问网易新闻就压力山大.我发现我用别的语言写得代理,访问网易新闻都压力大.嘎嘎,学艺不精. 对swoole理解不深,不知道怎么处理socket shutdown只关闭读/写这样,还有就是连接超时,读写超时这种怎么处理.在网上看到作者说要用定时器,感觉好麻烦,所以,这次的代理,虽然个人用,一般不会有什么问题,但离产品级的代理,还有段路要走. 如果要利用多核,就使用

  • php面向对象值单例模式

    单例模式(职责模式): 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 单例类: 1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化: 2.拥有一个保存类的实例的静态成员变量 3.拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化) 另外,需要创建__clone()方法防止对

  • win7下搭建nginx+php的开发环境

    一.下载相关软件 nginx下载:http://nginx.org/en/download.html nginx常见异常:http://feiger.cn/?p=2719 php下载:http://windows.php.net/download#php-7.0 下载RunHiddenConsole:http://www.xdowns.com/soft/1/71/2012/Soft_89261.html 二.配置 nginx.conf文件,我的编辑结果如下所示,具体配置过程中需要注意什么请看注释

  • PHPExcel笔记, mpdf导出

    phpexcel常用处理 ##导入类库 require 'PHPExcel/Classes/PHPExcel.php'; require 'PHPExcel/Classes/PHPExcel/Writer/Excel5.php'; //非07格式的写出类 ##基础属性设定 $objPHPExcel = \PHPExcel_IOFactory::load('a.xls'); //读入指定excel文件 $objPHPExcel->setActiveSheetIndex(0); //指定活动工作表

随机推荐