最近有項目需求給微信公眾號上增加了天氣預報功能,使用百度提供的車聯網API V3.0中的天氣查詢功能實現.先上一張最終效果圖:
項目需求:有連接好的微信平臺,有百度注冊帳號,需要在百度LBS開放云平臺,添加應用,獲取AK代碼,PHP代碼編輯器,如EditPlus等
下面詳細介紹下開發步驟:
第一步:準備工作
登錄微信公眾平臺,檢查服務器配置是否已啟用,URL(服務器地址) 是否已配置Token(令牌),與自己寫的微信入口文件中的Token(令牌一致),如下圖:然后點擊提交,只至網頁上提示綠色背景的提交成功信息,則完成本步驟的操作
第二步:微信天氣預報數據源準備
用已注冊好的百度帳號,登錄百度LBS云平臺,添加一個應用,獲取訪問應用AK,及了解車聯API V3.0,天氣查詢功能相應的接口說明文件,以按需調用需要的天氣信息.
第三步:微信公眾平臺,接口文件編寫 jiekou.php
<?php/* 無憂電腦技巧網 微信公眾號功能源碼 CopyRight 2015 All Rights Reserved*/define("TOKEN", "weixin2015");$wechatObj = new wechatCallbackapiTest();if (!isset($_GET['echostr'])) { $wechatObj->responseMsg();}else{ $wechatObj->valid();}class wechatCallbackapiTest{ //驗證簽名 public function valid() { $echoStr = $_GET["echostr"]; $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){ echo $echoStr; exit; } } public function responseMsg() { // $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; $postStr = file_get_contents("php://input"); if (!empty($postStr)){ $this->logger("R ".$postStr); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); $result = ""; switch ($RX_TYPE) { case "event": $result = $this->receiveEvent($postObj); break; case "text": $result = $this->receiveText($postObj); break; } $this->logger("T ".$result); echo $result; }else { echo ""; exit; } } private function receiveEvent($object) { switch ($object->Event) { case "subscribe": $content = "歡迎關注無憂電腦技巧網 "; break; } $result = $this->transmitText($object, $content); return $result; } private function receiveText($object) { $keyword = trim($object->Content); //獲得用戶輸入的信息 //判斷天氣 if(!empty( $keyword )){ //!empty 函數,判斷 $keyword獲得的值是否為空 $city = mb_substr($keyword, 0, 2, 'utf-8'); //取用戶輸入內容前兩個字符,如"黃岡天氣" 最終取值"黃岡" include("weather.php"); //調用天氣接口文件 $content = getWeatherInfo($city); //執行天氣接口文件中的 getWeatherInfo方法.查詢 黃岡天氣. } else{ $content = date("Y-m-d H:i:s",time())."/n技術支持 無憂電腦技巧網/nwww.51pcjq.com"; //發送其它內容默認回復的內容. } if(is_array($content)){ if (isset($content[0]['PicUrl'])){ $result = $this->transmitNews($object, $content); }else if (isset($content['MusicUrl'])){ $result = $this->transmitMusic($object, $content); } }else{ $result = $this->transmitText($object, $content); } return $result; } private function transmitText($object, $content) { if (!isset($content) || empty($content)){ return ""; } $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content); return $result; } private function transmitNews($object, $newsArray) { if(!is_array($newsArray)){ return ""; } $itemTpl = " <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item>"; $item_str = ""; foreach ($newsArray as $item){ $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']); } $newsTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>%s</ArticleCount><Articles>$item_str</Articles></xml>"; $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray)); return $result; } private function logger($log_content) { }}
新聞熱點
疑難解答