欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php微信公眾平臺(tái)開(kāi)發(fā)(三)訂閱事件處理

 更新時(shí)間:2016年12月06日 15:42:48   作者:David_Tang  
這篇文章主要介紹了php微信公眾平臺(tái)開(kāi)發(fā)中的訂閱事件處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、簡(jiǎn)介

新用戶關(guān)注微信公眾平臺(tái),將產(chǎn)生一個(gè)訂閱事件,即subscribe事件,默認(rèn)代碼中沒(méi)有對(duì)這一事件進(jìn)行相應(yīng)回復(fù)處理。

在新用戶關(guān)注公眾平臺(tái)后,可能想知道該平臺(tái)提供了哪些功能,以及怎樣使用該平臺(tái),通俗一點(diǎn)講就是該平臺(tái)的“使用說(shuō)明書”。

本文將詳細(xì)講述對(duì)subscribe事件的處理過(guò)程,回復(fù)相應(yīng)信息提升交互性。

二、思路分析

微信目前提供了五種消息類型,分別為:

  • 文本消息(text);
  • 圖片消息(image);
  • 地理位置消息(location);
  • 鏈接消息(link);
  • 事件推送(event);

接收到消息后,首先需要對(duì)消息類型做出判斷,然后再針對(duì)不同類型的消息做出處理。在事件推送中,事件類型又分為三種,subscribe(訂閱)、unsubscribe(取消訂閱)、CLICK(自定義菜單點(diǎn)擊事件),還需要再加一次判斷;判斷為subscribe事件后,根據(jù)設(shè)定好的歡迎消息,回復(fù)給用戶。

三、判斷消息類型

$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;
}

說(shuō)明:

$RX_TYPE = trim($postObj->MsgType);   
得到消息類型;

case "text":
  $resultStr = $this->handleText($postObj);   
使用handleText() 函數(shù)處理文本消息;

case "event":
  $resultStr = $this->handleEvent($postObj);   
使用handleEvent() 函數(shù)處理事件推送;

四、判斷事件類型

switch ($object->Event)
{
  case "subscribe":
    $contentStr = "感謝您關(guān)注【卓錦蘇州】"."\n"."微信號(hào):zhuojinsz"."\n"."卓越錦繡,名城蘇州,我們?yōu)槟峁┨K州本地生活指南,蘇州相關(guān)信息查詢,做最好的蘇州微信平臺(tái)。"."\n"."目前平臺(tái)功能如下:"."\n"."【1】 查天氣,如輸入:蘇州天氣"."\n"."【2】 查公交,如輸入:蘇州公交178"."\n"."【3】 翻譯,如輸入:翻譯I love you"."\n"."【4】 蘇州信息查詢,如輸入:蘇州觀前街"."\n"."更多內(nèi)容,敬請(qǐng)期待...";
    break;
  default :
    $contentStr = "Unknow Event: ".$object->Event;
    break;
}

說(shuō)明:

如果是subscribe事件,設(shè)定回復(fù)內(nèi)容為“感謝您關(guān)注【卓錦蘇州】...”;

五、完整代碼

<?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";
      $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 = "感謝您關(guān)注【卓錦蘇州】"."\n"."微信號(hào):zhuojinsz"."\n"."卓越錦繡,名城蘇州,我們?yōu)槟峁┨K州本地生活指南,蘇州相關(guān)信息查詢,做最好的蘇州微信平臺(tái)。"."\n"."目前平臺(tái)功能如下:"."\n"."【1】 查天氣,如輸入:蘇州天氣"."\n"."【2】 查公交,如輸入:蘇州公交178"."\n"."【3】 翻譯,如輸入:翻譯I love you"."\n"."【4】 蘇州信息查詢,如輸入:蘇州觀前街"."\n"."更多內(nèi)容,敬請(qǐng)期待...";
        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;
    }
  }
}

?>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • PHP實(shí)現(xiàn)偽靜態(tài)方法匯總

    PHP實(shí)現(xiàn)偽靜態(tài)方法匯總

    PHP偽靜態(tài)的使用主要是為了隱藏傳遞的參數(shù)名,下面給大家介紹php實(shí)現(xiàn)偽靜態(tài)的方法,對(duì)php實(shí)現(xiàn)偽靜態(tài)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • 解決laravel session失效的問(wèn)題

    解決laravel session失效的問(wèn)題

    今天小編就為大家分享一篇解決laravel session失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • Laravel實(shí)現(xiàn)表單提交

    Laravel實(shí)現(xiàn)表單提交

    本文給大家分享的是在使用laravel過(guò)程中如何實(shí)現(xiàn)表單提交的一個(gè)簡(jiǎn)單示例,非常簡(jiǎn)單,這里推薦給學(xué)習(xí)laravel的小伙伴
    2017-05-05
  • php兩點(diǎn)地理坐標(biāo)距離的計(jì)算方法

    php兩點(diǎn)地理坐標(biāo)距離的計(jì)算方法

    這篇文章主要為大家詳細(xì)介紹了php兩點(diǎn)地理坐標(biāo)距離的計(jì)算方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • CI(CodeIgniter)框架配置

    CI(CodeIgniter)框架配置

    今天研究了下CI框架的說(shuō)明文檔,打算在下次項(xiàng)目中用用看。先把今天看完的內(nèi)容整理整理,基本配置非常簡(jiǎn)單,好像在配置方面 在沒(méi)有比ci框架簡(jiǎn)便的了。。
    2014-06-06
  • Yii2框架RESTful API 格式化響應(yīng),授權(quán)認(rèn)證和速率限制三部分詳解

    Yii2框架RESTful API 格式化響應(yīng),授權(quán)認(rèn)證和速率限制三部分詳解

    今天通過(guò)本文給大家講下Yii2 RESTful的格式化響應(yīng),授權(quán)認(rèn)證和速率限制三個(gè)部分,對(duì)yii2 restful api相關(guān)知識(shí)感興趣的朋友一起看看吧
    2016-11-11
  • Laravel框架集成UEditor編輯器的方法圖文與實(shí)例詳解

    Laravel框架集成UEditor編輯器的方法圖文與實(shí)例詳解

    這篇文章主要介紹了Laravel框架集成UEditor編輯器的方法,結(jié)合圖文與實(shí)例形式詳細(xì)分析了Laravel框架整合集成UEditor編輯器的相關(guān)操作步驟與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-04-04
  • Yii 框架使用Forms操作詳解

    Yii 框架使用Forms操作詳解

    這篇文章主要介紹了Yii 框架使用Forms操作,結(jié)合實(shí)例形式分析了Yii 框架使用Forms模型、動(dòng)作創(chuàng)建及使用相關(guān)操作技巧,需要的朋友可以參考下
    2020-05-05
  • ecshop適應(yīng)在PHP7的修改方法解決報(bào)錯(cuò)的實(shí)現(xiàn)

    ecshop適應(yīng)在PHP7的修改方法解決報(bào)錯(cuò)的實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇ecshop適應(yīng)在PHP7的修改方法解決報(bào)錯(cuò)的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • php的laravel框架快速集成微信登錄的方法

    php的laravel框架快速集成微信登錄的方法

    本文面向的是php語(yǔ)言laravel框架的用戶,介紹的是基于該框架實(shí)現(xiàn)的一個(gè)簡(jiǎn)易集成微信登錄的方法,需要的朋友可以參考下
    2016-12-12

最新評(píng)論