溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ASP.NET?MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法

發(fā)布時(shí)間:2022-04-29 15:49:33 來(lái)源:億速云 閱讀:141 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“ASP.NET MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“ASP.NET MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法”吧!

申請(qǐng)微信公共賬號(hào)

既然要接入微信公共平臺(tái),微信公共號(hào)是必須的(當(dāng)然如果只是測(cè)試的話也可以申請(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)閉的,需要配置并啟用,如下圖:

ASP.NET?MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法

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í)用到。

編寫網(wǎng)站邏輯

編寫微信接口測(cè)試代碼,創(chuàng)建控制器,在控制器中編寫代碼,編寫一個(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),便于寫代碼,在微信公共平臺(tái)的官方文檔中可以看到用到的參數(shù)

ASP.NET?MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法

于是創(chuàng)建一個(gè)這樣的Model

ASP.NET?MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法

 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)始在控制器中編寫代碼,開(kāi)始驗(yàn)證

ASP.NET?MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法

根據(jù)校驗(yàn)流程開(kāi)始編寫代碼,也可參考官方給出PHP代碼編寫相應(yīng)的 .NET 代碼

下面給出我的示例代碼,在接入沒(méi)成功之前參考許多別人的代碼,不一定是最好的,你也可以參考一些別人的代碼(這里說(shuō)明一下,驗(yàn)證signature是否正確是從安全方面考慮的,你也可以將GET請(qǐng)求中的echostr參數(shù)直接輸出,建議還是驗(yàn)證一下,畢竟安全更重要一些)

ASP.NET?MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法

用來(lái)讓微信服務(wù)器訪問(wèn)的Action 方法代碼

ASP.NET?MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法

配置微信公共平臺(tái)上的信息

配置接入服務(wù)器,圖中的參數(shù)都必須配置,Token要與網(wǎng)站代碼中的Token保持一致,EncodingAESKey直接隨機(jī)生成就可以,當(dāng)然自己寫也是可以的,只要你愿意,消息加解密方式,建議開(kāi)發(fā)測(cè)試階段選擇明文模式以及兼容模式,正式上線使用后選擇安全模式。最后第一項(xiàng)也是最重要的一項(xiàng),URL,再次強(qiáng)調(diào)必須是HTTP網(wǎng)站,HTTPS是驗(yàn)證不成功的,如果是HTTPS能改成HTTP的話要改成HTTP,Url寫成剛才我們編寫的用于訪問(wèn)的驗(yàn)證的Action的Url地址,即要訪問(wèn)這個(gè)控制器時(shí)請(qǐng)求的URL地址,如: http://www.example.com/Home/Valid/

ASP.NET?MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法

 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)的方法”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)ASP.NET MVC開(kāi)發(fā)接入微信公共平臺(tái)的方法這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI