1. 기존 Hello2BizUser 이벤트 처리
기존 관심 이벤트에서는 사용자가 WeChat 공개 플랫폼 계정을 팔로우한 후 시스템에서 사용자가 Hello2BizUser라는 문자를 보낼 수 있도록 도와줍니다. 공개 계정의 백그라운드 개발 모드에서는 Hello2BizUser라는 단어를 판단하여 환영 메시지를 보냅니다.
코드 샘플은 다음과 같습니다.
if ($keyword == "Hello2BizUser"){ $contentStr = "PHP中文网"; $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr; }
기본 인터페이스를 변경하면 모든 사람에게 영향을 미칩니다. 일반적으로 이러한 변경은 쉽게 이루어지지 않습니다.
WeChat이 이 이벤트를 수정하려는 이유는 무엇입니까? 이 방법의 단점은 사용자가 이 이벤트를 판단하지 않으면 원래 환영 메시지가 없다는 것입니다. 환영 메시지는 영향을 미치지 않습니다. 그러나 많은 사람들의 프로그램 코드에서는 모든 프로세스가 직접적으로 키워드를 기준으로 판단됩니다. 예를 들어, 병원의 WeChat 계정을 본 적이 있습니다. 사용자가 등록 번호를 보내면 그 앞에 몇 명이 줄을 서 있는지 표시되지만 백그라운드 프로그램은 구별하지 않고 Hello2BizUser를 등록 명령으로 보냅니다. . 등록번호 Hello2BizUser를 찾을 수 없습니다. 내 앞에 몇 명이 있는지 알 수 없어 사용자가 혼란스럽습니다. 또한 사용자가 주도적으로 Hello2BizUser를 보내면 환영 메시지와 동일한 내용을 받게 되지만 이 메시지를 보내는 사용자는 거의 없습니다.
반면, 사용자의 관심을 이벤트로 전환하는 것이 통계 기능 구현에 더 도움이 됩니다. 이 이벤트를 사용하면 팔로어 수와 구독 취소자 수를 더 쉽게 확인할 수 있습니다. 그러나 원래 Hello2BizUser 텍스트 푸시 결정은 사용자가 수동으로 전송하여 잘못된 팔로우 통계를 형성할 수 있기 때문에 정확하지 않을 수 있습니다.
2. "구독" 구독 이벤트 판단
구독은 먼저 이벤트 유형을 판단해야 합니다. 공식 샘플에서 본 이벤트를 판단하고 다음과 같이 수정합니다.
$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; }
'구독' 구독 이벤트 처리가 완료되었습니다.
2. 전체 코드
<?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의 WeChat 공개 플랫폼 메시지 인터페이스 개발 더보기 이벤트 구독 관련 글은 PHP 중국어 홈페이지를 주목해주세요!