現在很多網站為了獲取用戶都開始這樣使用掃碼關注微信公眾號才能獲取下載碼
比如我們下載這個模板,
微信里回復了關鍵字,不回復驗證碼的原因,是因為我們網站前段時間把php版本升級了7.3
檢查了下 微信接口代碼
因為php7.0版本很多都設置了register_globals禁止,不能用$GLOBALS["HTTP_RAW_POST_DATA"];
需要改成$postStr = file_get_contents("php://input");
這樣就可以接受到信息了
PHP對接微信公眾號源碼 帝國CMS對接微信公眾號PHP接口文件[任意CMS均可]
勿噴,不會PHP代碼,但是大概看懂了一些。我在之前論壇里有人提供的接口原基礎上做了修改。完成了對帝國CMS基礎對接功能,
目前已知的問題是,關鍵字不能回復,本來應該是先判斷關鍵字,再查庫的。 這里代碼是先查庫再判斷了,但我技術太爛,嘗試修改的時候一直出現報錯,所以PHP大神來完善下吧。
本代碼已經是成品,復制源代碼,新建php文件粘貼進去,替換你的數據庫鏈接信息,與需要查詢的表名,上傳至你的網站空間,然后微信公眾號后臺登錄,Url填寫該php地址,token默認是weixin. 然后就OK了。
<?phpdefine("TOKEN", "weixin");//自己定義的token 就是個通信的私鑰$wechatObj = new wechatCallbackapiTest();//$wechatObj->valid(); //驗證 初次對接時不能注釋掉 否則不能通過$wechatObj->responseMsg();class wechatCallbackapiTest{ public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $event = $postObj->Event; $time = time(); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; switch($postObj->MsgType) { case 'event': if($event == 'subscribe') { //關注后的回復 $contentStr = "謝謝關注[尋片]公眾號!本公眾號提供各種資源搜索。輸入電影名,我將回復你電影觀看或下載地址。例:【速度與激情】"; $msgType = 'text'; $textTpl = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $textTpl; } break; case 'text': if(preg_match('/[/x{4e00}-/x{9fa5}]+/u',$keyword)) { $newsTplHeader = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>%s</ArticleCount> <Articles>"; $newsTplItem = "<item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item>"; $newsTplFooter="</Articles> </xml>"; $con = mysql_connect("xxxxx數據庫地址:5506","你的數據庫","你的數據庫密碼"); mysql_query("SET NAMES UTF8"); mysql_query("set character_set_client=utf8"); mysql_query("set character_set_results=utf8"); mysql_select_db("你的數據庫表名", $con); $sql = "SELECT * FROM `phome_ecms_news` WHERE `title` like '%".$keyword."%' LIMIT 0 , 1"; $result = mysql_query($sql); $itemCount = 0; if(mysql_num_rows($result)>0){ while($row = mysql_fetch_assoc($result)) { $title = "".$row['title'].""; $des =""; $url ="http://51zhuangbi.cn".$row['titleurl']; $picUrl1 ="http://51zhuangbi.cn".$row['titlepic'].""; $contentStr .= sprintf($newsTplItem, $title, $des, $picUrl1, $url); ++$itemCount; } $newsTplHeader = sprintf($newsTplHeader, $fromUsername, $toUsername, $time, $itemCount); $resultStr = $newsTplHeader. $contentStr. $newsTplFooter; echo $resultStr; } else { $newsTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>1</ArticleCount> <Articles> <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> </Articles> </xml>"; //沒有查找到的時候的回復 $title = '未找到結果,請確認有無錯別字,或嘗試精簡搜索字(如您回復的是【速度與激情10】,請嘗試【速度與激情】),此外,依次點擊兩次右上角,選擇推薦給朋友,此后,你將可享受神秘特權哦!'; $des1 =""; $picUrl1 ="http://51zhuangbi.cn/d/weizhaodao.jpg"; $url="http://51zhuangbi.cn/misc/message/"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } mysql_close($con); } else { $newsTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>1</ArticleCount> <Articles> <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> </Articles> </xml>"; if($keyword=="help") { $title = '輸入你要找的電影名,或點擊進入尋片網主頁'; $des1 =""; //圖片地址 $picUrl1 ="http://51zhuangbi.cn/help.jpg"; //跳轉鏈接 $url="http://51zhuangbi.cn"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } if($keyword=="菜單") { $title = '點擊進入主頁,右邊 點擊 菜單圖標 “三” 選擇你想看的欄目'; $des1 =""; //圖片地址 $picUrl1 ="http://51zhuangbi.cn/help.jpg"; //跳轉鏈接 $url="http://51zhuangbi.cn"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } if($keyword=="聯系客服") { $title = '聯系客服'; $des1 =""; //圖片地址 $picUrl1 ="http://51zhuangbi.cn/d/help.jpg"; //跳轉鏈接 $url="http://51zhuangbi.cn/misc/message/"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } if($keyword=="自助更新") { $title = '自助更新入口'; $des1 =""; //圖片地址 $picUrl1 ="http://51zhuangbi.cn/d/help.jpg"; //跳轉鏈接 $url="http://51zhuangbi.cn/misc/message/"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } if($keyword=="留言") { $title = '看片留言:點擊進入'; $des1 =""; //圖片地址 $picUrl1 ="http://51zhuangbi.cn/d/help.jpg"; //跳轉鏈接 $url="http://51zhuangbi.cn/misc/message/"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } $contentStr = "/r/n 輸入電影名如:速度與激情7 如果沒有具體想看的,請點擊進入主頁:51zhuangbi.cn"; $msgType = 'text'; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; } break; default: break; } }else { echo "你好!歡迎進微信公眾號"; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token =TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } }}?>
具體的大家可以多搜索一下,網上也不少賣這個功能的。
新聞熱點
疑難解答