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 开发工具
Dec 06 PHP
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
模板引擎正则表达式调试小技巧
Jul 20 PHP
深入掌握include_once与require_once的区别
Jun 17 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
php的hash算法介绍
Feb 13 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 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 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
取得传值的函数
2006/10/27 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
在jQuery 1.5中使用deferred对象的代码(翻译)
2011/03/10 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
详谈JavaScript内存泄漏
2014/11/14 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
结构和类有什么异同
2012/07/16 面试题
学年自我鉴定范文
2013/10/01 职场文书
办理暂住证介绍信
2014/01/11 职场文书
初一数学教学反思
2016/02/17 职场文书
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android