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 相关文章推荐
Oracle 常见问题解答
Oct 09 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
php学习之 数组声明
Jun 09 PHP
eaglephp使用微信api接口开发微信框架
Jan 09 PHP
php获取目标函数执行时间示例
Mar 04 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
微信公众平台开发实现2048游戏的方法
Apr 15 PHP
详解WordPress开发中get_header()获取头部函数的用法
Jan 08 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
php无限级评论嵌套实现代码
Apr 18 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 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 session处理的定制
2009/03/16 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
某公司.Net方向面试题
2014/04/24 面试题
中专生自我鉴定范文
2013/12/19 职场文书
我的求职计划书
2014/01/10 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
人力资源部岗位职责
2015/02/11 职场文书
开票证明
2015/06/23 职场文书
vue+element ui实现锚点定位
2021/06/29 Vue.js
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技