這篇文章主要介紹了.net開發(fā)微信公眾平臺的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
阿克蘇ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
具體實現(xiàn)方法如下:
一、說明:
公眾平臺信息接口為開發(fā)者提供了一種新的消息處理方式,只有申請成為開發(fā)者后,你才能使用公眾平臺的開發(fā)功能,在這里你需要填寫一個URL和一個Token,這兩項信息也需要你擁有自己的服務(wù)器(外網(wǎng)服務(wù)器)資源,其中的Token可由開發(fā)者任意填寫,URL即是接口配置信息的鏈接地址,在本文中我采用的是創(chuàng)建一個簡易網(wǎng)站的方式,在其中的一個頁面的后臺程序中配置相關(guān)的接口信息,然后發(fā)布到外網(wǎng)服務(wù)器上,最后可以訪問到這個頁面的鏈接地址即是這里應(yīng)該填寫的URL。
二、接口配置過程:
1.網(wǎng)址接入-校驗簽名:
代碼如下:
const string Token = "aka";//定義一個局部變量不可以被修改,這里定義的變量要與接口配置信息中填寫的Token一致 protected void Page_Load(object sender, EventArgs e) { string postStr = ""; Valid();//校驗簽名,當填入的信息提交之后頁面有提示“你已成功成為公眾平臺開發(fā)者,可以使用公眾平臺的開發(fā)功能”這個的時候,接下來你就需要注釋掉這個校驗的方法,使得后面的消息回復(fù)得以正常運作 if (Request.HttpMethod.ToLower() == "post")//當普通微信用戶向公眾賬號發(fā)消息時,微信服務(wù)器將POST該消息到填寫的URL上 { postStr = PostInput(); if (string.IsNullOrEmpty(postStr) == false) { //WriteLog(postStr,Server);//計入日記 ResponseMsg(postStr); } } } private void Valid() { string echoStr = Request.QueryString["echoStr"].ToString(); if (CheckSignature()) { if (!string.IsNullOrEmpty(echoStr)) { Response.Write(echoStr); Response.End(); } } }
代碼如下:
////// 驗證微信簽名 /// ///private bool CheckSignature() { string signature = Request.QueryString["signature"].ToString(); string timestamp = Request.QueryString["timestamp"].ToString(); string nonce = Request.QueryString["nonce"].ToString(); string[] ArrTmp = { Token, timestamp, nonce }; Array.Sort(ArrTmp);//字典排序 string tmpStr = string.Join("", ArrTmp); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//對該字符串進行sha1加密 tmpStr = tmpStr.ToLower();//對字符串中的字母部分進行小寫轉(zhuǎn)換,非字母字符不作處理 //WriteLog(tmpStr, Server);//計入日志 if (tmpStr == signature)//開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信。開發(fā)者通過檢驗signature對請求進行校驗,若確認此次GET請求來自微信服務(wù)器,請原樣返回echostr參數(shù)內(nèi)容,則接入生效,否則接入失敗 { return true; } else return false; } /// /// 獲取post返回來的數(shù)據(jù) /// ///private string PostInput() { Stream s = System.Web.HttpContext.Current.Request.InputStream; byte[] b = new byte[s.Length]; s.Read(b, 0, (int)s.Length); return Encoding.UTF8.GetString(b); } /// ///返回微信信息結(jié)果 /// /// private void ResponseMsg(string weixinXML) { try { XmlDocument doc = new XmlDocument(); doc.LoadXml(weixinXML);//讀取XML字符串 XmlElement rootElement = doc.DocumentElement; XmlNode MsgType = rootElement.SelectSingleNode("MsgType");//獲取字符串中的消息類型 string resxml = ""; if (MsgType.InnerText == "text")//如果消息類型為文本消息 { var model = new { ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText, FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText, CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText, MsgType = MsgType.InnerText, Content = rootElement.SelectSingleNode("Content").InnerText, MsgId = rootElement.SelectSingleNode("MsgId").InnerText }; resxml += ""; } } else//沒有接收到消息 { resxml += " " + ConvertDateTimeInt(DateTime.Now) + " "; if (!string.IsNullOrEmpty(model.Content))//如果接收到消息 { if (model.Content.Contains(" 你好") || model.Content.Contains(" 好") || model.Content.Contains("hi") || model.Content.Contains("hello"))// 你好 { resxml += "0 0 "; } Response.Write(resxml); } if (MsgType.InnerText == "image")//如果消息類型為圖片消息 { var model = new { ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText, FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText, CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText, MsgType = MsgType.InnerText, PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText, MsgId = rootElement.SelectSingleNode("MsgId").InnerText }; resxml += ""; Response.Write(resxml); } else//如果是其余的消息類型 { var model = new { ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText, FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText, CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText, }; resxml += " " + ConvertDateTimeInt(DateTime.Now) + " 1 0 "; Response.Write(resxml); } } catch (Exception ex) { throw ex; } Response.End(); } /// " + ConvertDateTimeInt(DateTime.Now) + " 0 /// datetime轉(zhuǎn)換成unixtime /// /// ///private int ConvertDateTimeInt(System.DateTime time) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); return (int)(time - startTime).TotalSeconds; } /// /// 寫日志(用于跟蹤),可以將想打印出的內(nèi)容計入一個文本文件里面,便于測試 /// public static void WriteLog(string strMemo, HttpServerUtility server) { string filename = server.MapPath("/logs/log.txt");//在網(wǎng)站項目中建立一個文件夾命名logs(然后在文件夾中隨便建立一個web頁面文件,避免網(wǎng)站在發(fā)布到服務(wù)器之后看不到預(yù)定文件) if (!Directory.Exists(server.MapPath("http://logs//"))) Directory.CreateDirectory("http://logs//"); StreamWriter sr = null; try { if (!File.Exists(filename)) { sr = File.CreateText(filename); } else { sr = File.AppendText(filename); } sr.WriteLine(strMemo); } catch { } finally { if (sr != null) sr.Close(); } }
感謝你能夠認真閱讀完這篇文章,希望小編分享的“.net開發(fā)微信公眾平臺的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!