Hello2BizUser テキストからイベントを購読するまでの WeChat パブリック プラットフォーム メッセージ インターフェイスの開発

高洛峰
リリース: 2017-03-04 14:49:56
オリジナル
1860 人が閲覧しました

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. 「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;
}
ログイン後にコピー

これで、「購読」購読イベントの処理が完了します。

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 中国語 Web サイトに注目してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!