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中的 == 运算符进行字符串比较
Nov 26 PHP
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Jun 04 PHP
php 安全过滤函数代码
May 07 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 PHP
php二维码生成
Oct 19 PHP
php使用高斯算法实现图片的模糊处理功能示例
Nov 11 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
对laravel的session获取与存取方法详解
Oct 08 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/06/30 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
Ext.MessageBox工具类简介
2009/12/10 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
Python如何将模块打包并发布
2020/08/30 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
美国现代家具购物网站:LexMod
2019/01/09 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
货车司机岗位职责
2014/03/18 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
运动会加油稿
2015/07/22 职场文书
幼儿园亲子活动感想
2015/08/07 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
python 提取html文本的方法
2021/05/20 Python
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL