国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Jadual Kandungan
微信公眾平臺開發(fā)教程(三) 基礎框架搭建
一、接收HTTP請求
二、分發(fā)請求
三、消息處理器具體處理消息
四、HTTP響應
Rumah applet WeChat pembangunan WeChat 微信公眾平臺開發(fā)教程(三) 基礎框架搭建

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

Feb 16, 2017 pm 04:15 PM
Platform awam WeChat

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

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

首先我們設計了模塊層次圖,當然圖中只是給出一種實現(xiàn)方式,不局限于此。具體見下圖。

主要功能介紹如下:

1)請求接口層。處理HTTP請求,及響應

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

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

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

其實,具體的應用可以在這個結構上去擴展,可以擴展消息對象層、業(yè)務對象層、數(shù)據(jù)訪問層、功能管理層等。這里只是提供一種思路,不局限于此。

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

?

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

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

??

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

下面我們針對每個流程進行代碼實現(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ā)請求

?為了能功能封裝,我們也將此封裝在了處理組件中。其實可以放置在HttpHandler中的。?

?1)驗證簽名

?如果是首次請求,需要驗證簽名。就相當于一次HTTP握手。之前在上一章中,設置的服務器URL以及token值,這個功能就是檢驗是否鏈接成功。

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

業(yè)務邏輯:

加密/校驗流程:

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

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

?<3> 開發(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;
????????????}
????????}

這里需要SHA1加密,具體的算法如下:

????????///?<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();
????????}

2)分發(fā)請求

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

因為有多種消息類型,我們通過工廠類來進行封裝,然后每種消息都有專門的處理器來進行處理。具體實現(xiàn)邏輯:

????????///?<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;
????????}

處理請求的對外方法(HttpHandler調(diào)用的方法就是這個了),即:

????????///?<summary>
????????///?處理請求,產(chǎn)生響應????????///?</summary>
????????///?<returns></returns>
????????public?string?Response()
????????{????????????string?method?=?Request.HttpMethod.ToUpper();????????????//驗證簽名
????????????if?(method?==?"GET")
????????????{????????????????if?(CheckSignature())
????????????????{????????????????????return?Request.QueryString[ECHOSTR];
????????????????}????????????????else
????????????????{????????????????????return?"error";
????????????????}
????????????}????????????//處理消息
????????????if?(method?==?"POST")
????????????{????????????????return?ResponseMsg();
????????????}????????????else
????????????{????????????????return?"無法處理";
????????????}
????????}

?

三、消息處理器具體處理消息

1)消息類型

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

這里再看具體看一下,請求的消息類型有哪些,回復的消息類型有哪些等。

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

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

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>
????????///?構造函數(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響應

?最后將處理結果返回至最初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)!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276