微信公众平台DEMO(PHP)

5年以前  |  阅读数:402 次  |  编程语言: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;
        }
      }
    }
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例