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

微信公众号服务器配置关注回调相关推荐

  1. SpringBoot微信公众号服务器配置案例

    前言 进行微信公众号开发,进行服务器配置是必不可少的,通过配置,公众号粉丝与公众号交互的消息将发送至开发者服务器,开发者对消息进行处理,例如:配置后,用户关注公众号或取关时,消息将发送至开发者配置的U ...

  2. SAP系统和微信集成的系列教程之四:如何将SAP C4C主数据变化推送给微信公众号的关注者

    这是Jerry 2020年的第85篇文章,也是汪子熙公众号总共第267篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发 ...

  3. python登录并关注公众号_python微信公众号之关注公众号自动回复

    我们知道一旦使用开发者模式,我们就无法使用公众号平台中的自动回复功能,也就是关注自动回复功能只有自己写才可以. 如图所示,我们无法直接使用此功能. 那么接着上一个博客,我们完成了关键词自动回复功能,博 ...

  4. 微信分享次数统计、微信公众号分享关注统计

    作为系列文章的第五篇,本文重点探讨数据采集层中的微信分享追踪系统.微信分享,早已成为移动互联网运营的主要方向之一,以Web H5页面(下面称之为微信海报)为载体,利用微信庞大的好友关系进行传播,实现宣 ...

  5. 微信公众号多域名回调系统

    介绍: 这是一款基于ThinkPHP6.0框架的微信公众号多域名回调系统. 微信公众号后台默认只能授权2个网页域名,用本系统可突破这个限制,用同一个公众号对接无限多个网站.网站后台支持回调域名白名单的 ...

  6. 微信公众号自动回复服务器数据,[终极方案]解决微信公众号服务器配置启用后无法自动回...

    在配置服务器配置时Token验证通过后,遇到给公众号发信息,提示:提示该公众号提供的服务出现故障,请稍后再试 的问题,一直实现不了自动回复的功能.百度了大量的资料,参考了开发文档,尝试了n种办法,检查 ...

  7. 微信公众号多域名回调系统1.0发布

    这是一款基于ThinkPHP6.0框架的微信公众号多域名回调系统. 微信公众号后台默认只能授权2个网页域名,用本系统可突破这个限制,用同一个公众号对接无限多个网站.网站后台支持回调域名白名单的管理,以 ...

  8. 如何设置微信公众号粉丝关注后自动推送小程序

    关于微信公众号粉丝关注后自动推送小程序实现,第三方工具微号帮提供了功能粉丝关注定时推送实现,支持微信公众号设置粉丝关注后自动推送小程序,小程序可以以卡片.链接的形式展现给关注粉丝;公众号设置关注推送小 ...

  9. 用java代码实现获取微信公众号用户关注列表

    获取微信公众号用户关注列表 通用工具类:CommonUtil package com.weixin.util;import java.io.BufferedReader; import java.io ...

最新文章

  1. 【指标统计】统计装置总招遥信
  2. 小白用python处理excel文件-Python3操作Excel文件(读写)的简单实例
  3. Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils、Spring BeanUtils、Cglib BeanCopier)
  4. linux下WMB通过ODBC连接数据库
  5. java在哪里报错_BirthDate.java程序错误在哪里运行不出来写着 c :myjavajavac Test.java Test.java:46 找不到符号 符号...
  6. python pdf文件处理
  7. Excel中3个超级好用的条件求和的函数
  8. 区块链入门教程(7)--使用控制台部署及调用合约
  9. 思科计算机网络第五章考试,思科第一学期第五章试题和答案
  10. EcShop开发手册
  11. 计算机网络自顶向下--网络层
  12. Android 错误总结
  13. 渲染单色_均质单色ui设计有什么问题
  14. 考研数据结构各章节思维导图
  15. 面试官:生产环境碰到系统CPU飙高和频繁GC,你要怎么排查?
  16. BigCommerce vs WooCommerce –哪个更好? (比较)
  17. 【20保研】关于举办哈尔滨工业大学(威海)“英才计划”暑期夏令营暨优秀硕士生源选拔活动的通知...
  18. ​第3大品牌「鞋王」沦陷,看历史王者的产品史
  19. 自考计算机专业实践好多,自考计算机实践难考吗?
  20. 计算机网络网桥思维导图,《王道计算机网络》学习笔记总目录+思维导图

热门文章

  1. 微信公众账号开发模式2
  2. 本杰明·富兰克林式编程练习模式
  3. sse——奥运参赛国出场次序:
  4. 修改SharePoint网站的最大上载大小
  5. Elsevier的Knowledge-Based Systems期刊投latex原稿过程(投稿)
  6. Java23种设计模式 策略模式【Strategy Pattern】
  7. [论文阅读笔记70]基于token-token grid模型的信息抽取(5篇)
  8. 数据结构(二)单链表
  9. srvctl 控制 asm
  10. NB-IOT模组SIM7020供电测试