C#中.net微信开发的示例分析
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章将为大家详细讲解有关C#中.net微信开发的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。成为开发者string[] ArrTmp = { "tok
千家信息网最后更新 2025年02月02日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 XmlEntityExchangewhere 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安全错误
数据库的锁怎样保障安全
数据库左边的冗余属性怎么看
软件开发专业所属学院
复兴号移动网络技术
河南新一代软件开发服务推广
开展人才数据库建设
本地对等服务器是什么
服务器内存条怎么插
腾讯 服务器
网络安全保卫局和公安局
租用服务器属于什么类型服务
网络安全感悟20字
数据库建立索引的原则和目的
数据库管理转行
数据库 视图、索引
大学计算机网络技术书籍
网络安全威胁只要来自
eversec服务器
校园网络安全管理
美团打不开服务器错误403
数据库查询怎么进行排名
诛仙手游怎么找不到原来的服务器
合肥服务器回收诚信企业推荐
怎样开证券公司服务器
搭建语音服务器
计算机三级网络技术用什么书
在java中控制数据库
面试网络安全讲师
两个月学习可以过数据库软考吗
金蝶服务器什么样
郑州新动力网络技术怎么样