Senparc.Weixin.MP SDK 微信公眾平臺開發教程(三):微信公眾平臺開發驗證

SZW發表於2013-07-20

    要對接微信公眾平臺的"開發模式",即對接到自己的網站程式,必須在註冊成功之後(見Senparc.Weixin.MP SDK 微信公眾平臺開發教程(一):微信公眾平臺註冊),等待官方稽核,稽核通過之後,會在後臺頂部出現“高階功能”選單。

    使用“高階功能”>“開發模式”之前,必須有一個已經部署在Internet上,可以用80埠訪問的網站(域名或IP訪問都可以),一些開發的準備工作見文章:Senparc.Weixin.MP SDK 微信公眾平臺開發教程(二):成為開發者

    首次進入“高階功能”後介面如下:

    我們看到預設情況下,“編輯模式”是開啟的,要使用“開發模式”,必須先關閉“編輯模式”。

    點選進入編輯模式。如下圖:

    點選右上角的滑塊,關閉“編輯功能”。

   然後回到“高階功能”,進入“開發模式”,如下圖:

    進入開發模式後,我們需要設定與微信伺服器通訊的Url,以及只有我們自己知道的Token(千萬不可洩露)。

    官方已經提供了一個PHP版本的示例:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip,你也可以根據官方API的說明用自己的語言編寫。

    在Senparc.Weixin.MP的開源專案中,我們也提供了ASP.NET MVC和ASP.NET Web Forms兩種可以直接部署的Demo:https://github.com/JeffreySu/WeiXinMPSDK

    在提交的時候,微信伺服器會對填寫的URL,使用Token進行一次Get方式請求的驗證,如果順利通過,則儲存成功,如果不通過,會給出錯誤資訊,並且所填寫的資訊是無法儲存的。

    為了更加直觀地演示這個URL對應的程式中,應高包含哪些必要元素,我這裡給出Senparc.Weixin.MP的實現方法(我會分別以MVC和WebForms為例):

方法一:使用MVC

    1、建立一個Controller,如WeixinController.cs,引用Senparc.Weixin.MP.dll(using Senparc.Weixin.MP.dll),最新的DLL見開源專案的Senparc.Weixin.MP.BuildOutPut資料夾https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Senparc.Weixin.MP.BuildOutPut

    2、設定一個私有變數(當然你也可以儲存在資料庫中),如:

        public readonly string Token = "weixin";//與微信公眾賬號後臺的Token設定保持一致,區分大小寫。

    3、建立一個名稱為Index,用於Get請求的Action,如:

        /// <summary>
        /// 微信後臺驗證地址(使用Get),微信後臺的“介面配置資訊”的Url填寫如:http://weixin.senparc.com/weixin
        /// </summary>
        [HttpGet]
        [ActionName("Index")]
        public ActionResult Get(string signature, string timestamp, string nonce, string echostr)
        {
            if (CheckSignature.Check(signature, timestamp, nonce, Token))
            {
                return Content(echostr); //返回隨機字串則表示驗證通過
            }
            else
            {
                return Content("failed:" + signature + "," + MP.CheckSignature.GetSignature(timestamp, nonce, Token)+"。如果您在瀏覽器中看到這條資訊,表明此Url可以填入微信後臺。");
            }
        }

  至此,這些程式碼編譯後按照要求部署到網站上,並且在“介面配置資訊”中填寫http://YourDomain/weixin,Token填寫weixin。

    上述程式碼完整的WeixinController.cs可以看這裡

方法二:使用Web Forms

    Web Forms的驗證過程和MVC是一樣的,只是寫法上有點差別,這裡直接給出程式碼(也要using Senparc.Weixin.MP.dll),假設檔名為根目錄下weixin.aspx:

 public partial class Weixin : System.Web.UI.Page
    {
        private readonly string Token = "weixin";//與微信公眾賬號後臺的Token設定保持一致,區分大小寫。

        protected void Page_Load(object sender, EventArgs e)
        {
            string signature = Request["signature"];
            string timestamp = Request["timestamp"];
            string nonce = Request["nonce"];
            string echostr = Request["echostr"];

            if (Request.HttpMethod == "GET")
            {
                //get method - 僅在微信後臺填寫URL驗證時觸發
                if (CheckSignature.Check(signature, timestamp, nonce, Token))
                {
                    WriteContent(echostr); //返回隨機字串則表示驗證通過
                }
                else
                {
                    WriteContent("failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, Token));
                }
               
            }
            else
            {
                 //判斷Post或其他方式請求
            }
             Response.End();
        }

        private void WriteContent(string str)
        {
            Response.Output.Write(str);
        }
}

  按照上面的程式碼,在“介面配置資訊”中,Url應當填寫http://YourDomain/weixin.aspx,Token應當填寫weixin。

    上述weixin.aspx.cs完整程式碼看這裡(當然你也可以寫成ashx進一步提高效率)。

    

    CheckSignature.Check()方法是Senparc.Weixin.MP SDK中一個驗證請求的方法,已經做了封裝。這裡直接使用是為了簡化程式碼突出重點,感興趣的朋友可以直接看原始碼。

    用以上MVC和Web Forms兩種方法的任意一種,已經可以讓後臺驗證通過。但是注意,光有Get的方法,尚不能與微信使用者發來的資訊通訊,因為通過前面的教程我們知道,微信後臺的Url是通過Get方式請求,而微信客戶端的請求是由Post方式請求的,關於Post的方法,我會在後面的教程中詳細說明。

    並且,在目前的設定狀態下,即便你寫了Post相關的方法,通過驗證之後也並不表示你的伺服器已經可以接收到微信伺服器的訊息了,還有最後一步:手動開啟“開發者模式”:

    現在這個微信賬號已經成功切換到了“開發者模式”,所有微信客戶端傳送到該公眾賬號的訊息,都將轉發到剛才填寫的Url中。

    下一篇我們將介紹如何使用最“粗礦”的方式響應客戶端的發來的Post請求。

    瞭解了“粗礦”方法之後,我們會正式進入“精緻”和“簡潔”的Senparc.Weixin.MP SDK的方法。

 

 系列教程索引

地址:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

  1. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(一):微信公眾平臺註冊
  2. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(二):成為開發者
  3. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(三):微信公眾平臺開發驗證
  4. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(四):Hello World
  5. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(五):使用Senparc.Weixin.MP SDK
  6. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(六):瞭解MessageHandler
  7. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(七):解決使用者上下文(Session)問題
  8. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(八):通用介面說明
  9. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(九):自定義選單介面說明
  10. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十):多客服介面說明
  11. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十一):高階介面說明
  12. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十二):OAuth2.0說明
  13. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十三):地圖相關介面說明
  14. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十四):請求訊息去重
  15. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十五):訊息加密
  16. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十六):AccessToken自動管理機制
  17. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十七):個性化選單介面說明
  18. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十八):Web代理功能
  19. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十九):MessageHandler 的未知型別訊息處理
  20. Senparc.Weixin.MP SDK 微信公眾平臺開發教程(二十):使用選單訊息功能

 

 

相關文章