微信公众号服务器配置关注回调
1. 在微信公众号中,开发 --> 基本配置
2. post的服务器地址
protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){if (Request.HttpMethod.ToLower() == "post"){string postStr = "";postStr = PostInput();//获取xml数据string weixin = "";weixin = postStr;//获取xml数据if (!string.IsNullOrEmpty(postStr) && !string.IsNullOrEmpty(weixin)){try{//注册XmlDocument doc1 = new XmlDocument();doc1.LoadXml(weixin);//读取xml字符串XmlNodeList list = doc1.GetElementsByTagName("xml");XmlNode xn = list[0];string Event = xn.SelectSingleNode("//Event").InnerText;string FromUserName = xn.SelectSingleNode("//FromUserName").InnerText;string EventKey = xn.SelectSingleNode("//EventKey").InnerText;}catch{}XmlDocument doc = new XmlDocument();doc.LoadXml(postStr);//读取xml字符串//公众号发消息XmlElement root = doc.DocumentElement;ExmlMsg xmlMsg = GetExmlMsg(root);ResponseMsg(xmlMsg);调用消息适配器 }}Valid();}}
#region 获取post请求数据/// <summary>/// 获取post请求数据/// </summary>/// <returns></returns>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);}#endregion
#region 接收的消息实体类 以及 填充方法private class ExmlMsg{/// <summary>/// 本公众账号/// </summary>public string ToUserName { get; set; }/// <summary>/// 用户账号/// </summary>public string FromUserName { get; set; }/// <summary>/// 发送时间戳/// </summary>public string CreateTime { get; set; }/// <summary>/// 发送的文本内容/// </summary>public string Content { get; set; }/// <summary>/// 消息的类型/// </summary>public string MsgType { get; set; }/// <summary>/// 事件名称/// </summary>public string EventName { get; set; }}private ExmlMsg GetExmlMsg(XmlElement root){ExmlMsg xmlMsg = new ExmlMsg(){FromUserName = root.SelectSingleNode("FromUserName").InnerText,ToUserName = root.SelectSingleNode("ToUserName").InnerText,CreateTime = root.SelectSingleNode("CreateTime").InnerText,MsgType = root.SelectSingleNode("MsgType").InnerText,};if (xmlMsg.MsgType.Trim().ToLower() == "text"){xmlMsg.Content = root.SelectSingleNode("Content").InnerText;}else if (xmlMsg.MsgType.Trim().ToLower() == "event"){xmlMsg.EventName = root.SelectSingleNode("Event").InnerText;}return xmlMsg;}#endregion
// token验证
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");tmpStr = tmpStr.ToLower();if (tmpStr == signature){return true;}else{return false;}}
#region 消息类型适配器private void ResponseMsg(ExmlMsg xmlMsg)// 服务器响应微信请求{string messageType = xmlMsg.MsgType;//获取收到的消息类型。文本(text),图片(image),语音等。try{switch (messageType){//当消息为文本时case "text":textCase(xmlMsg);break;case "event":textCase1(xmlMsg);break;case "image":textCase(xmlMsg);break;case "voice":textCase(xmlMsg);break;case "vedio":textCase(xmlMsg);break;case "location":textCase(xmlMsg);break;case "link":textCase(xmlMsg);break;default:break;}Response.End();}catch (Exception){}}#endregion#region 发送消息 操作文本消息 + void textCase(XmlElement root)private string getText(ExmlMsg xmlMsg){madmin = badmin.GetModel(3);System.Text.StringBuilder retsb = new StringBuilder(200);retsb.Append(madmin.receivename);//retsb.Append("接收到的消息:" + xmlMsg.Content);//retsb.Append("用户的OPEANID:" + xmlMsg.FromUserName);return retsb.ToString();}private void textCase(ExmlMsg xmlMsg){int nowtime = ConvertDateTimeInt(DateTime.Now);string msg = "";msg = getText(xmlMsg);string resxml = "<xml><ToUserName><![CDATA[" + xmlMsg.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + xmlMsg.ToUserName + "]]></FromUserName><CreateTime>" + nowtime + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + msg + "]]></Content><FuncFlag>0</FuncFlag></xml>";Response.Write(resxml);return;}#endregion#region 将datetime.now 转换为 int类型的秒/// <summary>/// datetime转换为unixtime/// </summary>/// <param name="time"></param>/// <returns></returns>private int ConvertDateTimeInt(System.DateTime time){System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));return (int)(time - startTime).TotalSeconds;}private int converDateTimeInt(System.DateTime time){System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));return (int)(time - startTime).TotalSeconds;}/// <summary>/// unix时间转换为datetime/// </summary>/// <param name="timeStamp"></param>/// <returns></returns>private DateTime UnixTimeToTime(string timeStamp){DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));long lTime = long.Parse(timeStamp + "0000000");TimeSpan toNow = new TimeSpan(lTime);return dtStart.Add(toNow);}#endregion
微信公众号服务器配置关注回调相关推荐
- SpringBoot微信公众号服务器配置案例
前言 进行微信公众号开发,进行服务器配置是必不可少的,通过配置,公众号粉丝与公众号交互的消息将发送至开发者服务器,开发者对消息进行处理,例如:配置后,用户关注公众号或取关时,消息将发送至开发者配置的U ...
- SAP系统和微信集成的系列教程之四:如何将SAP C4C主数据变化推送给微信公众号的关注者
这是Jerry 2020年的第85篇文章,也是汪子熙公众号总共第267篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发 ...
- python登录并关注公众号_python微信公众号之关注公众号自动回复
我们知道一旦使用开发者模式,我们就无法使用公众号平台中的自动回复功能,也就是关注自动回复功能只有自己写才可以. 如图所示,我们无法直接使用此功能. 那么接着上一个博客,我们完成了关键词自动回复功能,博 ...
- 微信分享次数统计、微信公众号分享关注统计
作为系列文章的第五篇,本文重点探讨数据采集层中的微信分享追踪系统.微信分享,早已成为移动互联网运营的主要方向之一,以Web H5页面(下面称之为微信海报)为载体,利用微信庞大的好友关系进行传播,实现宣 ...
- 微信公众号多域名回调系统
介绍: 这是一款基于ThinkPHP6.0框架的微信公众号多域名回调系统. 微信公众号后台默认只能授权2个网页域名,用本系统可突破这个限制,用同一个公众号对接无限多个网站.网站后台支持回调域名白名单的 ...
- 微信公众号自动回复服务器数据,[终极方案]解决微信公众号服务器配置启用后无法自动回...
在配置服务器配置时Token验证通过后,遇到给公众号发信息,提示:提示该公众号提供的服务出现故障,请稍后再试 的问题,一直实现不了自动回复的功能.百度了大量的资料,参考了开发文档,尝试了n种办法,检查 ...
- 微信公众号多域名回调系统1.0发布
这是一款基于ThinkPHP6.0框架的微信公众号多域名回调系统. 微信公众号后台默认只能授权2个网页域名,用本系统可突破这个限制,用同一个公众号对接无限多个网站.网站后台支持回调域名白名单的管理,以 ...
- 如何设置微信公众号粉丝关注后自动推送小程序
关于微信公众号粉丝关注后自动推送小程序实现,第三方工具微号帮提供了功能粉丝关注定时推送实现,支持微信公众号设置粉丝关注后自动推送小程序,小程序可以以卡片.链接的形式展现给关注粉丝;公众号设置关注推送小 ...
- 用java代码实现获取微信公众号用户关注列表
获取微信公众号用户关注列表 通用工具类:CommonUtil package com.weixin.util;import java.io.BufferedReader; import java.io ...
最新文章
- 【指标统计】统计装置总招遥信
- 小白用python处理excel文件-Python3操作Excel文件(读写)的简单实例
- Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils、Spring BeanUtils、Cglib BeanCopier)
- linux下WMB通过ODBC连接数据库
- java在哪里报错_BirthDate.java程序错误在哪里运行不出来写着 c :myjavajavac Test.java Test.java:46 找不到符号 符号...
- python pdf文件处理
- Excel中3个超级好用的条件求和的函数
- 区块链入门教程(7)--使用控制台部署及调用合约
- 思科计算机网络第五章考试,思科第一学期第五章试题和答案
- EcShop开发手册
- 计算机网络自顶向下--网络层
- Android 错误总结
- 渲染单色_均质单色ui设计有什么问题
- 考研数据结构各章节思维导图
- 面试官:生产环境碰到系统CPU飙高和频繁GC,你要怎么排查?
- BigCommerce vs WooCommerce –哪个更好? (比较)
- 【20保研】关于举办哈尔滨工业大学(威海)“英才计划”暑期夏令营暨优秀硕士生源选拔活动的通知...
- ​第3大品牌「鞋王」沦陷,看历史王者的产品史
- 自考计算机专业实践好多,自考计算机实践难考吗?
- 计算机网络网桥思维导图,《王道计算机网络》学习笔记总目录+思维导图