C#微信公众号开发 微信事件交互

2019-12-30 15:51:25于丽

前言

一切准备工作就绪时就先实现一个关注公众号后向客户端推送一条消息。关注后推送消息需要一个get请求、一个post请求,get请求主要是为了向微信服务器验证,post请求主要就是处理微信消息了。 调接口时传递的appid和appsecret请传递自己公众号对应的参数。

微信事件交互

微信事件交互主要是向微信服务器推送XML数据包

C#微信事件交互,C#微信公众号开发,C#微信公众号

看效果

C#微信事件交互,C#微信公众号开发,C#微信公众号

看代码


[HttpGet]
[ActionName("Index")]
public ActionResult Get(string signature,string timestamp,string nonce,string echostr)
{
  if (CheckSignature.Check(signature, timestamp, nonce, token))
  {
    return Content(echostr);
  }
  else
  {
    return Content("err");
  }

[HttpPost]
[ActionName("Index")]
public ActionResult Get(string signature, string timestamp, string nonce)
{
   StreamReader sr = new StreamReader(Request.InputStream, Encoding.UTF8);
   XmlDocument doc = new XmlDocument();
   doc.Load(sr);
   sr.Close();
   sr.Dispose();
 
   WxMessage wxMessage = new WxMessage();
   wxMessage.ToUserName = doc.SelectSingleNode("xml").SelectSingleNode("ToUserName").InnerText;
   wxMessage.FromUserName = doc.SelectSingleNode("xml").SelectSingleNode("FromUserName").InnerText;
   wxMessage.MsgType = doc.SelectSingleNode("xml").SelectSingleNode("MsgType").InnerText;
   wxMessage.CreateTime = int.Parse(doc.SelectSingleNode("xml").SelectSingleNode("CreateTime").InnerText);
 
   if (wxMessage.MsgType == "event")
   {
     wxMessage.EventName = doc.SelectSingleNode("xml").SelectSingleNode("Event").InnerText;
     if (!string.IsNullOrEmpty(wxMessage.EventName) && wxMessage.EventName == "subscribe")
     {
       string content = "您好,欢迎访问garfieldzf8测试公众平台";
       content = SendTextMessage(wxMessage, content);
       return Content(content);
    }
  }
      return Content("");
}
 
 
private string SendTextMessage(WxMessage wxmessage,string content)
{
   string result = string.Format(Message, wxmessage.FromUserName,wxmessage.ToUserName,DateTime.Now.Ticks, content);
   return result;
}
 
 
 public string Message
 {
   get
   {
     return @"<xml>
           <ToUserName><![CDATA[{0}]]></ToUserName>
           <FromUserName><![CDATA[{1}]]></FromUserName>
           <CreateTime>{2}</CreateTime>
           <MsgType><![CDATA[text]]></MsgType>
           <Content><![CDATA[{3}]]></Content>
         </xml>";
      }
  }