> 위챗 애플릿 > 위챗 개발 > Hello2BizUser 텍스트에서 이벤트 구독까지 WeChat 공개 플랫폼 메시지 인터페이스 개발

Hello2BizUser 텍스트에서 이벤트 구독까지 WeChat 공개 플랫폼 메시지 인터페이스 개발

高洛峰
풀어 주다: 2017-03-04 14:49:56
원래의
1888명이 탐색했습니다.

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, &#39;SimpleXMLElement&#39;, 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 중국어 홈페이지를 주목해주세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿