温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ASP.NET微信开发接口的示例分析

发布时间:2021-09-10 14:54:54 来源:亿速云 阅读:159 作者:小新 栏目:移动开发

这篇文章给大家分享的是有关ASP.NET微信开发接口的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:

ASP.NET微信开发接口的示例分析

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。

signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

加密/校验流程:

  • 1. 将token、timestamp、nonce三个参数进行字典序排序

  • 2. 将三个参数字符串拼接成一个字符串进行sha1加密

  • 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

/// <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三个参数进行字典序排序   Array.Sort<String>(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对比,标识该请求来源于微信   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();   }

接入后是消息推送当普通微信用户向公众账号发消息时,微信服务器将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"];    // 随机数    string nonce = Request.QueryString["nonce"];    // 随机字符串    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>   /// 处理微信发来的请求   /// </summary>   /// <param name="xml"></param>   public void processRequest(String xml)   {   try   {      // xml请求解析    Hashtable requestHT = WeixinServer.ParseXml(xml);      // 发送方帐号(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, "谢谢您的关注!,"));        }    // 取消订阅    else if (eventType==ReqEventType.Unsubscribe)    {     // TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息    }    // 自定义菜单点击事件    else if (eventType==ReqEventType.CLICK)    {     // TODO 自定义菜单权没有开放,暂不处理该类消息    }    }    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"];    // 随机数    string nonce = Request.QueryString["nonce"];    // 随机字符串    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>   /// 处理微信发来的请求   /// </summary>   /// <param name="xml"></param>   public void processRequest(String xml)   {   try   {      // xml请求解析    Hashtable requestHT = WeixinServer.ParseXml(xml);      // 发送方帐号(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, "谢谢您的关注!,"));        }    // 取消订阅    else if (eventType==ReqEventType.Unsubscribe)    {     // TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息    }    // 自定义菜单点击事件    else if (eventType==ReqEventType.CLICK)    {     // TODO 自定义菜单权没有开放,暂不处理该类消息    }    }    else if (msgType == ReqMsgType.Location)    {    }       }   catch (Exception e)   {      }   }</pre><br>  <pre></pre>  <br>  <br>

感谢各位的阅读!关于“ASP.NET微信开发接口的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI