基本過程
在開發微信公衆平臺前,需要申請一個微信公共賬號,此處不做贅述,筆者使用的微信公共賬號名稱爲:"正海說知識創新",代號爲:"zhszscx"。如何申請微信公共賬號,筆者不做贅述。
在 Bluemix 中開發微信公衆平臺主要包括如下步驟:
- 申請 Bluemix 賬號
- 下載並安裝 Cloud Foundry 程序
- 編制一個應用的配置文件
- 在微信公衆平臺設置爲開發模式
- 設置一個基於 Bluemix 的網址 URL
- 設置微信公衆平臺應用的令牌(Token)
- 下載微信公衆平臺的範例程序,筆者採用 PHP 語言,對該程序進行修改,設置令牌(TOKEN)
- 上傳(push)PHP 文件,應用開始執行
- 在微信公衆平臺中,驗證通過編輯模式。
- 利用手機微信,向微信公衆平臺發送信息,獲得微信公衆平臺返回的信息。
至此,基於 Bluemix 的微信公衆平臺應用開發順利完成,開發者可以在此基礎上進行進一步的發展。
圖 1.系統框架
過程描述
- 申請 Bluemix 賬號
進入網址:www.bluemix.net
圖 2
- 下載並安裝 Cloud Foundry 程序
進入網址:https://github.com/Cloud Foundry/cli
圖 3
根據開發者的程序操作系統下載對應的程序。
圖 4
例如筆者下載地址是: Stable Installers 下的"Windows 64 bit"
下載了一個文件,該文件爲 installer-windows-amd64 .zip
安裝該文件後,在 C:\Program Files (x86)\Cloud Foundry 下產生了一個 cf.exe 文件。同時經過檢查發現,在系統的 PATH 路徑中,也增加了該目錄,也就是說可以直接在 DOS COMMAND 環境下輸入 CF 命令執行該文件。
- 編制一個應用的配置文件
文件名爲:manifest.yml 作爲一個應用,需要設置應用的名稱、應用產生的網址,範例的文件爲:
--- applications: - name: cf-php-mysql1 memory: 256M instances: 1 host: lzhfirstphp domain: ng.bluemix.net path: . buildpack: https://github.com/dmikusa-pivotal/cf-php-build-pack.git
說明:
name 指定了應用的名稱
host 指定了應用的擴展域名,如上面的範例文件則生成域名:
lzhfirstphp. ng.bluemix.net
其他不做變動,修改完成後,將文件保存。
編制該文件有三個注意事項:
- 文件格式需要指定爲 UTF-8 的格式
- 設置應用名稱時,需要注意不能重複。
- 設置 HOST 名稱時,儘可能長一些,或者按照個人姓名、公司名稱進行設置,筆者上傳部署時曾經出現過錯誤,估計是名稱重複,後來修改後,部署成功。
- 在微信公衆平臺設置爲開發模式
進入微信公衆平臺,登錄後,進入高級功能,設置開始開發模式。
圖 5
圖 6
在微信公衆平臺接口中,設置對應的 URL 及令牌。
圖 7
- 設置一個基於 Bluemix 的網址
在 URL 中設置網址,注意此處的形式必須與前面設置的一致。
- 設置微信公衆平臺應用的令牌(token)
設置一個令牌信息,該令牌信息是由自己指定的,一般採用特別的字符進行,以保證安全性。
- 下載微信公衆平臺的範例程序,筆者採用 PHP 語言,對該程序進行修改,設置令牌(token)等相關信息。開發者可以在微信公衆平臺開發者文檔中下載 DEMO 文件。
圖 8
清單 1
<?php /** * wechat php test */ //define your token define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract 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(!empty( $keyword )) { $msgType = "text"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; 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; } } } ?>
在這個文件中,有三處需要改動:
第一:設置 TOKEN
define("TOKEN", "abcdefg123");//第一處修改
這裏的數值,需要與前面網頁中的 Token 的設置嚴格一致。
第二:這個範例程序中只是設置了驗證模式,而沒有消息的響應處理,筆者將該文件進行了修改,當存在驗證參數時進行驗證,而不存在驗證信息時,則調用響應方法。
if ( $_GET["echostr"] ) { $wechatObj->valid(); } else { $wechatObj->responseMsg(); }
第三:在範例程序中,對輸入信息進行了一點處理,設置爲返回信息。
$contentStr = "Welcome to wechat world!".$keyword;
也就是將微信粉絲輸入的信息,加上"Welcome to wechat world!"後返回。
另外需要注意的是該 PHP 文件的編碼也必須是 UTF-8 的。上傳(push)PHP 文件,如果上傳正確,則等待應用執行。
- cf api https://api.ng.bluemix.net
- cf login
此處輸入申請的用戶郵件、密碼,執行至運行結束。
- cf push -f manifest.yml
該文件名指定必須與前述的配置文件完全一致。
在正常的配置結束後,就可以在 Bluemix 中看到該應用,該應用處於正常運行的狀態。
圖 9
- 在微信公衆平臺中,點擊提交,系統會提示驗證通過。如果提示驗證不通過,需要檢查 URL、Token、程序中的 Token 以及程序代碼的正確性。
另外,需要注意的是,騰訊要求服務器響應必須在 5 秒以內,因此在網絡環境不夠好的情況下,也許需要多提交幾次纔可以完成。
特別需要注意的是,筆者曾經進行過新浪的微博開發,新浪微博開發可以採取本地服務器,一樣可以驗證通過,而騰訊的這種驗證必須使用外部可以訪問的網址,筆者曾經爲此很困擾,而且騰訊的驗證必須使用 80 端口,不支持 URL 帶端口號,這也曾經困擾過筆者。幸而 IBM 的 Bluemix 平臺可以支持。
- 利用手機微信,向微信公衆平臺發送信息,獲得微信公衆平臺返回的信息。
設置成功後,例如手機微信關注該微信公衆平臺賬號,例如筆者的"正海說知識創新",賬號:"zhszscx"關注的方法可以是名稱查詢、代號查詢,也可以掃描如下的二維碼,進行體驗。
想該賬號發送:hello!
將會收到系統返回的:Welcome to wechat world! hello!
這就表示基於 Bluemix 的微信公衆平臺開發順利完成。
開發中注意事項
對於前面開發中介紹到的可能出現問題的地方再做一些總結:
- 正確設置 HOST 名稱,不可以重複。
- HOST 名稱加上域名,需要和微信公衆平臺中的 URL 相匹配。
- 程序中的 Token 的設置必須同微信公衆平臺中的設置相匹配。
- 配置文件必須使用 UTF-8 格式。
- Index.php 程序文件格式必須使用 UTF-8 格式。
- 系統未做說明,但是默認採用的是 index.php 文件作爲入口,也就是說,如果按本文所敘述的程序編制方法,利用域名訪問時,將沒有結果展示。
- 在微信公衆平臺提交時,可能顯示失敗,需要提交多次,知道顯示成功。
另外需要說明的是,目前的程序只對文本型微信信息進行了回覆,其他信息未做處理。而開發者如果在開發中需要變更程序,則需要再次 PUSH 就可以,但是不需要在微信編輯模式再次提交。
發展展望
筆者在前述的基礎上,又增加了數據庫的鏈接,主要是 MYSQL 服務的建立、MYSQL 服務與應用的綁定,在 PHP 程序文件中實現服務的參數調用,數據表的創建、插入、顯示,成功實現了數據庫的處理,另外也成功部署了基於 PHP 的網站形式的應用,有了這樣的基礎,說明可以利用 IBM 的 Bluemix 平臺實現開發微信公共賬號應用。
筆者同時也必須要說明的是,本文只是對 Bluemix 的一個入門級應用的簡要總結,算是拋磚引玉,對於 Bluemix 還只是冰山一角,有待更多研究,希望與廣大開發者合作共進。
轉載地址:http://www.ithov.com/server/136267.shtml