主頁 > 知識庫 > ASP.NET微信開發(fā)(接口指南)

ASP.NET微信開發(fā)(接口指南)

熱門標(biāo)簽:地圖標(biāo)注的公司有哪些 天心智能電銷機(jī)器人 地圖定位圖標(biāo)標(biāo)注 遂寧市地圖標(biāo)注app 400電話辦理哪家性價比高 地圖標(biāo)注專業(yè)團(tuán)隊 濮陽外呼電銷系統(tǒng)怎么樣 代理接電話機(jī)器人如何取消 塔城代理外呼系統(tǒng)

公眾平臺用戶提交信息后,微信服務(wù)器將發(fā)送GET請求到填寫的URL上,并且?guī)纤膫€參數(shù):

開發(fā)者通過檢驗signature對請求進(jìn)行校驗(下面有校驗方式)。若確認(rèn)此次GET請求來自微信服務(wù)器,請原樣返回echostr參數(shù)內(nèi)容,則接入生效,否則接入失敗。

signature結(jié)合了開發(fā)者填寫的token參數(shù)和請求中的timestamp參數(shù)、nonce參數(shù)。

加密/校驗流程:

  • 1. 將token、timestamp、nonce三個參數(shù)進(jìn)行字典序排序
  • 2. 將三個參數(shù)字符串拼接成一個字符串進(jìn)行sha1加密
  • 3. 開發(fā)者獲得加密后的字符串可與signature對比,標(biāo)識該請求來源于微信
/// summary> 
 /// 驗證簽名 
 /// /summary> 
 /// param name="signature">/param> 
 /// param name="timestamp">/param> 
 /// param name="nonce">/param> 
 /// returns>/returns> 
 public static bool CheckSignature(String signature, String timestamp, String nonce) 
 { 
 String[] arr = new String[] { token, timestamp, nonce }; 
 // 將token、timestamp、nonce三個參數(shù)進(jìn)行字典序排序 
 Array.SortString>(arr); 
 
 StringBuilder content = new StringBuilder(); 
 for (int i = 0; i  arr.Length; i++) 
 { 
  content.Append(arr[i]); 
 } 
 
 String tmpStr = SHA1_Encrypt(content.ToString()); 
 
 
 // 將sha1加密后的字符串可與signature對比,標(biāo)識該請求來源于微信 
 return tmpStr != null ? tmpStr.Equals(signature) : false; 
 } 
 
 
 /// summary> 
 /// 使用缺省密鑰給字符串加密 
 /// /summary> 
 /// param name="Source_String">/param> 
 /// returns>/returns> 
 public static string SHA1_Encrypt(string Source_String) 
 { 
 byte[] StrRes = Encoding.Default.GetBytes(Source_String); 
 HashAlgorithm iSHA = new SHA1CryptoServiceProvider(); 
 StrRes = iSHA.ComputeHash(StrRes); 
 StringBuilder EnText = new StringBuilder(); 
 foreach (byte iByte in StrRes) 
 { 
  EnText.AppendFormat("{0:x2}", iByte); 
 } 
 return EnText.ToString(); 
 } 

接入后是消息推送當(dāng)普通微信用戶向公眾賬號發(fā)消息時,微信服務(wù)器將POST該消息到填寫的URL上。

 protected void Page_Load(object sender, EventArgs e) 
 { 
 
 if (Request.HttpMethod.ToUpper() == "GET") 
 { 
  // 微信加密簽名 
  string signature = Request.QueryString["signature"]; 
  // 時間戳 
  string timestamp = Request.QueryString["timestamp"]; 
  // 隨機(jī)數(shù) 
  string nonce = Request.QueryString["nonce"]; 
  // 隨機(jī)字符串 
  string echostr = Request.QueryString["echostr"]; 
  if (WeixinServer.CheckSignature(signature, timestamp, nonce)) 
  { 
  Response.Write(echostr); 
  } 
 
 } 
 else if (Request.HttpMethod.ToUpper() == "POST") 
 { 
 
  StreamReader stream = new StreamReader(Request.InputStream); 
  string xml = stream.ReadToEnd(); 
 
  processRequest(xml); 
 } 
 
 
 } 
 
 
 /// summary> 
 /// 處理微信發(fā)來的請求 
 /// /summary> 
 /// param name="xml">/param> 
 public void processRequest(String xml) 
 { 
 try 
 { 
 
  // xml請求解析 
  Hashtable requestHT = WeixinServer.ParseXml(xml); 
 
  // 發(fā)送方帳號(open_id) 
  string fromUserName = (string)requestHT["FromUserName"]; 
  // 公眾帳號 
  string toUserName = (string)requestHT["ToUserName"]; 
  // 消息類型 
  string msgType = (string)requestHT["MsgType"]; 
 
  //文字消息 
  if (msgType == ReqMsgType.Text) 
  { 
  // Response.Write(str); 
 
  string content = (string)requestHT["Content"]; 
  if(content=="1") 
  { 
   // Response.Write(str); 
   Response.Write(GetNewsMessage(toUserName, fromUserName)); 
   return; 
  } 
  if (content == "2") 
  { 
   Response.Write(GetUserBlogMessage(toUserName, fromUserName)); 
   return; 
  } 
  if (content == "3") 
  { 
   Response.Write(GetGroupMessage(toUserName, fromUserName)); 
   return; 
  } 
  if (content == "4") 
  { 
   Response.Write(GetWinePartyMessage(toUserName, fromUserName)); 
   return; 
  } 
  Response.Write(GetMainMenuMessage(toUserName, fromUserName, "你好,我是vinehoo,")); 
 
  } 
  else if (msgType == ReqMsgType.Event) 
  { 
  // 事件類型 
  String eventType = (string)requestHT["Event"]; 
  // 訂閱 
  if (eventType==ReqEventType.Subscribe) 
  { 
   
   Response.Write(GetMainMenuMessage(toUserName, fromUserName, "謝謝您的關(guān)注!,")); 
   
  } 
  // 取消訂閱 
  else if (eventType==ReqEventType.Unsubscribe) 
  { 
   // TODO 取消訂閱后用戶再收不到公眾號發(fā)送的消息,因此不需要回復(fù)消息 
  } 
  // 自定義菜單點擊事件 
  else if (eventType==ReqEventType.CLICK) 
  { 
   // TODO 自定義菜單權(quán)沒有開放,暫不處理該類消息 
  } 
  } 
  else if (msgType == ReqMsgType.Location) 
  { 
  } 
 
 
 } 
 catch (Exception e) 
 { 
  
 } 
 }pre name="code" class="csharp"> protected void Page_Load(object sender, EventArgs e) 
 { 
 
 if (Request.HttpMethod.ToUpper() == "GET") 
 { 
  // 微信加密簽名 
  string signature = Request.QueryString["signature"]; 
  // 時間戳 
  string timestamp = Request.QueryString["timestamp"]; 
  // 隨機(jī)數(shù) 
  string nonce = Request.QueryString["nonce"]; 
  // 隨機(jī)字符串 
  string echostr = Request.QueryString["echostr"]; 
  if (WeixinServer.CheckSignature(signature, timestamp, nonce)) 
  { 
  Response.Write(echostr); 
  } 
 
 } 
 else if (Request.HttpMethod.ToUpper() == "POST") 
 { 
 
  StreamReader stream = new StreamReader(Request.InputStream); 
  string xml = stream.ReadToEnd(); 
 
  processRequest(xml); 
 } 
 
 
 } 
 
 
 /// summary> 
 /// 處理微信發(fā)來的請求 
 /// /summary> 
 /// param name="xml">/param> 
 public void processRequest(String xml) 
 { 
 try 
 { 
 
  // xml請求解析 
  Hashtable requestHT = WeixinServer.ParseXml(xml); 
 
  // 發(fā)送方帳號(open_id) 
  string fromUserName = (string)requestHT["FromUserName"]; 
  // 公眾帳號 
  string toUserName = (string)requestHT["ToUserName"]; 
  // 消息類型 
  string msgType = (string)requestHT["MsgType"]; 
 
  //文字消息 
  if (msgType == ReqMsgType.Text) 
  { 
  // Response.Write(str); 
 
  string content = (string)requestHT["Content"]; 
  if(content=="1") 
  { 
   // Response.Write(str); 
   Response.Write(GetNewsMessage(toUserName, fromUserName)); 
   return; 
  } 
  if (content == "2") 
  { 
   Response.Write(GetUserBlogMessage(toUserName, fromUserName)); 
   return; 
  } 
  if (content == "3") 
  { 
   Response.Write(GetGroupMessage(toUserName, fromUserName)); 
   return; 
  } 
  if (content == "4") 
  { 
   Response.Write(GetWinePartyMessage(toUserName, fromUserName)); 
   return; 
  } 
  Response.Write(GetMainMenuMessage(toUserName, fromUserName, "你好,我是vinehoo,")); 
 
  } 
  else if (msgType == ReqMsgType.Event) 
  { 
  // 事件類型 
  String eventType = (string)requestHT["Event"]; 
  // 訂閱 
  if (eventType==ReqEventType.Subscribe) 
  { 
   
   Response.Write(GetMainMenuMessage(toUserName, fromUserName, "謝謝您的關(guān)注!,")); 
   
  } 
  // 取消訂閱 
  else if (eventType==ReqEventType.Unsubscribe) 
  { 
   // TODO 取消訂閱后用戶再收不到公眾號發(fā)送的消息,因此不需要回復(fù)消息 
  } 
  // 自定義菜單點擊事件 
  else if (eventType==ReqEventType.CLICK) 
  { 
   // TODO 自定義菜單權(quán)沒有開放,暫不處理該類消息 
  } 
  } 
  else if (msgType == ReqMsgType.Location) 
  { 
  } 
 
 
 } 
 catch (Exception e) 
 { 
  
 } 
 }/pre>br> 
pre>/pre> 
br> 
br> 

本文已被整理到了《ASP.NET微信開發(fā)教程匯總》,歡迎大家學(xué)習(xí)閱讀。

以上就是關(guān)于ASP.NET微信開發(fā)接口指南的相關(guān)內(nèi)容介紹,希望對大家的學(xué)習(xí)有所幫助。

您可能感興趣的文章:
  • .NET微信公眾號查看關(guān)注者接口
  • C#.net 微信公眾賬號接口開發(fā)
  • asp.net實現(xiàn)微信公眾賬號接口開發(fā)教程
  • .net實現(xiàn)微信公眾賬號接口開發(fā)實例代碼
  • 微信JS接口匯總及使用詳解
  • PHP對接微信公眾平臺消息接口開發(fā)流程教程
  • 微信API接口大全
  • 微信公眾號支付(二)實現(xiàn)統(tǒng)一下單接口
  • 微信公眾平臺開發(fā)接口PHP SDK完整版
  • .NET微信公眾號客服接口

標(biāo)簽:麗江 宜春 汕頭 重慶 婁底 吉林 本溪 河南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET微信開發(fā)(接口指南)》,本文關(guān)鍵詞  ASP.NET,微信,開發(fā),接口,指南,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ASP.NET微信開發(fā)(接口指南)》相關(guān)的同類信息!
  • 本頁收集關(guān)于ASP.NET微信開發(fā)(接口指南)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章