一、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></tousername> <fromusername></fromusername> <createtime>%s</createtime> <msgtype></msgtype> <content></content> <funcflag>%d</funcflag> </xml>"; $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag); return $resultStr; } } ?>
更多微信公眾平台訊息介面開發從Hello2BizUser文字到subscribe事件 相關文章請關注PHP中文網!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Dreamweaver Mac版
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。