微信開發從未如此簡單-飯前甜點之公衆號的「你問我答」

世間萬物,紛繁複雜。如何在一個紛繁複雜的世界中,找到問題最簡單的解決方案,每每是人們追求的目標。然而,老是會有一些遊戲規則的掌控者將簡單的問題複雜化。好比,「偉大」而又「使人抓狂」的微信,微信的偉大是不能否認的,它改變了絕大多數人生活方式,工做方式。而之因此說微信使人抓狂,是由於凡是看過微信文檔的開發者廣泛存在的心聲。web

有將簡單問題複雜化的,那就有將複雜問題簡單化的,好比說,衆多微信開發者,精確的說應該是衆多竭盡全力的利用本身的經驗,開源微信平臺sdk的開發者。而我很榮幸能成爲其中名不見經傳的一員。json

微信公衆平臺使人抓狂的是晦澀難懂的文檔,以及簡陋的sdk,這也成了不少微信開發者入門時最大的門檻。而做爲其中一員的我,也深有體會,從2013年第一次接觸微信公衆平臺開發至今,微信的文檔我翻了無數次,也正是由於如此,2015年時,很榮幸能將本身踩的微信的坑分享給你們(個人第一本書出版),不過,因爲才疏學淺,能力有限,並無很好的成爲將複雜問題簡單化的簡單方案。時過境遷,而今開源社區中出現多了衆多開發者,也不乏一些優秀的sdk,不過,並無出現一款可讓用戶脫離官方文檔、簡單上手的sdk,因此這也就成爲了個人一個目標,但願能作出一款簡單方便、穩定快捷的微信sdk,WeShare.Weixin。後端

廢話講完,下面就來看看乾貨吧。看一下內容以前,須要一個前提,那就是你須要具備C#開發基礎,由於筆者不才,入行以來,除C#以外,並無深刻研究第二種後端開發語言。至因而否看過微信文檔、是否擁有微信開發者經驗,這都不重要。api

工欲善其事必先利其器。作微信公衆平臺開發,沒有微信公衆號是萬萬不能的。因此開發以前,你可使用官方提供的微信測試號https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login)進行開發測試,或自行申請個公衆號(具體申請流程見微信官網)。後面的內容我會同時使用測試號和微信服務號進行演示。另外,你可能還須要一個域名映射的工具,好比花生殼,或ngrok,用於在開發測試時,將微信服務器的請求映射到開發環境,方便調試。安全

其實,微信公衆平臺最讓人很差理解的就是微信的消息機制,在這裏,我不講什麼原理,我以前的文章中也講過原理,不過部分人並不在意原理,他們在乎的是快速實現我須要的功能。因此,本次的內容就是給你們提供一個幾行代碼就能實現公衆號消息處理機制的功能。下面的代碼示例中,我將分別使用.net4的webform、.net4.5的mvc和.net core2+進行演示,這是目前我所能想到,而且能作到的.netweb開發的框架選型。服務器

首先,新建解決方案。分別在解決方案中建立以上三種框架的web項目。以下圖所示:微信

使用nuget給每一個項目都安裝WeShare.WeiXin.Mp微信開發

咱們先從WebMvc開始演示。 個人WebMvc項目我選擇的是webapi模板,建立完成後,須要更改默認的路由模板爲以下方式:mvc

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(

name: "DefaultApi",

routeTemplate: "api/{controller}/{action}/{id}",

defaults: new { id = RouteParameter.Optional }

);

  

而後新建控制器。名字隨便取。我命名爲WxController,而後再控制器中添加action,命名爲MessageHandler。app

再而後新建類,命名爲MsgHandler,並繼承BaseMsgHandler抽象類。而後在MessageHandler方法中添加註冊公衆平臺消息handler的方法,以下所示:

[HttpGet, HttpPost]

public HttpResponseMessage MessageHandler()

{

var result = HttpContext.Current.Register<MsgHandler>(new EnterParamConfig

{

appid = "",

EncodingAESKey = "",

token = ""

});

return new HttpResponseMessage { Content = new StringContent(result) };

}

  

其中,須要將上述代碼中的appid,EncodingAESKey(若是不啓動安全模式,此參數能夠不配置。),token(token爲接入服務器的口令,此參數可隨便填寫,但進行接口配置時須要填入這裏填的token,注意此參數的保密。)替換成你本身公衆號的對應信息。

至此代碼部分已經完成,下面將演示微信公衆平臺後臺的配置。若想微信平臺接入上面寫的代碼,那就須要提供一個公網能夠訪問的地址。下面就先演示下怎樣使用花生殼訪問本地的web服務。首先打開項目的目錄。

打開iis,添加網站,物理路徑就填入項目的更目錄路徑。端口號能夠隨便填,ip地址設置爲127.0.0.1,只要沒有被其餘應用佔用。以下圖所示:

而後配置花生殼的映射服務。

點擊內網穿透,添加內網映射,以下圖所示:

其中,內網主機和內網端口填寫在iis中建立網站時填寫的內容。肯定後,可看到外網的地址。

此時,經過外網訪問你的接口,http://ypyle.xicp.net/api/wx/MessageHandler,若是響應的是"簽名驗證失敗",則表示配置成功。

而後登錄微信平臺,我先使用微信測試號測試。以下圖:

 

填好url和token後,點擊提交按鈕,若是提示「配置成功」,則表示微信公衆平臺接入已經配置成功了。

如今微信用戶發送給公衆號的信息將被轉發到接口配置裏填寫的url。下面我們經過簡單配置實現消息的接收與回覆。

在MsgHandler類中,重寫TextHandler,用於接收微信用戶發送的文本類型的消息。而後調用ResponseTxt方法,回覆文本消息給用戶。代碼以下:

public override string TextHandler(TextMsg msg)

       {

           return msg.ResponseTxt($"你發送的內容是:{msg.Content},當前時間:{DateTime.Now}");

       }

  

而後你就能夠試着給你的公衆號發送消息啦。

下面再簡單給你們演示下webform框架的接入以及.net core中的接入。

先說webfrom,webform中,我們使用ashx處理請求。在項目中,新建wx.ashx文件。和上面說的mvc方式同樣,先建立MsgHandler類,並繼承BaseMsgHandler基類,而後在wx.ashx添加以下代碼:

 

public void ProcessRequest(HttpContext context)

       {

           var result = HttpContext.Current.Register<MsgHandler>(new EnterParamConfig

           {

               appid = "wxd7008116979a800d",

               EncodingAESKey = "",

               token = "weixintoken"

           });

           context.Response.Write(result);

       }

  

這樣就完成了代碼階段,測試的方式和上面提到的mvc方式同樣,在此就不在贅餘。

而後就是.net core中的配置,和mvc的方式也很類似。代碼階段就不贅餘呢,須要的朋友能夠關注公衆號獲取這次示例的代碼下載連接。

這裏我只簡單說下花生殼域名映射的配置。.net core中的web項目就簡單多了,只需編輯launchSettings.json文件中的iisExpress節點便可。以下所示:本博文到此就結束了,因爲sdk還有部分接口沒有完成,文章中使用nuget導入的開發包將在一週內進行開源,請關注微信公衆號獲此本次博文的示例代碼。

本博文到此就結束了,因爲sdk還有部分接口沒有完成,文章中使用nuget導入的開發包將在一週內進行開源,請關注微信公衆號獲此本次博文的示例代碼。回覆doc1,獲取下載連接。

 

相關文章
相關標籤/搜索