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入门源程序
Oct 09 PHP
PHP中创建图像并绘制文字的例子
Nov 19 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
php微信支付接口开发程序
Aug 02 PHP
phpmyadmin下载、安装、配置教程
May 16 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
Mar 15 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
微信JSSDK分享功能图文实例详解
Apr 08 PHP
PHP 裁剪图片
Mar 09 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
php 获取mysql数据库信息代码
2009/03/12 PHP
通过具体程序来理解PHP里面的抽象类
2010/01/28 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
2014/07/01 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
基于vue实现可搜索下拉框定制组件
2020/03/26 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
在Django的session中使用User对象的方法
2015/07/23 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
Python变量类型知识点总结
2019/02/18 Python
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
领导工作表现评语
2015/01/04 职场文书
会计岗位职责范本
2015/04/02 职场文书
青年志愿者活动感想
2015/08/07 职场文书
MySQL慢查询优化解决问题
2022/03/17 MySQL