应无所住,而生其心
排名
1
文章
845
粉丝
110
评论
162
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

微信开发四 接受用户普通消息与回复消息

6428人阅读 2019/1/17 15:15 总访问:4875812 评论:2 收藏:0 手机
分类: 微信


微信接收用户普通消息的文章可以在官方中直接看


微信普通消息分类:


 接受用户文本消息 与 回复文本信息        

注意在接收用户普通消息的时候,推送的xml格式没有eventKey,event 

这个是菜单点击的时候会推送的菜单的标识


接收文本消息的格式

  1.  <xml>
  2.  <ToUserName><![CDATA[toUser]]></ToUserName>
  3.  <FromUserName><![CDATA[fromUser]]></FromUserName> 
  4.  <CreateTime>1348831860</CreateTime>
  5.  <MsgType><![CDATA[text]]></MsgType>
  6.  <Content><![CDATA[this is a test]]></Content>
  7.  <MsgId>1234567890123456</MsgId>
  8.  </xml>

 处理文本消息的类  

      

接收文本消息实现

  1.   /// <summary>
  2.     /// 处理用户发送的文本消息方法
  3.     /// </summary>
  4.     public class TextProcess : BaseProcess
  5.     {
  6.         public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
  7.         {
  8.             //取出发送者与接收者账号
  9.             string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
  10.             string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;
  11.  
  12.             //取出消息内容
  13.             string Content = xl.Elements().Where(a => a.Name == "Content").FirstOrDefault().Value;
  14.         }
  15.     }


 回复文本消息工具类封装,增加回复文本消息方法

  1.    /// <summary>
  2.         /// 回复文本消息的方法
  3.         /// </summary>
  4.         public void SendTextMesXml(HttpResponseBase Response, ReTextMsgModel _rmg)
  5.         {
  6.  
  7.             string rxmls = string.Format(@"<xml>
  8.                                <ToUserName>{0}</ToUserName>
  9.                                <FromUserName>{1}</FromUserName>
  10.                                <CreateTime>{2}</CreateTime>
  11.                                <MsgType><![CDATA[text]]></MsgType>
  12.                                <Content><![CDATA[{3}]]></Content>
  13.                              </xml>           
  14.                            ", _rmg.ToUserName, _rmg.FromUserName
  15.                             , ConvertDateTimeInt(DateTime.Now), _rmg.Content);
  16.  
  17.             Response.Write(rxmls);
  18.  
  19.             Response.End();
  20.         }

在处理类中调用该方法 

  1. /// <summary>
  2.     /// 处理用户发送的文本消息方法
  3.     /// </summary>
  4.     public class TextProcess : BaseProcess
  5.     {
  6.         public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
  7.         {
  8.             //取出发送者与接收者账号
  9.             string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
  10.             string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;
  11.  
  12.             //取出消息内容
  13.             string Content = xl.Elements().Where(a => a.Name == "Content").FirstOrDefault().Value;
  14.  
  15.             //回复的内容
  16.             string retmes = "";
  17.  
  18.             if (Content == "1")
  19.                 retmes = "用户输入1";
  20.             else if (Content == "2")
  21.                 retmes = "用户输入了2";
  22.             else
  23.                 retmes = "随便回复一个^_^";
  24.  
  25.             //组建回复文本信息的类
  26.             ReTextMsgModel rsm = new ReTextMsgModel();
  27.  
  28.             rsm.MsgType = "text";
  29.             rsm.Content = retmes;
  30.             rsm.ToUserName = FromUserName;
  31.             rsm.FromUserName = ToUserName;
  32.  
  33.             //调用回复文本信息方法
  34.             new SendMesTool().SendTextMesXml(_response, rsm);
  35.  
  36.             //记录一个日志
  37.             LogTool.AddLog(new MsgLog() { MsgType = "Text", Content = Content });
  38.  
  39.             _response.End();
  40.  
  41.         }
  42.     }

   效果如下

发表情也会认为是一个文本信息!!



接受用户图片消息 与 回复图片信息

接收图片消息看官方文档,格式为     

  1.  <xml>
  2.  <ToUserName><![CDATA[toUser]]></ToUserName>
  3.  <FromUserName><![CDATA[fromUser]]></FromUserName>
  4.  <CreateTime>1348831860</CreateTime>
  5.  <MsgType><![CDATA[image]]></MsgType>
  6.  <PicUrl><![CDATA[this is a url]]></PicUrl>
  7.  <MediaId><![CDATA[media_id]]></MediaId>
  8.  <MsgId>1234567890123456</MsgId>
  9.  </xml>

  其他都一样,主要是两个属性PicUrl和MediaId,一个是图片的url,

一个是对应图片的Id

可以先取出来,记录在日志中查看

  1.     /// <summary>
  2.     /// 处理图片信息的方法
  3.     /// </summary>
  4.     public class ImageProcess : BaseProcess
  5.     {
  6.         public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
  7.         {
  8.             //取出发送者与接收者账号
  9.             string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
  10.             string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;
  11.  
  12.             //取出图片连接
  13.             string PicUrl = xl.Elements().Where(a => a.Name == "PicUrl").FirstOrDefault().Value;
  14.  
  15.             //取出MediaId,图片资源对应的id
  16.             string MediaId = xl.Elements().Where(a => a.Name == "MediaId").FirstOrDefault().Value;
  17.  
  18.             //记录一个日志
  19.             LogTool.AddLog(new MsgLog() { MsgType = "Image", Remark = "PicUrl:" + PicUrl,
  20.                                           Remark2 = MediaId });
  21.  
  22.             _response.End();
  23.         }
  24.     }

  PicUrl就是一个图片链接,可以在浏览器中访问

MediaId是串很长的字符串,代表的就是对应的图片资源


 回复图片信息

 先看看文档        

  1. <xml>
  2. <ToUserName><![CDATA[toUser]]></ToUserName>
  3. <FromUserName><![CDATA[fromUser]]></FromUserName>
  4. <CreateTime>12345678</CreateTime>
  5. <MsgType><![CDATA[image]]></MsgType>
  6. <Image>
  7. <MediaId><![CDATA[media_id]]></MediaId>
  8. </Image>
  9. </xml>

 其实其他都一样主要是MediaId,如果回复一个和用户一样的图片

就直接把用户传递的MediaId回传给他就行了,如果要回复其他图片,看文档上解释

需要通过素材上传接口上传资源,然后获取一个与之关联的MediaId就可了

 

编写回复图片信息的model        

  1.    /// <summary>
  2.     /// 回复图片信息的model
  3.     /// </summary>
  4.     public class ReImageMsgModel
  5.     {
  6.         public string ToUserName { getset; }
  7.         public string FromUserName { getset; }
  8.         public int CreateTime { getset; }
  9.         public string MsgType { getset; }
  10.         public string MediaId { getset; }
  11.     }

在回复信息的工具类中编写回复图片信息的方法   

  1.   /// <summary>
  2.         /// 回复图片消息的方法
  3.         /// </summary>
  4.         public void SendImageMesXml(HttpResponseBase Response, ReImageMsgModel _rmg)
  5.         {
  6.  
  7.             string rxmls = string.Format(@"<xml>
  8.                                <ToUserName>{0}</ToUserName>
  9.                                <FromUserName>{1}</FromUserName>
  10.                                <CreateTime>{2}</CreateTime>
  11.                                <MsgType><![CDATA[{3}]]></MsgType>
  12.                                <Image>
  13.                                   <MediaId><![CDATA[{4}]]></MediaId>
  14.                                  </Image>
  15.                              </xml>           
  16.                            ", _rmg.ToUserName, _rmg.FromUserName
  17.                             , ConvertDateTimeInt(DateTime.Now),_rmg.MsgType,_rmg.MediaId);
  18.  
  19.             Response.Write(rxmls);
  20.             Response.End();
  21.         }

在图片信息处理类中调用该方法进行回复一个图片信息  

  1.   /// <summary>
  2.     /// 处理图片信息的方法
  3.     /// </summary>
  4.     public class ImageProcess : BaseProcess
  5.     {
  6.         public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
  7.         {
  8.             //取出发送者与接收者账号
  9.             string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
  10.             string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;
  11.  
  12.             //取出图片连接
  13.             string PicUrl = xl.Elements().Where(a => a.Name == "PicUrl").FirstOrDefault().Value;
  14.  
  15.             //取出MediaId,图片资源对应的id
  16.             string MediaId = xl.Elements().Where(a => a.Name == "MediaId").FirstOrDefault().Value;
  17.  
  18.  
  19.             //组建回复图片信息的类
  20.             ReImageMsgModel rsm = new ReImageMsgModel();
  21.  
  22.             rsm.MsgType = "image";
  23.             rsm.MediaId = MediaId;
  24.             rsm.ToUserName = FromUserName;
  25.             rsm.FromUserName = ToUserName;
  26.  
  27.             new SendMesTool().SendImageMesXml(_response, rsm);
  28.  
  29.             //记录一个日志
  30.             LogTool.AddLog(new MsgLog() { MsgType = "Image", Remark = "PicUrl:" + PicUrl,
  31.                                           Remark2 = MediaId });
  32.  
  33.             _response.End();
  34.         }
  35.     }

效果如下





欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739

评价

雨雨雨雨辰

2019/1/17 16:17:19

我也想写这个的

风清月:@雨雨雨雨辰写哇。最近文章更新频率好低哦≧﹏≦

2019/1/17 16:33:31 回复