微信開發學習日記(八):7步看懂weiphp外掛機制,核心目標是響應微信請求

小雷FansUnion發表於2015-04-17
又經過了幾個小時的梳理、回顧,截至目前,終於對weiphp這個框架的機制搞明白了些。想要完全明白,自然還需要大把的時間。

   
第1步:
   配置微信公眾號,http://weiphp.jiutianniao.com/ ... .html 

  從上面這個配置可以看出,微信請求唄weiphp的入口檔案index.php接收了,可能會被/home/weixin/index/這個action響應。

第2步:
   index.php入口檔案,校驗了是否是微信請求。 
  /**
 * 微信接入驗證
 * 在入口進行驗證而不是放到框架裡驗證,主要是解決驗證URL超時的問題
 */
if (! empty ( $_GET ['echostr'] ) && ! empty ( $_GET ["signature"] ) && ! empty ( $_GET ["nonce"] )) {
}

第3步:
  入口已經驗證過了,即不是“第一次”  ,請求會被分發到home模組的WeixinController的index這個方法。

第4步:
  在index方法中, 首先獲得的就是token、openid、粉絲等資訊。
  最關鍵的處理是,回覆資料。
  // 回覆資料
$this->reply ( $data, $weixin );

第5步:
   在reply函式中, 就是尋找合適的外掛進行訊息響應。

   涉及到的問題有,安裝了哪些外掛、哪些啟用了、哪些有許可權。
  
    準備了可用外掛之後,  根據訊息的型別,事件、地理位置、訂閱,尋找合適的外掛,比如如果有location事件,外掛就執行對應的回撥方法。

    還有的情況是,訊息。

   根據關鍵字,回覆訊息。

   這個時候,問題就變成了 外掛定位問題。

   a.通過外掛標識名、外掛名或者自定義關鍵詞來定位處理的外掛
   b.通過精準關鍵詞來定位處理的外掛 token=0是外掛安裝時初始化的模糊關鍵詞,所有公眾號都可以用
   c.通過模糊關鍵詞來定位處理的外掛
   d.最終也無法定位到外掛,終止操作 

    疑問:通過程式碼,發現location等事件,有很多外掛都會處理這個事件。而訊息,只會找到一個外掛。是這麼個情況麼?

 第6步:
    外掛的weixinmodel。

    /**
 * Vote模型
 */
class WeixinAddonModel extends WeixinModel {
function reply($dataArr, $keywordArr = array()) {
}

  微信外掛,基本都會有個WeixinModel類,如果有必要,會響應微信的請求。

 第7步:
    URL響應問題。

    這個地方一直有疑惑,如果所謂的外掛機制,就是根據使用者傳送到關鍵詞,讓不同的類-外掛去響應,這也太沒有“含金量” 了吧。難道微信的核心玩法就是這個東東麼?

   class VoteController extends AddonsController {
   }

   每個外掛,可能會有Controller,響應URL請求。比如,後臺管理和前臺管理(不會直接和微信進行互動) ,會有一些管理方法,設定資訊之類的。

  另外,有些在weixinModel的reply 方法中,可能包含了外掛內部定義的url,這個感覺才真的很有價值。

  總結:weiphp這個微信框架,簡要總結起來就4點。
1.weiphp基於Thinkphp和Onethink。疑問的是,weiphp有沒有對Thinkphp和Onethink的核心程式碼有改動。如果有改動的話,更多的應該是對Onethink改動。
2.weiphp的核心入口,就是index.php和/home/weixin/index方法,驗證和響應微信請求。
3. 外掛機制,感覺就是根據關鍵字找外掛,讓外掛響應請求。
4.後臺管理系統、使用者端的前端管理、外掛機制,都是為了微信框架的核心目標“響應微信請求”。
  這才是最最關鍵的地方呀。

  武漢九天鳥-武漢領先的移動網際網路系統開發商
  九天鳥問答-http://ask.jiutianniao.com
  九天鳥部落格-http://blog.jiutianniao.com
  九天鳥官網-建設中,敬請期待
  2015年4月17日 

相關文章