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 相关文章推荐
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
php笔记之:有规律大文件的读取与写入的分析
Apr 26 PHP
深入apache host的配置详解
Jun 09 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
Nov 20 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 PHP
PHP实现考试倒计时功能代码
Apr 16 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
jQuery 联动日历实现代码
2012/05/31 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
Python编码类型转换方法详解
2016/07/01 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
python实现视频读取和转化图片
2019/12/10 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
Pycharm修改python路径过程图解
2020/05/22 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
美国NBA官方商店:NBA Store
2019/04/12 全球购物
门卫人员岗位职责
2013/12/24 职场文书
五好关工委申报材料
2014/05/31 职场文书
机电一体化专业求职信
2014/07/22 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书