php微信公众平台开发(四)回复功能开发


Posted in PHP onDecember 06, 2016

一、简介

微信公众平台可以根据用户发送的信息进行判断,然后给出对应的回复,具有良好的交互性。下文将模拟简单的回复功能,根据这个案例,开发者也可以基本理解微信交互的原理,进行更深层次的开发。

二、思路分析

用户发送过来的文本信息,我们可以提取关键字,通过简单的 if...elseif...else... 实现。

关键代码如下:

if($keyword=="你好"){
$contentStr = "hello";
}elseif($keyword=="苏州"){
$contentStr = "上有天堂,下有苏杭";
}else{
$contentStr = "感谢您关注【卓锦苏州】 微信号:zhuojinsz";
}

如果用户发送"你好",则回复"hello",如果用户发送"苏州",则回复"上有天堂,下有苏杭",其他信息,则回复你的欢迎词。

三、完整代码

<?php
/**
 * wechat php test
 */

//define your token
define("TOKEN", "zhuojin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
//$wechatObj->valid();

class wechatCallbackapiTest
{
  /*public function valid()
  {
    $echoStr = $_GET["echostr"];

    //valid signature , option
    if($this->checkSignature()){
      echo $echoStr;
      exit;
    }
  }*/

  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);
        $RX_TYPE = trim($postObj->MsgType);

        switch($RX_TYPE)
        {
          case "text":
            $resultStr = $this->handleText($postObj);
            break;
          case "event":
            $resultStr = $this->handleEvent($postObj);
            break;
          default:
            $resultStr = "Unknow msg type: ".$RX_TYPE;
            break;
        }
        echo $resultStr;
    }else {
      echo "";
      exit;
    }
  }

  public function handleText($postObj)
  {
    $fromUsername = $postObj->FromUserName;
    $toUsername = $postObj->ToUserName;
    $keyword = trim($postObj->Content);
    $time = time();
    $textTpl = "<xml>
          <ToUserName><![CDATA[%s]]></ToUserName>
          <FromUserName><![CDATA[%s]]></FromUserName>
          <CreateTime>%s</CreateTime>
          <MsgType><![CDATA[%s]]></MsgType>
          <Content><![CDATA[%s]]></Content>
          <FuncFlag>0</FuncFlag>
          </xml>";       
    if(!empty( $keyword ))
    {
      $msgType = "text";

      if($keyword=="你好"){
        $contentStr = "hello";
      }elseif($keyword=="苏州"){
        $contentStr = "上有天堂,下有苏杭";
      }else{
        $contentStr = "感谢您关注【卓锦苏州】 微信号:zhuojinsz";
      }
      $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
      echo $resultStr;
    }else{
      echo "Input something...";
    }
  }

  public function handleEvent($object)
  {
    $contentStr = "";
    switch ($object->Event)
    {
      case "subscribe":
        $contentStr = "感谢您关注【卓锦苏州】"."\n"."微信号:zhuojinsz"."\n"."卓越锦绣,名城苏州,我们为您提供苏州本地生活指南,苏州相关信息查询,做最好的苏州微信平台。"."\n"."目前平台功能如下:"."\n"."【1】 查天气,如输入:苏州天气"."\n"."【2】 查公交,如输入:苏州公交178"."\n"."【3】 翻译,如输入:翻译I love you"."\n"."【4】 苏州信息查询,如输入:苏州观前街"."\n"."更多内容,敬请期待...";
        break;
      default :
        $contentStr = "Unknow Event: ".$object->Event;
        break;
    }
    $resultStr = $this->responseText($object, $contentStr);
    return $resultStr;
  }
  
  public function responseText($object, $content, $flag=0)
  {
    $textTpl = "<xml>
          <ToUserName><![CDATA[%s]]></ToUserName>
          <FromUserName><![CDATA[%s]]></FromUserName>
          <CreateTime>%s</CreateTime>
          <MsgType><![CDATA[text]]></MsgType>
          <Content><![CDATA[%s]]></Content>
          <FuncFlag>%d</FuncFlag>
          </xml>";
    $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
    return $resultStr;
  }


  private function checkSignature()
  {
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];  
        
    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    
    if( $tmpStr == $signature ){
      return true;
    }else{
      return false;
    }
  }
}

?>

四、测试

php微信公众平台开发(四)回复功能开发

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP+DBM的同学录程序(1)
Oct 09 PHP
目录,文件操作详谈―PHP
Nov 25 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
PHP中使用php://input处理相同name值的表单数据
Feb 03 PHP
PHP获取数组长度或某个值出现次数的方法
Feb 11 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
php微信公众平台开发(三)订阅事件处理
Dec 06 #PHP
php微信公众平台示例代码分析(二)
Dec 06 #PHP
php微信公众平台开发(一) 配置接口
Dec 06 #PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 #PHP
php简单实现文件或图片强制下载的方法
Dec 06 #PHP
php+ajax无刷新上传图片的实现方法
Dec 06 #PHP
php解析base64数据生成图片的方法
Dec 06 #PHP
You might like
ajax缓存问题解决途径
2006/12/06 PHP
8个必备的PHP功能开发
2015/10/02 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
js静态作用域的功能。
2006/12/25 Javascript
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
python实现中文文本分句的例子
2019/07/15 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
总经理职责范文
2013/11/08 职场文书
化学专业毕业生自荐信
2013/11/15 职场文书
房地产出纳岗位职责
2013/12/01 职场文书
保险公司晨会主持词
2014/03/22 职场文书
银行求职信范文
2014/05/26 职场文书
环卫工作汇报材料
2014/10/28 职场文书
违纪学生保证书
2015/02/27 职场文书
指导老师鉴定意见
2015/06/05 职场文书
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python