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

作者:garfieldzf 时间:2023-04-22 21:18:31 

前言

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

微信事件交互

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

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>";
     }
 }

public class WxMessage
{
   public string ToUserName { get; set; }
   public string FromUserName { get; set; }
   public long CreateTime { get; set; }

public string Content { get; set; }
   public string MsgType { get; set; }
   public string EventName { get; set; }
   public string EventKey { get; set; }
}

总结

     开发微信接口的过程中不能调试,唯一排除问题的方式就是在关键的地方记log。

     微信事件交互主要是分析微信发送的xml数据包,解析xml,并按照消息指定格式拼接xml发送给response。在Get方法里用到的CheckSignature 是盛派微信SDK的一个类,也就是对签名校验。

     向客户端发送消息时主要ToUserName和FromUserName。我一开始把两个参数写反了导致客户端收不到消息。

来源:http://www.cnblogs.com/sword-successful/p/6262235.html

标签:C#,微信
0
投稿

猜你喜欢

  • RecycleView实现各种尺寸图片展示

    2021-09-05 05:05:21
  • 浅谈Maven的安装及修改为阿里云下载依赖

    2023-08-05 08:30:37
  • Java 导出excel进行换行的案例

    2021-07-29 04:09:36
  • MyBatis整合Redis实现二级缓存的示例代码

    2022-02-06 15:41:24
  • C#使用RestClient调用Web API

    2022-05-30 04:13:09
  • Spring Boot 定义系统启动任务的多种方式

    2023-11-24 13:25:33
  • Java实现人脸识别登录、注册等功能(最新完整版)

    2022-09-25 00:20:13
  • Java实现FTP上传到服务器

    2022-10-07 10:28:58
  • java 如何读取远程主机文件

    2022-03-23 05:18:19
  • Spring自定义参数解析器代码实例

    2023-07-02 15:08:06
  • Java Swing实现JTable检测单元格数据变更事件的方法示例

    2022-10-16 19:49:29
  • Android使用setContentView实现页面的转换效果

    2021-07-30 15:13:32
  • Android SQLite基本用法详解

    2023-07-02 05:14:58
  • 解决java.lang.Error: Unresolved compilation problems:问题

    2023-02-10 05:58:08
  • android实现双日期选择控件(可隐藏日,只显示年月)

    2023-05-09 12:59:10
  • WCF如何使用动态代理精简代码架构

    2023-09-17 16:25:42
  • Mybatis插件之自动生成不使用默认的驼峰式操作

    2023-11-19 01:20:03
  • Eclipse中改变默认的workspace的方法及说明详解

    2022-07-31 12:07:21
  • Java服务限流算法的6种实现

    2022-04-03 04:52:51
  • 关于Java虚拟机HotSpot

    2022-10-28 18:36:01
  • asp之家 软件编程 m.aspxhome.com