ASP.NET MVC 微信公共平臺開發之 微信接入

ASP.NET MVC 接入微信公共平臺 html

  1. 申請微信公共帳號

    既然要接入微信公共平臺,微信公共號是必須的(固然若是隻是測試的話也能夠申請微信公共平臺接口測試帳號),來這裏微信公共平臺 申請微信公共號(注:申請微信公共號不能用已綁定微信的郵箱),微信公共平臺有本身的官方文檔,官方文檔有很多資料,能夠多看看,開發者模式默認是關閉的,須要配置並啓用,以下圖: 數組

    URL即你的網站處理微信模塊,必須是HTTP://開頭的網站,筆者本身以前接入幾天一直失敗,最終發現是由於本身網站加密了用的是HTTPS,這個須要注意HTTPS網站是不能夠的,Token是不會驗證成功的,Token是自定義的很多於3個字符,EncodingAESKey會在加密消息時用到。 安全

  2. 編寫網站邏輯

    編寫微信接口測試代碼,建立控制器,在控制器中編寫代碼,編寫一個Action 方法用於微信服務器檢驗,Token是否配置成功或者接入成功。既然使用MVC,本人比較懶,懶得用Request.QueryStrings["echostr"] 這樣的方法來一個一個獲取參數,因而建立了一個Model,用來讓微信服務器請求時參數自動適配到Model的相應屬性,便於訪問,便於寫代碼,在微信公共平臺的官方文檔中能夠看到用到的參數 服務器

    因而建立一個這樣的Model 微信

    1  public class WeChatRequestModel
    2     {
    3         public string signature { get; set; }
    4         public string timestamp { get; set; }
    5         public string nonce { get; set; }
    6 
    7         public string echostr { get; set; }
    8     }
    View Model Code

     

    接着看官方文檔,接下來開始在控制器中編寫代碼,開始驗證 ide

    根據校驗流程開始編寫代碼,也可參考官方給出PHP代碼編寫相應的 .NET 代碼 測試

    下面給出個人示例代碼,在接入沒成功以前參考許多別人的代碼,不必定是最好的,你也能夠參考一些別人的代碼(這裏說明一下,驗證signature是否正確是從安全方面考慮的,你也能夠將GET請求中的echostr參數直接輸出,建議仍是驗證一下,畢竟安全更重要一些)網站

    用來讓微信服務器訪問的Action 方法代碼 加密

  3. 配置微信公共平臺上的信息

    配置接入服務器,圖中的參數都必須配置,Token要與網站代碼中的Token保持一致,EncodingAESKey直接隨機生成就能夠,固然本身寫也是能夠的,只要你願意,消息加解密方式,建議開發測試階段選擇明文模式以及兼容模式,正式上線使用後選擇安全模式。最後第一項也是最重要的一項,URL,再次強調必須是HTTP網站,HTTPS是驗證不成功的,若是是HTTPS能改爲HTTP的話要改爲HTTP,Url寫成剛纔咱們編寫的用於訪問的驗證的Action的Url地址,即要訪問這個控制器時請求的URL地址,如: http://www.example.com/Home/Valid/spa

     1  public class HomeController :Controller
     2      {
     3         /// <summary>
     4         /// 定義Token,與微信公共平臺上的Token保持一致
     5         /// </summary>
     6         private const string Token = "StupidMe";
     7 
     8          /// <summary>
     9          /// 驗證簽名,檢驗是不是從微信服務器上發出的請求
    10          /// </summary>
    11          /// <param name="model">請求參數模型 Model</param>
    12          /// <returns>是否驗證經過</returns>
    13          private bool CheckSignature(Model.FormatModel.WeChatRequestModel model)
    14          {
    15              string signature, timestamp, nonce, tempStr;
    16              //獲取請求來的參數
    17              signature = model.signature;
    18              timestamp = model.timestamp;
    19              nonce = model.nonce;
    20              //建立數組,將 Token, timestamp, nonce 三個參數加入數組
    21             string[] array = { Token, timestamp, nonce };
    22             //進行排序
    23              Array.Sort(array);
    24              //拼接爲一個字符串
    25              tempStr = String.Join("", array);
    26              //對字符串進行 SHA1加密
    27              tempStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tempStr, "SHA1").ToLower();
    28              //判斷signature 是否正確
    29              if (tempStr.Equals(signature))
    30             {
    31                  return true;
    32              }
    33              else
    34              {
    35                  return false;
    36              }
    37          }
    38 
    39  
    40          public void Valid(Model.FormatModel.WeChatRequestModel model)
    41          {
    42              //獲取請求來的 echostr 參數
    43              string echoStr = model.echostr;
    44             //經過驗證
    45              if (CheckSignature(model))
    46              {
    47                 if (!string.IsNullOrEmpty(echoStr))
    48                 {
    49                     //將隨機生成的 echostr 參數 原樣輸出
    50                      Response.Write(echoStr);
    51                      //截止輸出流
    52                      Response.End();
    53                  }
    54              }
    55          }
    56      }
    View Smaple Code
相關文章
相關標籤/搜索