PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

PHP编程:php微信公众平台开发(三)订阅事件处理

管理员 2025-02-27
工作总结
4

《PHP编程:php微信公众平台开发(三)订阅事件处理》要点:
本文介绍了PHP编程:php微信公众平台开发(三)订阅事件处理,希望对您有用。如果有疑问,可以联系我们。
 

PHP实例一、简介

PHP实例新用户关注微信公众平台,将产生一个订阅事件,即subscribe事件,默认代码中没有对这一事件进行相应回复处理.

PHP实例在新用户关注公众平台后,可能想知道该平台提供了哪些功能,以及怎样使用该平台,通俗一点讲就是该平台的“使用说明书”.

PHP实例本文将详细讲述对subscribe事件的处理过程,回复相应信息提升交互性.

PHP实例二、思路分析

PHP实例微信目前提供了五种消息类型,分别为:

  • 文本消息(text);

  • 图片消息(image);

  • 地理位置消息(location);

  • 链接消息(link);

  • 事件推送(event);

PHP实例接收到消息后,首先需要对消息类型做出判断,然后再针对不同类型的消息做出处理.在事件推送中,事件类型又分为三种,subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件),还需要再加一次判断;判断为subscribe事件后,根据设定好的欢迎消息,回复给用户.

PHP实例三、判断消息类型

PHP实例$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;}

PHP实例说明:

PHP实例$RX_TYPE = trim($postObj->MsgType);   得到消息类型;case "text":  $resultStr = $this->handleText($postObj);   使用handleText() 函数处理文本消息;case "event":  $resultStr = $this->handleEvent($postObj);   使用handleEvent() 函数处理事件推送;

PHP实例四、判断事件类型

PHP实例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;}

PHP实例说明:

PHP实例如果是subscribe事件,设定回复内容为“感谢您关注【卓锦苏州】...”;

PHP实例五、完整代码

PHP实例<?php/** * wechat php test *///define your tokendefine("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";      $contentStr = "Welcome to wechat world!";      $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;    }  }}?>



希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部