.net開發微信公衆號(2)-驗證服務器地址

  驗證服務器地址數據庫

  上一篇咱們說了如何開啓開發者模式,填寫了接收微信推送消息的URL,這一篇咱們說下如何驗證URL,只有驗證完成了,URL才能正式啓用。服務器

  

  上面這些是微信公衆平臺開發文檔裏說的驗證方法,很是清楚,小夥伴們一看就能明白。微信只給出了PHP的代碼示例。杯具。微信

  咱們就把它翻譯成.net的,哈哈。微信公衆平臺

  一、新建一個解決方案,起一個MVC4的項目,以下圖。這裏是我建好的一個解決方案,在這裏簡單介紹一下。ide

  WechatService:畫紅框的項目,是一個MVC4的項目,接收微信發來的消息以及提供了一些外部程序調用的接口。若是WCF熟悉,也能夠用WCF來作。測試

  Service.Common:放了一些通用的靜態方法。加密

  Service.DB:和數據庫相關的內容。spa

  Service.Wechat.Common:和微信平臺接口相關的內容。.net

  Service.WechatPlatform:存一些微信帳號信息的,好比Token之類的常量,若是須要使用多個微信公衆平臺,這裏還能夠用工廠模式擴展多平臺。翻譯

  TestUnit:一個普通控制檯程序,用來作簡單的代碼測試。

  

  二、在WechatService裏面,咱們新建一個空白control叫WechatController.cs文件,裏面加一個Service的Action。

  

  調用一個Valid的方法,校驗微信發來信息的有效性。我用完了就註釋掉了。

1 //接受微信服務端發來的消息
2 public void Service()
3 {
4         Valid();
5 }    

  Valid的方法。

  WeLogger是個寫txt日誌文件的類。若是不用,能夠直接刪除整行。

 1         //用於申請「成爲開發者」時向微信發送驗證信息。
 2         public void Valid()  
 3         {
 4             string echoStr = Request.QueryString["echoStr"];
 5             if (string.IsNullOrEmpty(echoStr))
 6             {
 7                 WeLogger.Debug("echoStr爲空");
 8                 return;
 9             }
10             string signature = Request.QueryString["signature"];
11             string timestamp = Request.QueryString["timestamp"];
12             string nonce = Request.QueryString["nonce"];
13             if (WeUtility.CheckSignature(signature,timestamp,nonce))
14             {

15 Response.Write(echoStr); 16 Response.End();

17 } 18 }

  接下來在Service.Wechat.Common項目的WeUtility類裏寫一個CheckSignature靜態方法

 1 public static bool CheckSignature(string signature, string timestamp, string nonce)
 2         {
 3             if (string.IsNullOrEmpty(signature) || string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce))
 4             {
 5                 return false;
 6             }
 7             //這個變量要與網頁裏面填寫的接口配置信息中填寫的Token一致
 8             string Token = WeConst.Token;
 9             string[] ArrTmp = { Token, timestamp, nonce };
10             Array.Sort(ArrTmp);//排序
11             string tmpStr = string.Join("", ArrTmp);
12             tmpStr = UtilityFunc.SHA1_Hash(tmpStr);//對該字符串進行sha1加密
13             tmpStr = tmpStr.ToLower();
14 
15             //得到加密後的字符串可與signature對比
16             //經過檢驗signature對請求進行校驗,若正確,則原樣返回echostr參數內容,接入生效,不然接入失敗
17             if (tmpStr == signature)
18             {
19                 return true;
20             }
21             else
22             {
23                 return false;
24             }
25         }

  在Service.Common項目的UtilityFunc類裏寫一個SHA1_Hash靜態方法

 1         /// <summary>
 2         /// 字符串轉換SHA1
 3         /// </summary>
 4         /// <param name="str_sha1_in"></param>
 5         /// <returns></returns>
 6         public static string SHA1_Hash(string str_sha1_in)
 7         {
 8             SHA1 sha1 = new SHA1CryptoServiceProvider();
 9             byte[] bytes_sha1_in = UTF8Encoding.Default.GetBytes(str_sha1_in);
10             byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
11             string str_sha1_out = BitConverter.ToString(bytes_sha1_out);
12             str_sha1_out = str_sha1_out.Replace("-", "");
13             return str_sha1_out;
14         }

  這樣就ok了,若是你在微信填的URL地址是http://xxx.xxx.xxx/Wechat/Service的話,就能夠直接把程序打包發佈到IIS上,而後登陸微信公衆平臺,提交全部信息,驗證經過便可激活開發者模式。

  Valid方法激活了開發者模式以後就能夠直接刪了或註釋掉,之後再也不用了。

  CheckSignature方法在以後接收全部微信推送過來的消息時驗證都要用,全部都寫到Service.Wechat.Common裏了。

  

  這篇就結束了,很是簡單。

  總結一下,在微信帳號上填寫好URL以後把驗證代碼寫好發佈,而後在微信帳號裏驗證一下咱們填的地址是有效的就激活成功了。

  PS:若是在Valid方法裏不作任何驗證,直接在response裏輸出echoStr,理論上驗證也能經過。這裏感受能夠偷個懶,小夥伴們能夠試試。

 

  PS:洗洗睡了。

相關文章
相關標籤/搜索