微信平台开发教程
轉自:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html
關鍵字:微信公眾平臺開發
作者:方倍工作室
?
在這篇微信公眾平臺開發教程中,我們假定你已經有了PHP語言程序、MySQL數據庫、計算機網絡通訊、及HTTP/XML/CSS/JS等基礎。
我們將使用微信公眾賬號方倍工作室作為講解的例子,二維碼見底部。
本系列教程將引導你完成如下任務:
?
第一章 申請服務器資源
創建新浪云計算應用
申請賬號
我們使用SAE新浪云計算平臺作為服務器資源,并且申請PHP環境+MySQL數據庫作為程序運行環境。
申請地址為:
http://www.sinacloud.com/
直接點擊上述網址,可以看到右上角微博登錄的鏈接。
點擊進入之后,使用新浪微博賬號登錄?
登錄之后,按照提示注冊個人信息即可。?
?
創建新應用?http://www.cnblogs.com/txw1958/p/wechat-tutorial.html?
回到首頁,在菜單頂部選擇?控制臺?,再選擇?云應用SAE?。
進入SAE應用列表
點擊下側的創建新應用,這時會彈出提示, 禁止放置違法違規內容,點擊繼續創建,彈出如下窗口。
選擇一個未使用的appid,如果老是已經被使用不知道該什么好,就填寫你的QQ號或者手機號吧。
填寫二級域名AppID、應用名稱、驗證碼,開發語言選擇PHP5.3,全部應用和框架下面選擇第一個【PHP 空應用】。然后點擊左下方的創建應用
?
應用創建成功。并自動跳轉到應用列表中,可以看到已經有剛才創建的1354386063這個應用。
創建數據庫?
點擊剛才創建的應用名稱,進入應用主頁。
在左側的數據庫服務中找到MySQL
點擊進入MySQL類型選擇,這里選擇獨享型MySQL
在創建獨享型MySQL中,使用微型配置,然后點擊“確認初始化”
底部將顯示任務進度。
等任務完成之后,再點擊銷毀MySQL按鈕,
這樣創建并銷毀一次,可以多獲得200云豆。以后使用的時候,可以使用免費的共享型MySQL或者使用收費但更穩定強大的獨享型MySQL。
創建版本?http://www.cnblogs.com/txw1958/p/wechat-tutorial.html?
點擊剛才創建的應用名稱,進入應用主頁。
點擊左側的應用管理下面的代碼管理,
?
在代碼管理中,選擇使用SVN托管的方式,不要使用git的方式。
跳轉到代碼管理
點擊右側的“創建版本”
版本號默認為1,點擊創建,有時會彈出安全登錄,需要輸入安全密碼,如果不知道或者忘記了,就點里面的找回密碼,重新設置一下。:
驗證通過之后,如下所示
到這里,就成功創建了一個域名URL為?http://1354386063.sinaapp.com/?的應用了,記住你的這個URL,后面將會用到。
?原文:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html?
上傳代碼?http://www.cnblogs.com/txw1958/p/wechat-tutorial.html?
下述代碼是一個微信接口文件,看不懂沒有關系,你可以暫時不用弄明白它的意思。
如果想弄明白,可以購買《微信公眾平臺開發最佳實踐》,在該書中第25頁~第27頁有詳細講解。
<?php /*方倍工作室 http://www.cnblogs.com/txw1958/CopyRight 2013 www.doucube.com All Rights Reserved */define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); if (isset($_GET['echostr'])) {$wechatObj->valid(); }else{$wechatObj->responseMsg(); }class wechatCallbackapiTest {public function valid(){$echoStr = $_GET["echostr"];if($this->checkSignature()){header('content-type:text');echo $echoStr;exit;}}private function checkSignature(){$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}public function responseMsg(){$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if (!empty($postStr)){$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$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>";if($keyword == "?" || $keyword == "?"){$msgType = "text";$contentStr = date("Y-m-d H:i:s",time());$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;}}else{echo "";exit;}} } ?>我們將使用上述代碼與微信公眾平臺對接。
將上述代碼用專業的軟件存為utf-8格式的index.php文件后再使用WinRAR壓縮為index.zip,
或者直接下載方倍工作室已經壓縮好的index.zip文件。點此進入下載
回到SAE的代碼管理界面中。
再選擇“上傳代碼包”,點擊上傳文件,選擇剛才的index.zip文件,點擊上傳,上傳成功后中間是一個綠色的橫條,如下所示
如果沒有綠色的橫條,表示上傳失敗,需要重試。可以考慮在Chrome瀏覽器下重試一下。
點擊編輯代碼按鈕,
?有時候需要輸入自己的安全密碼,如果不記得了就點擊“找回密碼”。
安全驗證成功后繼續之前的操作。
我們可以看到index.php已經上傳成功,雙擊可以查看編輯里面的代碼
新浪云應用的創建就成功了。
?
實名認證
新浪SAE要求用戶上傳身份證進行實名認證才可以正常使用,在左側菜單列表中可以找到“實名認證”這一標簽可進行實名認證操作。實名認證過程是免費的。認證以后每月免費有5G的流量。認證審核需要1~3個工作日。
來不及準備身份證照片的話可以先繼續下面的內容,改天再來進行實名認證。但在使用過程中會受點影響。
如果不進行實名認證,SAE會在回復的內容中會帶上干擾的html內容信息,從而導致Token驗證失敗或者該公眾號暫時無法提供服務,請稍后再試。
實名認證需要填的信息如下
實名認證成功后,將如下圖所示。
充值(本步驟可選擇性進行)
新浪云SAE實行的是配額免費+超額付費的方式,相關標準請查看SAE價格體系介紹。初期對于大部分用戶來說免費配額已夠用,如果您將來使用量比較大建議預先至少充值100元獲得10000云豆,以免超額后應用被禁用而影響業務。
第二章 啟用開發模式
微信公眾平臺開發模式
高級功能
微信公眾平臺地址:https://mp.weixin.qq.com?
登錄微信公眾平臺后臺,在左側列表中最下方,找到“ 基本配置 ”,點擊進入
進入服務器配置填寫框。
點擊“修改配置”按鈕
此處的URL為上篇中介紹的云應用的域名,而Token在index.php中定義為weixin。EncodingAESKey則不用填,點擊“隨機生成”讓自動生成一個,消息加解密方式選擇“明文模式”,然后點擊“提交”按鈕。
?
在彈出的提示框中,點擊“確定”
配置修改后如圖所示,再點擊“啟用”按鈕
詢問“是否確定開啟服務器配置”,點擊“確定”
如果提示“token驗證失敗”,可以先重次幾次,微信服務器有時候不穩定。并確保你的SAE已經上傳身份證通過實名認證!
如果還是失敗,請先用微信調試器測試一下url和token是否正確,點此查看詳細測試方法。
成功啟用后如圖。
恭喜,你成功啟用開發模式。
?
自動回復
在上面的例子中,實現了一個發送“?”就能回復當前時間的功能。
效果如下:
至此,你的微信公眾平臺賬號已經實現自動回復了。?
?第三章 數據收發原理及消息數據格式
?
★?本章是理論部分,初學者會比較難以理解,不用太過追究。
開發模式成為開發者時的消息校驗原理
在開發者首次提交驗證申請時,微信服務器將發送GET請求到填寫的URL上,并且帶上四個參數(signature、timestamp、nonce、echostr),開發者通過對簽名(即signature)的效驗,來判斷此條消息的真實性。
此后,每次開發者接收用戶消息的時候,微信也都會帶上前面三個參數(signature、timestamp、nonce)訪問開發者設置的URL,開發者依然通過對簽名的效驗判斷此條消息的真實性。效驗方式與首次提交驗證申請一致。
| signature | 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 | 
| timestamp | 時間戳 | 
| nonce | 隨機數 | 
| echostr | 隨機字符串 | 
開發者通過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成為開發者成功,否則接入失敗。
加密/校驗流程如下: 1. 將token、timestamp、nonce三個參數進行字典序排序 2. 將三個參數字符串拼接成一個字符串進行sha1加密 3. 開發者獲得加密后的字符串可與signature對比,標識該請求來源于微信啟用接口是由代碼中的checkSignature()函數來實現校驗的。如果對這一原理難以理解,可以暫時不用深究,繼續看下面。
?
成為開發者后消息收發時的原理
上一章節中圖,當用戶發送一個“?”時,系統回復了一個時間
這一原理的消息流程圖如下所示。
從上圖可以看出,用戶在發送一個?后,微信服務器將組裝一個消息發送給我們自己的服務器,自己的服務器然后回復一個時間,并且將該時間也按一定的規則組裝,回復給公眾賬號,公眾賬號再回復給用戶,在這個收發過程中,發送方和接收方進行了調換(ToUserName和FromUserName值互換),收發都是以xml格式在后臺進行傳輸的,
所以掌握各種消息類型的接收回復就是進行微信公眾平臺開發的基礎!
下面對前面所述的各種消息類型講解其XML數據包的格式。
?
各種收發消息的XML數據包分析
接收消息
1. 文本(包括表情)
接收文本及表情
文字后臺格式:
<xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName><FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName><CreateTime>1359028446</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[測試文字]]></Content><MsgId>5836982729904121631</MsgId> </xml>表情后臺格式
<xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName> <CreateTime>1359044526</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[/::)/::~/::B/::|/:8-)]]></Content> <MsgId>5837051792978241864</MsgId> </xml>XML格式講解
ToUserName 消息接收方微信號,一般為公眾平臺賬號微信號 FromUserName 消息發送方微信號 CreateTime 消息創建時間 MsgType 消息類型;文本消息為text Content 消息內容 MsgId 消息ID號可以看出,文本和表情的消息類型均為文本
2. 圖片
接收圖片
后臺格式:
<xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName> <CreateTime>1359028479</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[http://mmbiz.qpic.cn/mmbiz/L4qjYtOibummHn90t1mnaibYiaR8ljyicF3MW7XX3BLp1qZgUb7CtZ0DxqYFI4uAQH1FWs3hUicpibjF0pOqLEQyDMlg/0]]></PicUrl> <MsgId>5836982871638042400</MsgId> <MediaId><![CDATA[PGKsO3LAgbVTsFYO7FGu51KUYa07D0C_Nozz2fn1z6VYtHOsF59PTFl0vagGxkVH]]></MediaId> </xml>XML格式講解
ToUserName 消息接收方微信號,一般為公眾平臺賬號微信號 FromUserName 消息發送方微信號 CreateTime 消息創建時間 MsgType 消息類型;圖片消息為image PicUrl 圖片鏈接地址,可以用HTTP GET獲取 MsgId 消息ID號3. 語音
接收語音
后臺格式:
<xml><ToUserName><![CDATA[gh_d035bb259cf5]]></ToUserName><FromUserName><![CDATA[owEUGj4BW8yeWRvyEERiVGKwAF1Q]]></FromUserName><CreateTime>1364883809</CreateTime><MsgType><![CDATA[voice]]></MsgType><MediaId><![CDATA[JfmCezZ3Cwp0FwUvMADwwhvp-XScuvpictubpw0c6ALyA8tj3HLU4PoXzMpIY72P]]></MediaId><Format><![CDATA[amr]]></Format><MsgId>5862131322594912688</MsgId> </xml>XML格式講解
ToUserName 消息接收方微信號,一般為公眾平臺賬號微信號 FromUserName 消息發送方微信號 CreateTime 消息創建時間 MsgType 消息類型;語音消息為voice MediaId 媒體ID Format 語音格式,這里為amr MsgId 消息ID號 附:AMR接口簡介 全稱Adaptive Multi-Rate,主要用于移動設備的音頻,壓縮比比較大,但相對其他的壓縮格式質量比較差,由于多用于人聲,通話,效果還是很不錯的。4. 視頻
接收視頻
后臺格式:
xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName> <CreateTime>1359028186</CreateTime> <MsgType><![CDATA[video]]></MsgType> <MediaId><![CDATA[DBVFRIj29LB2hxuYpc0R6VLyxwgyCHZPbRj_IIs6YaGhutyXUKtFSDcSCPeoqUYr]]></MediaId> <ThumbMediaId><![CDATA[mxUJ5gcCeesJwx2T9qsk62YzIclCP_HnRdfTQcojlPeT2G9Q3d22UkSLyBFLZ01J]]></ThumbMediaId> <MsgId>5836981613212624665</MsgId> </xml>XML格式講解
ToUserName 消息接收方微信號,一般為公眾平臺賬號微信號 FromUserName 消息發送方微信號 CreateTime 消息創建時間 MsgType 消息類型;視頻消息為video MediaId 媒體ID ThumbMediaId 媒體縮略ID? MsgId 消息ID號5. 位置
接收位置
后臺格式:
<xml> <ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName> <CreateTime>1359036619</CreateTime> <MsgType><![CDATA[location]]></MsgType> <Location_X>22.539968</Location_X> <Location_Y>113.954980</Location_Y> <Scale>16</Scale> <Label><![CDATA[中國廣東省深圳市南山區華僑城深南大道9789號 郵政編碼: 518057]]></Label> <MsgId>5837017832671832047</MsgId> </xml>XML格式講解
ToUserName 消息接收方微信號,一般為公眾平臺賬號微信號FromUserName 消息發送方微信號CreateTime 消息創建時間MsgType 消息類型,地理位置為locationLocation_X 地理位置緯度Location_Y 地理位置經度Scale 地圖縮放大小Label 地理位置信息MsgId 消息ID號6. 鏈接
接收鏈接
后臺格式:
<xml> <ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> <FromUserName><![CDATA[oIDrpjl2LYdfTAM-oxDgB4XZcnc8]]></FromUserName> <CreateTime>1359709372</CreateTime> <MsgType><![CDATA[link]]></MsgType> <Title><![CDATA[微信公眾平臺開發者的江湖]]></Title> <Description><![CDATA[陳坤的微信公眾號這段時間大火,大家..]]></Description> <Url><![CDATA[http://israel.duapp.com/web/photo.php]]></Url> <MsgId>5839907284805129867</MsgId> </xml>XML格式講解
ToUserName 消息接收方微信號,一般為公眾平臺賬號微信號FromUserName 消息發送方微信號CreateTime 消息創建時間MsgType 消息類型,鏈接為linkTitle 圖文消息標題Description 圖文消息描述Url 點擊圖文消息跳轉鏈接MsgId 消息ID號?
回復消息
只介紹三種格式的消息:文本、圖文、音樂。其中圖文消息包括單條圖文消息和多條圖文消息,展示方式有一點點不同。
1. 文本消息格式
回復文本
后臺格式:
<xml> <ToUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></ToUserName> <FromUserName><![CDATA[gh_680bdefc8c5d]]></FromUserName> <CreateTime>1359036631</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[【深圳】天氣實況 溫度:27℃ 濕度:59% 風速:東北風3級 11月03日 周日 27℃~23℃ 小雨 東北風4-5級 11月04日 周一 26℃~21℃ 陣雨 微風 11月05日 周二 27℃~22℃ 陰 微風]]></Content> <FuncFlag>0</FuncFlag> </xml>XML格式講解
FromUserName 消息發送方ToUserName 消息接收方CreateTime 消息創建時間MsgType 消息類型,文本消息必須填寫textContent 消息內容,大小限制在2048字節,字段為空為不合法請求FuncFlag 星標字段?
2. 圖文消息格式
2.1 單條圖文消息
回復單條圖文
后臺格式:
2.2 多圖文消息
回復多圖文
后臺數據格式
<xml><ToUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></ToUserName><FromUserName><![CDATA[gh_680bdefc8c5d]]></FromUserName><CreateTime>1359011829</CreateTime><MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>5</ArticleCount><Articles><item><Title><![CDATA[【深圳】天氣實況 溫度:3℃ 濕度:43﹪ 風速:西南風2級]]></Title><Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/banner.jpg]]></PicUrl><Url><![CDATA[]]></Url></item><item><Title><![CDATA[06月24日 周四 2℃~-7℃ 晴 北風3-4級轉東南風小于3級]]></Title><Description><![CDATA[]]></Description><PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d00.gif]]></PicUrl><Url><![CDATA[]]></Url></item><item><Title><![CDATA[06月25日 周五 -1℃~-8℃ 晴 東南風小于3級轉東北風3-4級]]></Title><Description><![CDATA[]]></Description><PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d00.gif]]></PicUrl><Url><![CDATA[]]></Url></item><item><Title><![CDATA[06月26日 周六 -1℃~-7℃ 多云 東北風3-4級轉東南風小于3級]]></Title><Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl><Url><![CDATA[]]></Url></item><item><Title><![CDATA[06月27日 周日 0℃~-6℃ 多云 東南風小于3級轉東北風3-4級]]></Title><Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl><Url><![CDATA[]]></Url></item></Articles><FuncFlag>0</FuncFlag> </xml>XML格式講解
FromUserName 消息發送方ToUserName 消息接收方CreateTime 消息創建時間MsgType 消息類型,圖文消息必須填寫newsContent 消息內容,圖文消息可填空ArticleCount 圖文消息個數,限制為10條以內Articles 多條圖文消息信息,默認第一個item為大圖Title 圖文消息標題Description 圖文消息描述PicUrl 圖片鏈接,支持JPG、PNG格式,較好的效果為大圖640*320,小圖80*80Url 點擊圖文消息跳轉鏈接 FuncFlag 星標字段?3. 音樂消息
回復音樂消息
后臺格式:
<xml><ToUserName><![CDATA[ollB4jqgdO_cRnVXk_wRnSywgtQ8]]></ToUserName><FromUserName><![CDATA[gh_b629c48b653e]]></FromUserName><CreateTime>1372310544</CreateTime><MsgType><![CDATA[music]]></MsgType><Music><Title><![CDATA[最炫民族風]]></Title><Description><![CDATA[鳳凰傳奇]]></Description><MusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></MusicUrl><HQMusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></HQMusicUrl></Music><FuncFlag>0</FuncFlag> </xml>XML格式講解
ToUserName 接收方帳號(收到的OpenID) FromUserName 開發者微信號 CreateTime 消息創建時間 MsgType 消息類型,此處為musicTitle 音樂標題Description 音樂描述MusicUrl 音樂鏈接HQMusicUrl 高質量音樂鏈接,WIFI環境優先使用該鏈接播放音樂 FuncFlag 位0x0001被標志時,星標剛收到的消息。?
事件消息類型
目前用戶在關注和取消關注,以及點擊菜單的時候會自動向公眾平臺發送事件推送消息:
1. 關注事件
<xml><ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName><FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName><CreateTime>1372307736</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[subscribe]]></Event><EventKey><![CDATA[]]></EventKey> </xml>2. 取消關注事件
<xml><ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName><FromUserName><![CDATA[ollB4jqgdO_cRnVXk_wRnSywgtQ8]]></FromUserName><CreateTime>1372309890</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[unsubscribe]]></Event><EventKey><![CDATA[]]></EventKey> </xml>3. 菜單點擊事件
<xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName><FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName><CreateTime>1377886191</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[CLICK]]></Event><EventKey><![CDATA[天氣深圳]]></EventKey> </xml>XML格式講解
ToUserName 接收方微信號 FromUserName 發送方微信號,若為普通用戶,則是一個OpenID CreateTime 消息創建時間 MsgType 消息類型,event Event 事件類型,subscribe(訂閱)、unsubscribe(取消訂閱)、CLICK(自定義菜單點擊事件) EventKey 事件KEY值,與自定義菜單接口中KEY值對應?
?
?第四章 實現天氣預報功能
?
這一章里,我們來實現微信上的天氣預報功能,我們使用方倍工作室的天氣預報接口,其接口為
http://apix.sinaapp.com/weather/這個接口的參數appkey為公眾號原始id,參數city為城市名
例如,查詢深圳的天氣預報時,將city值做urlencode,最終訪問的url為
http://apix.sinaapp.com/weather/?appkey=trialuser&city=%E6%B7%B1%E5%9C%B3返回的內容如下
[{"Title": "深圳天氣預報","Description": "","PicUrl": "","Url": ""},{"Title": "【實況】溫度18℃ 濕度59%% 東北風2級 發布時間:08:55","Description": "","PicUrl": "","Url": ""},{"Title": "【舒適】建議著長袖T恤、襯衫加單褲等服裝。年老體弱者宜著針織長袖襯衫、馬甲和長褲。","Description": "","PicUrl": "","Url": ""},{"Title": "11月19日 周三 晴 23℃~17℃ 無持續風向 微風 日出日落:06:38~17:39","Description": "","PicUrl": "http://discuz.comli.com/weixin/weather/icon/d00.jpg","Url": ""},{"Title": "11月20日 周四 多云 25℃~17℃ 無持續風向 微風 日出日落:06:39~17:38","Description": "","PicUrl": "http://discuz.comli.com/weixin/weather/icon/d01.jpg","Url": ""},{"Title": "11月21日 周五 多云 26℃~18℃ 無持續風向 微風 日出日落:06:40~17:38","Description": "","PicUrl": "http://discuz.comli.com/weixin/weather/icon/d01.jpg","Url": ""} ]我們在微信中調用這一接口來獲取天氣預報信息,實現代碼如下
<?php /*方倍工作室CopyRight 2014 All Rights Reserved */define("TOKEN", "weixin");$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"];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);$url = "http://apix.sinaapp.com/weather/?appkey=".$object->ToUserName."&city=".urlencode($keyword); $output = file_get_contents($url);$content = json_decode($output, true);$result = $this->transmitNews($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){} } ?>上述代碼的下載地址為?http://pan.baidu.com/s/1gdsyHWJ,同樣的方法,可將代碼上傳到SAE上。
在公眾賬號中使用的命令如下:
在你的公眾賬號輸入相應的命令,實現效果類似如下所示:
?
?
第五章 小結
?
總的來說,通過本教程,你得到了以下收獲:
- 1. 你通過本教程得到了一個免費的新浪云計算空間,云計算哦
 - 2. 你成功啟用了開發模式,并且實現了時間的自動回復
 - 3. 你了解了微信公眾平臺開發的原理,并且熟悉了各種消息及發送是怎么一回事
 - 4. 你使用方倍工作室的天氣預報接口,實現了一個微信公眾平臺上的天氣預報功能。
 
接下來該做什么呢?你可以學習開發一些基礎的常用功能,推薦:方倍工作室 編寫,機械工業出版社 出版的《微信公眾平臺開發最佳實踐?第2版》,里面包含很多php開發技巧、數據庫使用、及近30項微信公眾平臺實用功能或技術 。?
點擊圖標購買:
?
?
學習完這一層次之后,你可以開始自己勝任一個中小型的微信公眾平臺賬號功能的開發了。
如果你沒有PHP及Mysql方面的開發基礎,我們也建議你購買《PHP和MySQL Web開發(原書第4版)》,該書被評為“PHP和MySQL程序員的最佳參考書”,
點擊圖標購買
?
捐贈我們
方倍工作室一直在致力于幫助開發人員更加快速方便的進行微信公眾平臺的開發,如果您對我們的成果表示認同并且覺得對你有所幫助,歡迎您對我們捐贈^_^。
?
?原文:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html?
?
============================================
★微信官方推薦閱讀的100本圖書 點擊進入查看★微信公眾平臺開發教程——新手入門 點擊進入
【熱門】★微信公眾平臺開發(111) 現金紅包、裂變紅包、企業付款
☆微信付費開發聯系QQ 1354386063 ☆微信開發技術交流QQ群91553195
分類: 微信開發, 開發教程 好文要頂 關注我 收藏該文聯系我 方倍工作室
關注 - 4
粉絲 - 2249 +加關注 85 1 (請您對文章做出評價) ? 上一篇:微信公眾平臺開發(42)情侶相夫妻相
? 下一篇:淘寶天貓店鋪微信公眾平臺建設指南
轉載于:https://www.cnblogs.com/lvchenfeng/p/5196178.html
總結
                            
                        - 上一篇: 如何自制一款tlc颗粒的固态硬盘
 - 下一篇: opencv3/C++ 将图片转换为视频