ASP.NET?MVC開(kāi)發(fā)接入微信公共平臺(tái)
申請(qǐng)微信公共賬號(hào)
既然要接入微信公共平臺(tái),微信公共號(hào)是必須的(當(dāng)然如果只是測(cè)試的話(huà)也可以申請(qǐng)微信公共平臺(tái)接口測(cè)試賬號(hào)),來(lái)這里微信公共平臺(tái) 申請(qǐng)微信公共號(hào)(注:申請(qǐng)微信公共號(hào)不能用已綁定微信的郵箱),微信公共平臺(tái)有自己的官方文檔,官方文檔有不少資料,可以多看看,開(kāi)發(fā)者模式默認(rèn)是關(guān)閉的,需要配置并啟用,如下圖:
URL即你的網(wǎng)站處理微信模塊,必須是HTTP://開(kāi)頭的網(wǎng)站,筆者自己之前接入幾天一直失敗,最終發(fā)現(xiàn)是因?yàn)樽约壕W(wǎng)站加密了用的是HTTPS,這個(gè)需要注意HTTPS網(wǎng)站是不可以的,Token是不會(huì)驗(yàn)證成功的,Token是自定義的不少于3個(gè)字符,EncodingAESKey會(huì)在加密消息時(shí)用到。
編寫(xiě)網(wǎng)站邏輯
編寫(xiě)微信接口測(cè)試代碼,創(chuàng)建控制器,在控制器中編寫(xiě)代碼,編寫(xiě)一個(gè)Action 方法用于微信服務(wù)器檢驗(yàn),Token是否配置成功或者接入成功。
既然使用MVC,本人比較懶,懶得用Request.QueryStrings["echostr"] 這樣的方法來(lái)一個(gè)一個(gè)獲取參數(shù),于是創(chuàng)建了一個(gè)Model,用來(lái)讓微信服務(wù)器請(qǐng)求時(shí)參數(shù)自動(dòng)適配到Model的相應(yīng)屬性,便于訪問(wèn),便于寫(xiě)代碼,在微信公共平臺(tái)的官方文檔中可以看到用到的參數(shù)
于是創(chuàng)建一個(gè)這樣的Model
public class WeChatRequestModel { public string signature { get; set; } public string timestamp { get; set; } public string nonce { get; set; } public string echostr { get; set; } }
接著看官方文檔,接下來(lái)開(kāi)始在控制器中編寫(xiě)代碼,開(kāi)始驗(yàn)證
根據(jù)校驗(yàn)流程開(kāi)始編寫(xiě)代碼,也可參考官方給出PHP代碼編寫(xiě)相應(yīng)的 .NET 代碼
下面給出我的示例代碼,在接入沒(méi)成功之前參考許多別人的代碼,不一定是最好的,你也可以參考一些別人的代碼(這里說(shuō)明一下,驗(yàn)證signature是否正確是從安全方面考慮的,你也可以將GET請(qǐng)求中的echostr參數(shù)直接輸出,建議還是驗(yàn)證一下,畢竟安全更重要一些)
用來(lái)讓微信服務(wù)器訪問(wèn)的Action 方法代碼
配置微信公共平臺(tái)上的信息
配置接入服務(wù)器,圖中的參數(shù)都必須配置,Token要與網(wǎng)站代碼中的Token保持一致,EncodingAESKey直接隨機(jī)生成就可以,當(dāng)然自己寫(xiě)也是可以的,只要你愿意,消息加解密方式,建議開(kāi)發(fā)測(cè)試階段選擇明文模式以及兼容模式,正式上線(xiàn)使用后選擇安全模式。
最后第一項(xiàng)也是最重要的一項(xiàng),URL,再次強(qiáng)調(diào)必須是HTTP網(wǎng)站,HTTPS是驗(yàn)證不成功的,如果是HTTPS能改成HTTP的話(huà)要改成HTTP,Url寫(xiě)成剛才我們編寫(xiě)的用于訪問(wèn)的驗(yàn)證的Action的Url地址,即要訪問(wèn)這個(gè)控制器時(shí)請(qǐng)求的URL地址,如: http://www.example.com/Home/Valid/
public class HomeController :Controller { /// <summary> /// 定義Token,與微信公共平臺(tái)上的Token保持一致 /// </summary> private const string Token = "StupidMe"; /// <summary> /// 驗(yàn)證簽名,檢驗(yàn)是否是從微信服務(wù)器上發(fā)出的請(qǐng)求 /// </summary> /// <param name="model">請(qǐng)求參數(shù)模型 Model</param> /// <returns>是否驗(yàn)證通過(guò)</returns> private bool CheckSignature(Model.FormatModel.WeChatRequestModel model) { string signature, timestamp, nonce, tempStr; //獲取請(qǐng)求來(lái)的參數(shù) signature = model.signature; timestamp = model.timestamp; nonce = model.nonce; //創(chuàng)建數(shù)組,將 Token, timestamp, nonce 三個(gè)參數(shù)加入數(shù)組 string[] array = { Token, timestamp, nonce }; //進(jìn)行排序 Array.Sort(array); //拼接為一個(gè)字符串 tempStr = String.Join("", array); //對(duì)字符串進(jìn)行 SHA1加密 tempStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tempStr, "SHA1").ToLower(); //判斷signature 是否正確 if (tempStr.Equals(signature)) { return true; } else { return false; } } public void Valid(Model.FormatModel.WeChatRequestModel model) { //獲取請(qǐng)求來(lái)的 echostr 參數(shù) string echoStr = model.echostr; //通過(guò)驗(yàn)證 if (CheckSignature(model)) { if (!string.IsNullOrEmpty(echoStr)) { //將隨機(jī)生成的 echostr 參數(shù) 原樣輸出 Response.Write(echoStr); //截止輸出流 Response.End(); } } } }
以上就是ASP.NET MVC開(kāi)發(fā)接入微信公共平臺(tái)的詳細(xì)內(nèi)容,更多關(guān)于ASP.NET MVC接入微信公共平臺(tái)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
asp.net Repeater控件的說(shuō)明及詳細(xì)介紹及使用方法
Repeater控件是Web 服務(wù)器控件中的一個(gè)容器控件,它使您可以從頁(yè)的任何可用數(shù)據(jù)中創(chuàng)建出自定義列表。2010-04-04三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
本文為大家介紹下三層+存儲(chǔ)過(guò)程分頁(yè)的具體實(shí)現(xiàn),前后臺(tái)及存儲(chǔ)過(guò)程代碼如下,感興趣的朋友可以參考下哈2013-06-06.Net站點(diǎn)設(shè)置多個(gè)路由對(duì)應(yīng)同一個(gè)Action
這篇文章介紹了.Net站點(diǎn)設(shè)置多個(gè)路由對(duì)應(yīng)同一個(gè)Action的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07深入理解Asp.net中DataBinder.Eval的用法總結(jié)
本篇文章是對(duì)Asp.net中DataBinder.Eval的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06ASP.NET Core實(shí)現(xiàn)文件上傳和下載
這篇文章主要為大家詳細(xì)介紹了ASP.NET Core實(shí)現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07Asp.net TextBox的TextChanged事件使用介紹
動(dòng)態(tài)創(chuàng)建的控件是如何加載視圖狀態(tài),還提到ProcessPostData方法的調(diào)用,這里我就用TextBox的TextChanged事件來(lái)說(shuō)說(shuō)視圖數(shù)據(jù)的加載以及事件的觸發(fā)2012-12-12ASP.NET 清除模式窗口數(shù)據(jù)緩存的操作方式
模式窗口showModalDialog()彈出頁(yè)面在asp.net中經(jīng)常用到,接下來(lái)為大家介紹下清除模式窗口緩存數(shù)據(jù)的問(wèn)題2013-04-04.net任務(wù)調(diào)度框架Hangfire簡(jiǎn)介
這篇文章介紹了.net任務(wù)調(diào)度框架Hangfire的簡(jiǎn)單使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07