C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)

C#/ASP.NET MVC微信接口开发文章目录:

1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台

2.C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)

 

 

 一、拼凑回复的XML字符串

微信被动回复的形式有一下六种:

分别对应不同的XML形式,这里以文本消息和图文为例,读者举一反三其他的类似,不再赘述:

回复的文本消息:

复制代码
 1 /// <summary>
 2 /// 回复文本
 3 /// </summary>
 4 /// <param name="FromUserName">发送给谁(openid)</param>
 5 /// <param name="ToUserName">来自谁(公众账号ID)</param>
 6 /// <param name="Content">回复类型文本</param>
 7 /// <returns>拼凑的XML</returns>
 8 public static string ReText(string FromUserName, string ToUserName,string Content)
 9 {
10     string XML = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + ToUserName + "]]></FromUserName>";//发送给谁(openid),来自谁(公众账号ID)
11     XML += "<CreateTime>" + sohovan.com.common.CommonMethod.ConvertDateTimeInt(DateTime.Now) + "</CreateTime>";//回复时间戳
12     XML += "<MsgType><![CDATA[text]]></MsgType>";//回复类型文本
13     XML += "<Content><![CDATA["+ Content + "]]></Content><FuncFlag>0</FuncFlag></xml>";//回复内容 FuncFlag设置为1的时候,自动星标刚才接收到的消息,适合活动统计使用
14     return XML;
15 }
复制代码

回复单图文:

复制代码
 1 /// <summary>
 2 /// 回复单图文
 3 /// </summary>
 4 /// <param name="FromUserName">发送给谁(openid)</param>
 5 /// <param name="ToUserName">来自谁(公众账号ID)</param>
 6 /// <param name="Title">标题</param>
 7 /// <param name="Description">详情</param>
 8 /// <param name="PicUrl">图片地址</param>
 9 /// <param name="Url">地址</param>
10 /// <returns>拼凑的XML</returns>
11 public static string ReArticle(string FromUserName, string ToUserName, string Title, string Description, string PicUrl, string Url)
12 {
13     string XML = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + ToUserName + "]]></FromUserName>";//发送给谁(openid),来自谁(公众账号ID)
14     XML += "<CreateTime>" + sohovan.com.common.CommonMethod.ConvertDateTimeInt(DateTime.Now) + "</CreateTime>";//回复时间戳
15     XML += "<MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>1</ArticleCount><Articles>";
16     XML += "<item><Title><![CDATA[" + Title + "]]></Title><Description><![CDATA[" + Description + "]]></Description><PicUrl><![CDATA[" + PicUrl + "]]></PicUrl><Url><![CDATA[" + Url + "]]></Url></item>";
17     XML += "</Articles><FuncFlag>0</FuncFlag></xml>";
18     return XML;
19 }
复制代码

多图文可以根据项目需求举一反三,这里给个例子:

复制代码
 1 /// <summary>
 2 /// 多图文回复
 3 /// </summary>
 4 /// <param name="FromUserName">发送给谁(openid)</param>
 5 /// <param name="ToUserName">来自谁(公众账号ID)</param>
 6 /// <param name="ArticleCount">图文数量</param>
 7 /// <param name="dtArticle"></param>
 8 /// <returns></returns>
 9 public static string ReArticle(string FromUserName, string ToUserName, int ArticleCount, System.Data.DataTable dtArticle)
10 {
11     string XML = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + ToUserName + "]]></FromUserName>";//发送给谁(openid),来自谁(公众账号ID)
12     XML += "<CreateTime>" + sohovan.com.common.CommonMethod.ConvertDateTimeInt(DateTime.Now) + "</CreateTime>";//回复时间戳
13     XML += "<MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>" + ArticleCount + "</ArticleCount><Articles>";
14     foreach (System.Data.DataRow Item in dtArticle.Rows)
15     {
16         XML += "<item><Title><![CDATA[" + Item["Title"] + "]]></Title><Description><![CDATA[" + Item["Description"] + "]]></Description><PicUrl><![CDATA[" + Item["PicUrl"] + "]]></PicUrl><Url><![CDATA[" + Item["Url"] + "]]></Url></item>";
17     }
18     XML += "</Articles><FuncFlag>0</FuncFlag></xml>";
19     return XML;
20 }
复制代码

二、回复消息即在微信请求我们地址的时候根据请求的情况回复我们想给的XML字符串

这里情况比较多,可以根据项目需求做对于的设置,编写一个网站后台管理关键字、图片、语音回复等等

这里以文本为例,根据文本的内容(即关键字)回复文本还是回复图文消息:

根据文本得到XML:

复制代码
 1 public static string GetText(string FromUserName, string ToUserName, string Content)
 2 {
 3     sohovan.com.common.CommonMethod.WriteTxt(Content);//接收的文本消息
 4     string XML = "";
 5     switch (Content) { 
 6         case "关键字":
 7             XML = ReText(FromUserName, ToUserName, "关键词回复测试");
 8             break;
 9         case"单图文":
10             XML = ReArticle(FromUserName, ToUserName, "测试标题", "测试详情——百度搜索链接", "http://pic.cnblogs.com/avatar/743013/20150521120816.png", "http://www.baidu.com");
11             break;
12         default:
13             XML = ReText(FromUserName, ToUserName, "无对应关键字");
14             break;
15     }
16     return XML;
17 }
复制代码

根据接收的消息WxXmlModel回复消息:

复制代码
 1 private void ResponseXML(WxXmlModel WxXmlModel)
 2 {
 3     string XML = "";
 4     switch (WxXmlModel.MsgType)
 5     { 
 6         case "text"://文本回复
 7             XML = sohovan.com.wxapi.ResponseMessage.GetText(WxXmlModel.FromUserName, WxXmlModel.ToUserName, WxXmlModel.Content);
 8             break;
 9         default://默认回复
10             break;
11     }
12     HttpContext.Current.Response.Write(XML);
13     HttpContext.Current.Response.End();
14 }
复制代码

 

本文版权归作者(谢俊)和博客园所有,欢迎转载,转载请标明出处。

原文地址:http://www.cnblogs.com/net-xiejun/

微信开发群C#.NETWEB程序开发交流

完整源码下载:https://github.com/xiejun-net/weixin

posted @   村长村长  阅读(7696)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示