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动态变静态原理
Nov 25 PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 PHP
php数组的概述及分类与声明代码演示
Feb 26 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
php使用iconv中文截断问题的解决方法
Feb 11 PHP
ThinkPHP中html:list标签用法分析
Jan 09 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
PHP实现简单ajax Loading加载功能示例
Dec 28 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
PHP手机号码及邮箱正则表达式实例解析
Jul 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
PHP中的string类型使用说明
2010/07/27 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
重定向实现代码
2006/11/20 Javascript
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
2014/06/06 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
遍历js中对象的属性和值的实例
2016/11/21 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
python黑魔法之参数传递
2016/02/12 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
python利用tkinter实现屏保
2019/07/30 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
Python PyQt5整理介绍
2020/04/01 Python
Python logging模块原理解析及应用
2020/08/13 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
几个常见的软件测试问题
2016/09/07 面试题
商家认证委托书格式
2014/10/16 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL
以下牛机,你有几个
2022/04/05 无线电