亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
微信公眾平臺開發(fā)教程(三) 基礎框架搭建
一、接收HTTP請求
二、分發(fā)請求
這裡再看具體看一下,請求的訊息類型有哪些,回覆的訊息類型有哪些等。
四、HTTP響應
首頁 微信小程式 微信開發(fā) 微信公眾平臺開發(fā)教程(三) 基礎架構(gòu)搭建

微信公眾平臺開發(fā)教程(三) 基礎架構(gòu)搭建

Feb 16, 2017 pm 04:15 PM
微信大眾平臺

微信公眾平臺開發(fā)教程(三) 基礎框架搭建

上一章,我們已經(jīng)初步講解了微信公眾帳號開發(fā)的基本原理,今天我們來探索設計實現(xiàn)。

首先我們設計了模組層次圖,當然圖中只是給出一種實作方式,不限於此。具體見下圖。

主要功能介紹如下:

1)請求介面層。處理HTTP請求,及回應

2)分送層。由介面層傳入請求,然後具體分析請求類型,分發(fā)至不同的處理器

3)業(yè)務邏輯層。這裡是我們的具體業(yè)務邏輯了,根據(jù)請求,實現(xiàn)具體的業(yè)務邏輯。

4)資料層。我們在實現(xiàn)某個應用程式時可能需要存取數(shù)據(jù),可以是資料庫或是文件。如果是簡單應用,可能沒有這一層。

其實,具體的應用可以在這個結(jié)構(gòu)上去擴展,可以擴展訊息物件層、業(yè)務物件層、資料存取層、功能管理階層等。這裡只是提供一種思路,不限於此。

?微信公眾平臺開發(fā)教程(三) 基礎框架搭建

?

根據(jù)層次圖,設計流程圖,具體講述實現(xiàn)的各個過程。以便了解整個處理過程。如下圖:

微信公眾平臺開發(fā)教程(三) 基礎框架搭建

??

根據(jù)流程圖,我們能夠清楚的了解整個流程,訊息處理的具體實現(xiàn)步驟。

下面我們針對每個流程進行程式碼實作。

一、接收HTTP請求

我們需要一個HttpHandler或一個網(wǎng)頁,來處理微信服務端HTTP請求。

這裡我們使用了HttpHandler。因為其靈活性高,性能好。

具體實現(xiàn)如下。

????public?class?WeiXinHttpHandler:IHttpHandler
????{????????///?<summary>
????????///?
????????///?</summary>
????????public?bool?IsReusable
????????{????????????get?{?return?true;?}
????????}????????///?<summary>
????????///?處理請求????????///?</summary>
????????///?<param name="context"></param>
????????public?void?ProcessRequest(HttpContext?context)
????????{????????????//由微信服務接收請求,具體處理請求
????????????WeiXinService?wxService?=?new?WeiXinService(context.Request);????????????string?responseMsg?=?wxService.Response();
????????????context.Response.Clear();
????????????context.Response.Charset?=?"UTF-8";
????????????context.Response.Write(responseMsg);
????????????context.Response.End();
????????}
????}

?

如果是HTTPHandler,需要在設定檔中,設定特定的應用。具體的節(jié)點配置,我們不作說明。直接給出例子,配置HttpHandler節(jié)點如下

?

<httpHandlers>
???<add verb="*" path="WXService.ashx" type="namespace.WeiXinHttpHandler,WXWeb" validate="true"/></httpHandlers>

?

二、分發(fā)請求

?

二、分發(fā)請求了

?

二、分發(fā)請求其實可以放置在HttpHandler中的。?

?1)驗證簽章

?如果是首次要求,則需要驗證簽章。就相當於一次HTTP握手。之前在上一章中,設定的伺服器URL以及token值,這個功能就是檢驗是否連結(jié)成功。

這個請求是GET請求。以下具體說明(官方):

業(yè)務邏輯:

加密/校驗流程:

將token、timestamp、nonce三個參數(shù)進行字典序排序

將三個參數(shù)字串拼接成一個字串進行SHA1加密

? 開發(fā)者獲得加密後的字串可與signature對比,標識該請求來自微信?而官方只提供了PHP的代碼示例,很多東西在C#中並非直譯既得。所以這裡面也有一些具體處理。先看官方的程式碼:?

????private?function?checkSignature()
????{????????$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?){????????????return?true;
????????}else{????????????return?false;
????????}
????}

我們翻譯成C#版本:

?

????????///?<summary>
????????///?檢查簽名????????///?</summary>
????????///?<param name="request"></param>
????????///?<returns></returns>
????????private?bool?CheckSignature()
????????{????????????string?signature?=?Request.QueryString[SIGNATURE];????????????string?timestamp?=?Request.QueryString[TIMESTAMP];????????????string?nonce?=?Request.QueryString[NONCE];

????????????List<string>?list?=?new?List<string>();
????????????list.Add(TOKEN);
????????????list.Add(timestamp);
????????????list.Add(nonce);????????????//排序????????????list.Sort();????????????//拼串
????????????string?input?=?string.Empty;????????????foreach?(var?item?in?list)
????????????{
????????????????input?+=?item;
????????????}????????????//加密
????????????string?new_signature?=?SecurityUtility.SHA1Encrypt(input);????????????//驗證
????????????if?(new_signature?==?signature)
????????????{????????????????return?true;
????????????}????????????else
????????????{????????????????return?false;
????????????}
????????}

2)分發(fā)請求

接下來就是具體的訊息請求了,這裡都是POST請求。

因為有多種訊息類型,我們透過工廠類別來進行封裝,然後每種訊息都有專門的處理器來進行處理。具體實作邏輯:

????????///?<summary>
????????///?SHA1加密????????///?</summary>
????????///?<param name="intput">輸入字符串</param>
????????///?<returns>加密后的字符串</returns>
????????public?static?string?SHA1Encrypt(string?intput)
????????{????????????byte[]?StrRes?=?Encoding.Default.GetBytes(intput);
????????????HashAlgorithm?mySHA?=?new?SHA1CryptoServiceProvider();
????????????StrRes?=?mySHA.ComputeHash(StrRes);
????????????StringBuilder?EnText?=?new?StringBuilder();????????????foreach?(byte?Byte?in?StrRes)
????????????{
????????????????EnText.AppendFormat("{0:x2}",?Byte);
????????????}????????????return?EnText.ToString();
????????}

處理請求的對外方法(HttpHandler呼叫的方法就是這個了),即:

????????///?<summary>
????????///?處理請求????????///?</summary>
????????///?<returns></returns>
????????private?string?ResponseMsg()
????????{????????????string?requestXml?=?Common.ReadRequest(this.Request);
????????????IHandler?handler?=?HandlerFactory.CreateHandler(requestXml);????????????if?(handler?!=?null)
????????????{????????????????return?handler.HandleRequest();
????????????}????????????return?string.Empty;
????????}

)訊息類型首先我們來看下,具體的訊息類型,其實上一張中已經(jīng)明確給了訊息的介面。

這裡再看具體看一下,請求的訊息類型有哪些,回覆的訊息類型有哪些等。

千萬要注意,請求的訊息是文字類型,回覆的訊息,不一定也是文字哦,可以是圖文、音樂等任意一種可回覆的訊息。具體見下表所示。

?

2)根據(jù)特定的訊息接口,設計訊息類別。

這里給出類圖,供參考。

微信公眾平臺開發(fā)教程(三) 基礎框架搭建

?

3)針對不同的消息,會有不同的處理器,來看下具體的類圖。

?微信公眾平臺開發(fā)教程(三) 基礎框架搭建 ?

4)具體業(yè)務處理?

每個handler里面就是可以處理具體請求。輸入的什么消息,訪問那些數(shù)據(jù),調(diào)用服務等,都在這里處理。

還是建議大家對具體的業(yè)務進行單獨封裝,在Handler中,只提供調(diào)用的接口。

因為隨著業(yè)務的增加,一個Handler可能要處理很多業(yè)務,如果所有的操作邏輯都寫在這里,勢必影響閱讀,也不易于維護與擴展。?

5)產(chǎn)生回復消息

在處理完請求后,需要生成回復消息,響應到終端。消息格式,就是我們介紹那些消息類型,但必須是可用于回復的,當前支持的有:文本、圖文、音樂等。

一定要明確:回復的消息類型不一定要與請求的消息類型一樣,比如,請求是文本,回復的可以是圖文、音樂。

產(chǎn)生回復消息的過程,其實,就是特定的消息對象格式化為對應的XML的過程,然后將XML響應至微信服務器。

6)實例

這里以微信用戶關注公眾賬號,然后服務端處理處理事件請求,登記用戶,并提示歡迎信息。

????class?EventHandler?:?IHandler
????{????????///?<summary>
????????///?請求的xml????????///?</summary>
????????private?string?RequestXml?{?get;?set;?}????????///?<summary>
????????///?構(gòu)造函數(shù)????????///?</summary>
????????///?<param name="requestXml"></param>
????????public?EventHandler(string?requestXml)
????????{????????????this.RequestXml?=?requestXml;
????????}????????///?<summary>
????????///?處理請求????????///?</summary>
????????///?<returns></returns>
????????public?string?HandleRequest()
????????{????????????string?response?=?string.Empty;
????????????EventMessage?em?=?EventMessage.LoadFromXml(RequestXml);????????????if?(em.Event?==?EventType.Subscribe)
????????????{????????????????//注冊用戶
????????????????User?user?=?new?User();
????????????????user.OpenID?=?em.FromUserName;
????????????????UserManager.Regester(user);????????????????//回復歡迎消息
????????????????TextMessage?tm?=?new?TextMessage();
????????????????tm.ToUserName?=?em.FromUserName;
????????????????tm.FromUserName?=?em.ToUserName;
????????????????tm.CreateTime?=?Common.GetNowTime();
????????????????tm.Content?=?"歡迎您關注xxx,我是小微。有什么我能幫助您的嗎?";
????????????????response?=?tm.GenerateContent();
????????????}????????????return?response;
????????}
????}

?

四、HTTP響應

?最后將處理結(jié)果返回至最初HttpHandler,響應給微信服務器,直接Response處理。這也是在最開始設計的HttpHandler中實現(xiàn)的。

下面是代碼片段,具體可見一、Http請求?

????????????context.Response.Clear();
????????????context.Response.Charset?=?"UTF-8";
????????????context.Response.Write(responseMsg);
????????????context.Response.End();


?更多微信公眾平臺開發(fā)教程(三) 基礎框架搭建?相關文章請關注PHP中文網(wǎng)!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72