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中几种常见安全设置详解
Apr 06 PHP
深入for,while,foreach遍历时间比较的详解
Jun 08 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
Jan 19 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
php实现的双向队列类实例
Sep 24 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
Mar 03 PHP
PHP 实现公历日期与农历日期的互转换
Sep 13 PHP
PHP简单实现解析xml为数组的方法
May 02 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
May 23 PHP
php数值计算num类简单操作示例
May 15 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
jquery操作 iframe的方法
2014/12/03 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
js轮播图代码分享
2016/07/14 Javascript
JavaScript类的写法
2016/09/17 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
使用RxJS更优雅地进行定时请求详析
2019/06/02 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
浅述python中argsort()函数的实例用法
2017/03/30 Python
Python优先队列实现方法示例
2017/09/21 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
意大利辅助药品、药物和补品在线销售:FarmaEurope
2020/04/29 全球购物
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
中国梦演讲稿教师篇
2014/04/23 职场文书
快递员岗位职责
2014/09/12 职场文书
警察群众路线整改措施
2014/09/26 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
CSS实现鼠标悬浮动画特效
2023/05/07 HTML / CSS