C#中.net微信开发的示例分析
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关C#中.net微信开发的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。成为开发者string[] ArrTmp = { "tok
千家信息网最后更新 2025年11月07日C#中.net微信开发的示例分析
这篇文章将为大家详细讲解有关C#中.net微信开发的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
成为开发者string[] ArrTmp = { "token", Request["timestamp"], Request["nonce"] };Array.Sort(ArrTmp); //字典排序string tmpStr = string.Join("", ArrTmp);tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");tmpStr = tmpStr.ToLower();if (tmpStr != Request["signature"].ToLower()){ Response.Write(Request["echostr"]);}关注帐号,触发消息,自动应答,事件响应

namespace ElegantWM.WebUI.Areas.WeiXin.Controllers{ /// /// 微信公共服务类 /// public class RobotController : BaseController { /// /// 接收微信请求接口,认证的接口 /// /// public ContentResult Index() { string result = AnalyzeXmlFromWeiXin(); return Content(result); } /// /// 分析微信POST到本服务器的XML数据 /// /// /// private string AnalyzeXmlFromWeiXin() { StreamReader reader = new StreamReader(Request.InputStream); string xml = reader.ReadToEnd(); //获取MsgType log.Info(xml); string msgType = XmlHelper.ReadXmlStr(xml, "/xml/MsgType", ""); switch (msgType) { case "event"://如果是事件 return OnAttention(xml); case "text"://如果是文本消息 return OnReceiveTextMsg(xml); default: return "不被支持的关键字!"; } } /// /// 响应文本消息 /// /// /// private string OnReceiveTextMsg(string xml) { WxTextMsg msg = XmlEntityExchange.ConvertXml2Entity(xml); //返回消息,互换收发用户 string toUser = msg.FromUserName; msg.FromUserName = msg.ToUserName; msg.ToUserName = toUser; switch (msg.Content.Trim()) { case "?": msg.Content = HelpDocument(); break; case "?": msg.Content = HelpDocument(); break; case "1": msg.Content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); break; case "2": msg.Content = Tools.HttpCrossDomain.Get("http://www.weather.com.cn/data/sk/101210301.html"); break; case "3": msg.Content = "来吧,想唠点什么呢? [偷笑]"; break; case "你是男的女的": msg.Content = "姑娘一枚 [偷笑]"; break; default: msg.Content = "抱歉哦,我不认识您输入的命令。/害羞 /:,@-D"; break; } return XmlEntityExchange.ConvertEntity2Xml(msg); } /// /// 获取帮助菜单文档 /// /// private string HelpDocument() { StringBuilder sb = new StringBuilder(); sb.Append("HI,请回复数字,选择服务").Append("\n\n"); sb.Append("1. 当前时间").Append("\n"); sb.Append("2. 天气信息").Append("\n"); sb.Append("3. 聊天唠嗑").Append("\n"); sb.Append("n. 更多服务开发中...").Append("\n"); sb.Append("回复【?】显示此帮助菜单"); return sb.ToString(); } /// /// 当用户关注微信帐号的时候触发,事件响应 /// /// private string OnAttention(string xml) { WxEvent wxevent = XmlEntityExchange.ConvertXml2Entity(xml); WxTextMsg msg = new WxTextMsg(); msg.ToUserName = wxevent.FromUserName; msg.FromUserName = wxevent.ToUserName; msg.CreateTime = DateTime.Now.Ticks; msg.MsgType = "text"; //如果是关注,则发送欢迎消息 switch (wxevent.Event) { case "subscribe": msg.Content = System.Configuration.ConfigurationManager.AppSettings["DefaultWxMsg"]; break; case "CLICK": msg.Content = "您单击的是:" + wxevent.EventKey; break; default: msg.Content = "暂未处理的事件:Event" + wxevent.Event + ";EventKey:" + wxevent.EventKey; break; } string rst = XmlEntityExchange.ConvertEntity2Xml(msg); log.Info(rst); return rst; } }} 辅助类
//实体public class WxEvent { /// /// 接收人 /// public string ToUserName { get; set; } /// /// 发送人 /// public string FromUserName { get; set; } /// /// 时间 /// public string CreateTime { get; set; } /// /// 类型 /// public string MsgType { get; set; } /// /// 事件 /// public string Event { get; set; } public string EventKey { get; set; } }public class WxTextMsg { /// /// 接收人 /// public string ToUserName { get; set; } /// /// 发送人 /// public string FromUserName { get; set; } /// /// 时间 /// public long CreateTime { get; set; } /// /// 类型 /// public string MsgType { get; set; } /// /// 内容 /// public string Content { get; set; } }//XML和实体对象间的相互转化namespace ElegantWM.WebUI.Areas.WeiXin{ public class XmlEntityExchange where T : new() { /// /// 将XML转换为对象 /// /// /// public static T ConvertXml2Entity(string xml) { XmlDocument doc = new XmlDocument(); PropertyInfo[] propinfos = null; doc.LoadXml(xml); XmlNodeList nodelist = doc.SelectNodes("/xml"); T entity = new T(); foreach (XmlNode node in nodelist) { //初始化propertyinfo if (propinfos == null) { Type objtype = entity.GetType(); propinfos = objtype.GetProperties(); } //填充entity类的属性 foreach (PropertyInfo pi in propinfos) { XmlNode cnode = node.SelectSingleNode(pi.Name); pi.SetValue(entity, Convert.ChangeType(cnode.InnerText, pi.PropertyType), null); } } return entity; } /// /// 构造微信消息 /// /// 对象实体 /// 返回微信消息xml格式 public static string ConvertEntity2Xml(T t) { StringBuilder builder = new StringBuilder(); builder.Append(""); Type objtype = t.GetType(); //填充entity类的属性 foreach (PropertyInfo pi in objtype.GetProperties()) { object obj = pi.GetValue(t); string value = obj == null ? "" : obj.ToString(); if (pi.PropertyType.Name.ToLower() == "int64") builder.Append("<" + pi.Name + ">" + value + "" + pi.Name + ">"); else builder.Append("<" + pi.Name + ">" + pi.Name + ">"); } builder.Append(" "); return builder.ToString(); } }} 基础类:http请求
/* * * Copyright © 2013 CCT All Rights Reserved * 作者:JackChain * 时间:2013/8/23 18:21:23 * 功能:跨域访问 * 版本:V1.0 * * 修改人: * 修改点: * */namespace ElegantWM.Tools{ public class HttpCrossDomain { /// /// 跨域访问 /// /// /// /// public static string Post(string url, string param, int time = 60000) { Uri address = new Uri(url); HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; request.Method = "POST"; request.ContentType = "application/json;charset=utf-8"; //"application/x-www-form-urlencoded"; request.Timeout = time; byte[] byteData = UTF8Encoding.UTF8.GetBytes(param == null ? "" : param); request.ContentLength = byteData.Length; using (Stream postStream = request.GetRequestStream()) { postStream.Write(byteData, 0, byteData.Length); } string result = ""; using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { StreamReader reader = new StreamReader(response.GetResponseStream()); result = reader.ReadToEnd(); } return (result); } /// /// 跨域访问 /// /// /// /// public static string Get(string url, int time = 60000) { Uri address = new Uri(url); HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; request.Method = "GET"; request.ContentType = "application/json;charset=utf-8"; //"application/x-www-form-urlencoded"; request.Timeout = time; string result = ""; using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { StreamReader reader = new StreamReader(response.GetResponseStream()); result = reader.ReadToEnd(); } return (result); } }}获取Token:
public class CommonController : Controller { /// /// 获取微信凭证 /// /// public JsonResult GetWxCredential() { string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}"; url = string.Format(url, ConfigurationManager.AppSettings["AppId"], ConfigurationManager.AppSettings["AppSecret"]); string rst = HttpCrossDomain.Get(url); if (rst.Contains("access_token")) { string tokenId=rst.Replace("{\"access_token\":\"", "").Replace("\",\"expires_in\":7200}", ""); CacheHelper.CacheInsertAddMinutes("access_token",tokenId,120); return Json(tokenId, JsonRequestBehavior.AllowGet); } else return Json(rst, JsonRequestBehavior.AllowGet); } }获取和更新菜单
////// 获取微信菜单 /// ///public JsonResult Get() { string url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token="; if (CacheHelper.CacheValue("access_token") != null) { url = url + CacheHelper.CacheValue("access_token").ToString(); } string rst = HttpCrossDomain.Get(url); return Json(rst,JsonRequestBehavior.AllowGet); } /// /// 创建Menu /// /// ///[HttpPost] public JsonResult Create(string json) { string url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token="; if (CacheHelper.CacheValue("access_token") != null) { url = url+CacheHelper.CacheValue("access_token").ToString(); } string rst = HttpCrossDomain.Post(url, json); return Json(rst); }
关于"C#中.net微信开发的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
消息
事件
开发
时间
菜单
服务
分析
实体
对象
更多
篇文章
帮助
示例
C#
内容
属性
接口
文本
用户
类型
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
深圳微达网络技术
编程软件开发就业
和github一样的服务器
二年级手抄报 网络安全
网络技术远程登录
电商群控软件开发
襄阳推广机器人rpa软件开发
技校计算机网络技术就业方向
国家网络安全审查办报道
谷歌香港服务器
互联网医疗与科技创新
网络技术文档200个
乐播服务器无法连接
网络为什么总是不能连接服务器
大型人脸数据库
四大网络安全组织
大学生网络安全发声亮剑
iosai音箱无法连接到服务器
无线传感器网络技术有哪些
怎么查看本机的服务器ip地址
mac连接远程服务器命令
数据防泄密软件开发公司靠谱吗
重庆财务软件开发工程师
奉贤区服务器回收公司哪家便宜
适合学生做的网络安全实验
数据库中标题的作用
苏州聚盛网络技术有限公司
access数据库好用吗
共享服务器ip找不到
四大网络安全组织