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 小乘法表实现代码
Jul 16 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
CentOS6.5 编译安装lnmp环境
Dec 21 PHP
php实现将数组转换为XML的方法
Mar 09 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
浅谈PHP的反射机制
Dec 15 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 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 set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
JS实现密码框效果
2020/09/10 Javascript
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
求职面试个人自我评价
2014/02/28 职场文书
社区平安建设方案
2014/05/25 职场文书
亲子阅读的活动方案
2014/08/15 职场文书
老干部工作汇报材料
2014/10/28 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
《迟到》教学反思
2016/02/24 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
SSM VUE Axios详解
2021/10/05 Vue.js
SQL Server实现分页方法介绍
2022/03/16 SQL Server
MySQL创建表操作命令分享
2022/03/25 MySQL
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android