基於Bluemix的微信公共平臺應用開發

而微信公共平臺的賬號已經達到了 200 多萬,因此如果能利用 Bluemix 開發微信公共平臺應用,筆者認爲將爲廣大的微信開發者學習、部署、測試、直至形成商業應用帶來福音,所以筆者通過研究,成功完成了基於 Bluemix 的微信公共平臺應用開發,在此做一些簡要的介紹,以便於微信公共開發者推進深化應用。

基本過程

在開發微信公衆平臺前,需要申請一個微信公共賬號,此處不做贅述,筆者使用的微信公共賬號名稱爲:"正海說知識創新",代號爲:"zhszscx"。如何申請微信公共賬號,筆者不做贅述。

在 Bluemix 中開發微信公衆平臺主要包括如下步驟:

  1. 申請 Bluemix 賬號
  2. 下載並安裝 Cloud Foundry 程序
  3. 編制一個應用的配置文件
  4. 在微信公衆平臺設置爲開發模式
  5. 設置一個基於 Bluemix 的網址 URL
  6. 設置微信公衆平臺應用的令牌(Token)
  7. 下載微信公衆平臺的範例程序,筆者採用 PHP 語言,對該程序進行修改,設置令牌(TOKEN)
  8. 上傳(push)PHP 文件,應用開始執行
  9. 在微信公衆平臺中,驗證通過編輯模式。
  10. 利用手機微信,向微信公衆平臺發送信息,獲得微信公衆平臺返回的信息。

至此,基於 Bluemix 的微信公衆平臺應用開發順利完成,開發者可以在此基礎上進行進一步的發展。

圖 1.系統框架


基於Bluemix的微信公共平臺應用開發

過程描述

  1. 申請 Bluemix 賬號

    進入網址:www.bluemix.net

    圖 2

    基於Bluemix的微信公共平臺應用開發
  2. 下載並安裝 Cloud Foundry 程序

    進入網址:https://github.com/Cloud Foundry/cli

    圖 3

    基於Bluemix的微信公共平臺應用開發

    根據開發者的程序操作系統下載對應的程序。

    圖 4

    基於Bluemix的微信公共平臺應用開發

    例如筆者下載地址是: Stable Installers 下的"Windows 64 bit"

    下載了一個文件,該文件爲 installer-windows-amd64 .zip

    安裝該文件後,在 C:\Program Files (x86)\Cloud Foundry 下產生了一個 cf.exe 文件。同時經過檢查發現,在系統的 PATH 路徑中,也增加了該目錄,也就是說可以直接在 DOS COMMAND 環境下輸入 CF 命令執行該文件。

  3. 編制一個應用的配置文件

    文件名爲: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

    其他不做變動,修改完成後,將文件保存。

    編制該文件有三個注意事項:

    1. 文件格式需要指定爲 UTF-8 的格式
    2. 設置應用名稱時,需要注意不能重複。
    3. 設置 HOST 名稱時,儘可能長一些,或者按照個人姓名、公司名稱進行設置,筆者上傳部署時曾經出現過錯誤,估計是名稱重複,後來修改後,部署成功。
  4. 在微信公衆平臺設置爲開發模式

    進入微信公衆平臺,登錄後,進入高級功能,設置開始開發模式。

    圖 5

    基於Bluemix的微信公共平臺應用開發

    圖 6

    基於Bluemix的微信公共平臺應用開發

    在微信公衆平臺接口中,設置對應的 URL 及令牌。

    圖 7

    基於Bluemix的微信公共平臺應用開發
  5. 設置一個基於 Bluemix 的網址

    在 URL 中設置網址,注意此處的形式必須與前面設置的一致。

  6. 設置微信公衆平臺應用的令牌(token)

    設置一個令牌信息,該令牌信息是由自己指定的,一般採用特別的字符進行,以保證安全性。

  7. 下載微信公衆平臺的範例程序,筆者採用 PHP 語言,對該程序進行修改,設置令牌(token)等相關信息。開發者可以在微信公衆平臺開發者文檔中下載 DEMO 文件。

    圖 8

    基於Bluemix的微信公共平臺應用開發

    清單 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 文件,如果上傳正確,則等待應用執行。

    1. cf api https://api.ng.bluemix.net
    2. cf login

      此處輸入申請的用戶郵件、密碼,執行至運行結束。

    3. cf push -f manifest.yml

    該文件名指定必須與前述的配置文件完全一致。

    在正常的配置結束後,就可以在 Bluemix 中看到該應用,該應用處於正常運行的狀態。

    圖 9

    基於Bluemix的微信公共平臺應用開發
  8. 在微信公衆平臺中,點擊提交,系統會提示驗證通過。如果提示驗證不通過,需要檢查 URL、Token、程序中的 Token 以及程序代碼的正確性。

    另外,需要注意的是,騰訊要求服務器響應必須在 5 秒以內,因此在網絡環境不夠好的情況下,也許需要多提交幾次纔可以完成。

    特別需要注意的是,筆者曾經進行過新浪的微博開發,新浪微博開發可以採取本地服務器,一樣可以驗證通過,而騰訊的這種驗證必須使用外部可以訪問的網址,筆者曾經爲此很困擾,而且騰訊的驗證必須使用 80 端口,不支持 URL 帶端口號,這也曾經困擾過筆者。幸而 IBM 的 Bluemix 平臺可以支持。

  9. 利用手機微信,向微信公衆平臺發送信息,獲得微信公衆平臺返回的信息。

    設置成功後,例如手機微信關注該微信公衆平臺賬號,例如筆者的"正海說知識創新",賬號:"zhszscx"關注的方法可以是名稱查詢、代號查詢,也可以掃描如下的二維碼,進行體驗。

    想該賬號發送:hello!

    將會收到系統返回的:Welcome to wechat world! hello!

    這就表示基於 Bluemix 的微信公衆平臺開發順利完成。

開發中注意事項

對於前面開發中介紹到的可能出現問題的地方再做一些總結:

  1. 正確設置 HOST 名稱,不可以重複。
  2. HOST 名稱加上域名,需要和微信公衆平臺中的 URL 相匹配。
  3. 程序中的 Token 的設置必須同微信公衆平臺中的設置相匹配。
  4. 配置文件必須使用 UTF-8 格式。
  5. Index.php 程序文件格式必須使用 UTF-8 格式。
  6. 系統未做說明,但是默認採用的是 index.php 文件作爲入口,也就是說,如果按本文所敘述的程序編制方法,利用域名訪問時,將沒有結果展示。
  7. 在微信公衆平臺提交時,可能顯示失敗,需要提交多次,知道顯示成功。

另外需要說明的是,目前的程序只對文本型微信信息進行了回覆,其他信息未做處理。而開發者如果在開發中需要變更程序,則需要再次 PUSH 就可以,但是不需要在微信編輯模式再次提交。

發展展望

筆者在前述的基礎上,又增加了數據庫的鏈接,主要是 MYSQL 服務的建立、MYSQL 服務與應用的綁定,在 PHP 程序文件中實現服務的參數調用,數據表的創建、插入、顯示,成功實現了數據庫的處理,另外也成功部署了基於 PHP 的網站形式的應用,有了這樣的基礎,說明可以利用 IBM 的 Bluemix 平臺實現開發微信公共賬號應用。

筆者同時也必須要說明的是,本文只是對 Bluemix 的一個入門級應用的簡要總結,算是拋磚引玉,對於 Bluemix 還只是冰山一角,有待更多研究,希望與廣大開發者合作共進。

轉載地址:http://www.ithov.com/server/136267.shtml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章