.net如何开发微信公众平台
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要为大家展示了".net如何开发微信公众平台",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下".net如何开发微信公众平台"这篇文章吧。公众平台信息
千家信息网最后更新 2024年11月11日.net如何开发微信公众平台
这篇文章主要为大家展示了".net如何开发微信公众平台",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下".net如何开发微信公众平台"这篇文章吧。
公众平台信息http://www.php.cn/code/11829.html" target="_blank">接口为开发者提供了一种新的消息处理方式,只有申请成为开发者后,你才能使用公众平台的开发功能,在这里你需要填写一个URL和一个Token,这两项信息也需要你拥有自己的服务器(外网服务器)资源,其中的Token可由开发者任意填写,URL即是接口配置信息的链接地址,在本文中我采用的是创建一个简易网站的方式,在其中的一个页面的后台程序中配置相关的接口信息,然后发布到外网服务器上,最后可以访问到这个页面的链接地址即是这里应该填写的URL。
接口配置过程:
1.网址接入-校验签名:
const string Token = "aka";//定义一个局部变量不可以被修改,这里定义的变量要与接口配置信息中填写的Token一致protected void Page_Load(object sender, EventArgs e){ string postStr = ""; Valid();//校验签名,当填入的信息提交之后页面有提示"你已成功成为公众平台开发者,可以使用公众平台的开发功能"这个的时候,接下来你就需要注释掉这个校验的方法,使得后面的消息回复得以正常运作 if (Request.HttpMethod.ToLower() == "post")//当普通微信用户向公众账号发消息时,微信服务器将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();//对字符串中的字母部分进行小写转换,非字母字符不作处理 //WriteLog(tmpStr, Server);//计入日志 if (tmpStr == signature)//开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。开发者通过检验signature对请求进行校验,若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败 { return true; } else return false;}/// /// 获取post返回来的数据/// ///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);}/// ///返回微信信息结果/// /// 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转换成unixtime/// /// ///private int ConvertDateTimeInt(System.DateTime time){ System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); return (int)(time - startTime).TotalSeconds;}/// /// 写日志(用于跟踪),可以将想打印出的内容计入一个文本文件里面,便于测试/// public static void WriteLog(string strMemo, HttpServerUtility server){ string filename = server.MapPath("/logs/log.txt");//在网站项目中建立一个文件夹命名logs(然后在文件夹中随便建立一个web页面文件,避免网站在发布到服务器之后看不到预定文件) if (!Directory.Exists(server.MapPath("//logs//"))) Directory.CreateDirectory("//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如何开发微信公众平台"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
消息
公众
开发
平台
信息
字符
开发者
服务器
服务
内容
字符串
接口
文件
类型
页面
配置
发微
篇文章
网站
接入
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
宁波余姚软件开发
自然资源地籍数据库保密制度
武汉app软件开发的企业
网络安全技术应用教程
中国网络安全保护基金会
cad怎么关闭连接服务器
移动手机充话费服务器异常
双十一网络安全演讲稿学生
河北项目软件开发哪家便宜
数据库出版商的类型
天津气体控制软件开发价格
1 x证书网络安全
网络安全培训 今后工作中
数据库视图上显示百分比
access数据库网页
服务器地址和wifi地址
外码的定义 三级数据库
微软数据库sql server
陕鼓与国内能源互联网科技
喀什市网络安全局
软件开发还能火多久
戴尔r730服务器版本
网络安全程序员
多部门网络安全审查
宁波银行合作软件开发
在线装潢设计软件开发
企业换代存储服务器还值钱吗
新道数据库
图书馆网络安全需求
焦作薄冰软件开发有限公司