首頁  >  文章  >  微信小程式  >  微信公眾平台訊息介面開發從Hello2BizUser文字到subscribe事件

微信公眾平台訊息介面開發從Hello2BizUser文字到subscribe事件

高洛峰
高洛峰原創
2017-03-04 14:49:561861瀏覽

一、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」的訂閱事件下的處理。

 

二、完整程式碼

746d1c365ce1b149275c8e015d81db55responseMsg();

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 = "b2a0af5a8fd26276da50279a1c63a57a
ea5d8177d19f22584533e5c37c389942d3242fa0f72a59f12bbb2807edba61b76671a89dce89e879d9e9c6d81d03862b
c5123754d1f4829fae4905e8abb602f9d3242fa0f72a59f12bbb2807edba61b742a4b8d57eb0afadcf16b7a02c69caaf
246311df1688542638dc52b54a1a4c87%se660f1169ff44ea75c5a982fcb1cde61
42815c2206ae835d7fd68cb4ae21e4dffa796850a1cf5d7bc01ca8cd7f8b83de698463fc03844fbe5a9caafaa1ebd0b1
ea63b4477034504a08070acf4e0b68b2d3242fa0f72a59f12bbb2807edba61b7aa91fa7c40b1cd973268e154dae1a50e
c16e87311aa318186a2141a5b8ce5511%dfecc2d83bf66fbc799a88f710e0cd251
21118965b89073f60271ef4a3b5d3c58";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
        return $resultStr;
    }
}

?>

 更多微信公眾平台訊息介面開發從Hello2BizUser文字到subscribe事件 相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn