1.接收事件

  关注/取消关注事件;

  用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。

通过微信返回的XML,我们通过代码 就可以作相应的处理;

先获取返回的信息:

     if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
{
using (Stream stream = HttpContext.Current.Request.InputStream)
{
Byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, , (Int32)stream.Length);
postString = Encoding.UTF8.GetString(postBytes);
EventHandle(postString);
} if (!string.IsNullOrEmpty(postString))
{
responseMsg(postString, context);//关注微信,返回消息
}
}
postString  里面 就是XML;我们只需要对 XML作相应的处理就好
   System.Xml.XmlDocument postObj = new      System.Xml.XmlDocument();
postObj.LoadXml(postStr); var eventList = postObj.GetElementsByTagName("Event");
var textpl = "";
string FromUserName = string.Empty; for (int i = ; i < FromUserNameList.Count; i++)
{
if (FromUserNameList[i].ChildNodes[].NodeType == System.Xml.XmlNodeType.CDATA)
{
FromUserName = FromUserNameList[i].ChildNodes[].Value;
}
}
var toUsernameList = postObj.GetElementsByTagName("ToUserName");
string ToUserName = string.Empty;
for (int i = ; i < toUsernameList.Count; i++)
{
if (toUsernameList[i].ChildNodes[].NodeType == System.Xml.XmlNodeType.CDATA)
{
ToUserName = toUsernameList[i].ChildNodes[].Value;
}
}
if (toEvent == "subscribe")
{
string rebakcHtml = @"Hi,欢迎来到我爱足球社区";
              //ReceivedText 返回文本消息的格式
textpl = type.ReceivedText(FromUserName, ToUserName, rebakcHtml);
}

   /// <summary>
/// 回复文本
/// </summary>
/// <param name="FromUserName"></param>
/// <param name="ToUserName"></param>
/// <param name="Content"></param>
/// <returns></returns>
public string ReceivedText(string FromUserName, string ToUserName, string Content)
{ string textpl = string.Empty;
textpl = "<xml>" +
"<ToUserName><![CDATA[" + FromUserName + "]]></ToUserName>" +
"<FromUserName><![CDATA[" + ToUserName + "]]></FromUserName>" +
"<CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime>" +
"<MsgType><![CDATA[text]]></MsgType>" +
"<Content><![CDATA[" + Content + "]]></Content>" +
"<FuncFlag>0</FuncFlag>" +
"</xml>"; return textpl;
}

文本消息

System.Web.HttpContext.Current.Response.Write(textpl); 我们将文本信息 返回给微信;

2.点击按钮

 #region 微信菜单点击事件

         /// <summary>
/// 微信菜单点击事件
/// </summary>
/// <param name="postStr">接受消息</param>
/// <returns></returns>
private void EventHandle(string postStr)
{
string responseContent = "";
try
{
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
xmldoc.LoadXml(postStr); XmlNode Event = xmldoc.SelectSingleNode("/xml/Event");
XmlNode EventKey = xmldoc.SelectSingleNode("/xml/EventKey");
XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");
XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName"); if (Event != null)
{
if (EventKey.InnerText.Equals("V1001_ORDER"))//EventKey.InnerText.Equals("V1001_ORDER") 就是创建菜单时,click按钮的唯一Key
{
responseContent = string.Format(Message_Text,
FromUserName.InnerText,
ToUserName.InnerText,
DateTime.Now.Ticks,
"您好,小萌为您服务,请回复十四位订单号,查询订单详情。");//生成文本消息
}
responseContent = type.ReceivedText(FromUserName.InnerText, ToUserName.InnerText, rebakcHtml);
}
} LogTextHelper.WriteLogToFile(responseContent + "------------------" + postStr);
HttpContext.Current.Response.Write(responseContent);//返回给微信
}
catch (Exception ex)
{
LogTextHelper.WriteLogToFile("微信菜单点击事件" + "||" + ex.ToString());
}
} /// <summary>
/// 普通文本消息
/// </summary>
public static string Message_Text
{
get
{
return @"<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{3}]]></Content>
</xml>";
}
} #endregion

3.接受消息:

接受消息 跟关注微信号有点类似:

消息内容 

var keywordList = postObj.GetElementsByTagName("Content"); 

string Content = string.Empty;
  for (int i = 0; i < keywordList.Count; i++)
  {
    if (keywordList[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
      {
        Content = keywordList[i].ChildNodes[0].Value;
      }
  }

 if (toMsgType == "text")//接口文本消息 toMsgType是消息类型
{
      //ToDo 根据业务 处理消息内容

else if (toMsgType == "event")//关注
{
if (toEvent == "subscribe")
{

请点击我 --我爱足球

C# 微信公众平台开发(3)-- 接受/发送消息的更多相关文章

  1. 微信公众平台开发(十) 消息回复总结——用其xml模板

    一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用. 二.思路分析 对于每一个PO ...

  2. 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理

    温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微信公众平台开发实战之了解微信公众平台基础知识以及资料准备 第二篇 :微信公众平台开发实战之开启开发者模式,接入微信公众平台开发 第三篇 :微信公众 ...

  3. PHP实现微信公众平台开发 全套视频资源下载

    好久没有在博客园更新东西了,今天给大家分享一份比较不错的视频学习资源吧. 主要是关于PHP实现微信公众平台开发,  不知道大家对于微信平台的开发有多少了解,那么今天就从基础开始吧,资源目录如下(PS ...

  4. David Camp 微信公众平台开发官方内容拓展版---PHP版本

    微信公众平台开发(一) 配置接口 微信公众平台开发(二) 微信公众平台示例代码分析 微信公众平台开发(三) 订阅事件(subscribe)处理 微信公众平台开发(四) 简单回复功能开发 微信公众平台开 ...

  5. 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

    第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

  6. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  7. 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...

  8. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  9. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

  10. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

随机推荐

  1. 郁闷的Delphi新闻

    Embarcadero closes down their spanish R&D office putting some 80 people on the street and dimini ...

  2. 一个Windows C++的线程类实现

    Thread.h [cpp] view plaincopy #ifndef __THREAD_H__ #define __THREAD_H__ #include <string> #inc ...

  3. poj2656---求一列数中最大数的序数而且在前面输入的更优先

    #include<stdio.h> #include<stdlib.h> int main() { int n,i; while(scanf("%d",&a ...

  4. #include <algorithm>

    1 adjacent_find 查找重复的元素 2 find_if 查找符合条件的第一个元素 3 find_if_not 查找不符合条件的第一个元素 4 for_each 可以遍历每一个元素 5 pa ...

  5. 剑指offer 22 栈的压入、弹出序列

    class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { bool resu ...

  6. find the mincost route(最小环,最短路,floyd)

    find the mincost route Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  7. 一道java面试题-方法静态分派

    一道面试题,以下程序的输出是? public class StaticDispatch { static abstract class Human{ } static class Man extend ...

  8. How To Set Dark Theme in Visual Studio 2010

    Want to use the visual studio color theme editor to set the dark theme or other themes? Below shows ...

  9. 性能优化工具---top

    作用: 实时显示linux下各个进程的资源占用情况 参数: -d :后面可以接秒数,就是整个程序画面更新的秒数.预设是 5 秒: -p :指定某些个 PID 来进行观察监测而已. -b :以批次的方式 ...

  10. 2014-11-21 DHTMLX是什么

    什么是dhtmlx? dhtmlx是一套网页开发 的函式库,他提供了树状元件.数据方格组件.工具列等组件供开发 人员使用. dhtmlx组件是一个JavaScript 库,提供了一套完整的Ajax驱动 ...