微信公众平台消息接口开发从Hello2BizUser文本到subscribe事件

互联网 17-3-4
一、Hello2BizUser旧事件的处理

在老的关注事件中,用户关注微信公众平台账号后,系统会帮用户发送一条Hello2BizUser的文本给公众账号,公众账号后台开发模式下通过判断Hello2BizUser这个词来实现发送欢迎词。

代码样例如下:

if ($keyword == "Hello2BizUser"){      $contentStr = "PHP中文网";      $resultStr = $this->transmitText($object, $contentStr, $funcFlag);      return $resultStr;  }

做出基础接口上的修改,影响会是所有人。一般不会轻易做这样的改动。

为什么微信要修改这一事件了,这个方法的弊端在于,如果用户没有判断这一事件,那么就不会有欢迎词,本来这也没什么关系,不出现欢迎词也不影响什么。但很多人的程序代码里面,所有流程直接就是判断关键词。比如我们曾看到过一家医院的微信账号,用户发送挂号的号码,就显示前面有多少人排列,但后台程序没有做区分,把Hello2BizUser也当成挂号单发送过去,返回没有找到Hello2BizUser这一挂号,不知道前面有多少人,搞得用户莫名奇妙。还有就是用户如果主动发送一个Hello2BizUser过去,那么得到的也是和欢迎词一样的内容,虽然很少有用户会去发这个东西。

另一方面,将用户关注做成事件,更有利于统计功能的实现。利用这个事件,我们就更能容易的判断出关注人数和退订人数,而原来的Hello2BizUser文本推送判断是有可能不准确的,因为用户可以手工发送,形成虚假关注统计。

二、“subscribe”订阅事件判断

subscribe是一种新的事件,我们先需要做事件类型做判断,我们在官方样例中增加对这一事件的判断,修改如下:

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);  $RX_TYPE = trim($postObj->MsgType);    switch ($RX_TYPE)  {      case "text":          $resultStr = $this->receiveText($postObj);          break;      case "event":          $resultStr = $this->receiveEvent($postObj);          break;      default:          $resultStr = "unknow msg type: ".$RX_TYPE;          break;  }

然后在事件接收处理函数中再判断订阅事件 :

private function receiveEvent($object)  {      $contentStr = "";      switch ($object->Event)      {          case "subscribe":              $contentStr = "您好,欢迎关注方倍工作室。新感觉,新体验!";              break;      }      $resultStr = $this->transmitText($object, $contentStr);      return $resultStr;  }

这样就完成了“subscribe”的订阅事件下的处理。

二、完整代码

<?php  define("TOKEN", "方倍工作室");  $wechatObj = new wechatCallbackapiTest();  $wechatObj->responseMsg();    class wechatCallbackapiTest  {      public function responseMsg()      {          $postStr = $GLOBALS["HTTP_RAW_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->receiveText($postObj);                      break;                  case "event":                      $resultStr = $this->receiveEvent($postObj);                      break;                  default:                      $resultStr = "unknow msg type: ".$RX_TYPE;                      break;              }              echo $resultStr;          }else {              echo "";              exit;          }      }        private function receiveText($object)      {          $funcFlag = 0;          $keyword = trim($object->Content);          $resultStr = "";          $cityArray = array();          $contentStr = "";          $needArray = false;          $illegal = false;          $saytome = false;                    if ($keyword == "Hello2BizUser"){              $contentStr = "欢迎关注方倍工作室,这其实是老的欢迎词,你关注时收不到了";              $resultStr = $this->transmitText($object, $contentStr, $funcFlag);              return $resultStr;          }else {                    }      }        private function receiveEvent($object)      {          $contentStr = "";          switch ($object->Event)          {              case "subscribe":                  $contentStr = "您好,欢迎关注方倍工作室。新感觉,新体验!";                  break;          }          $resultStr = $this->transmitText($object, $contentStr);          return $resultStr;      }            private function transmitText($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;      }  }    ?>

更多微信公众平台消息接口开发从Hello2BizUser文本到subscribe事件 相关文章请关注PHP中文网!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:微信公众平台开发获取关注者列表

相关资讯