tnblog
首页

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

56人阅读 2019/1/17 15:15 评论:2 收藏
分类: 微信


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


微信普通消息分类:


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

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

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


接收文本消息的格式

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>

 处理文本消息的类  

      

接收文本消息实现

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


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

   /// <summary>
        /// 回复文本消息的方法
        /// </summary>
        public void SendTextMesXml(HttpResponseBase Response, ReTextMsgModel _rmg)
        {
 
            string rxmls = string.Format(@"<xml>
                               <ToUserName>{0}</ToUserName>
                               <FromUserName>{1}</FromUserName>
                               <CreateTime>{2}</CreateTime>
                               <MsgType><![CDATA[text]]></MsgType>
                               <Content><![CDATA[{3}]]></Content>
                             </xml>           
                           ", _rmg.ToUserName, _rmg.FromUserName
                            , ConvertDateTimeInt(DateTime.Now), _rmg.Content);
 
            Response.Write(rxmls);
 
            Response.End();
        }

在处理类中调用该方法 

/// <summary>
    /// 处理用户发送的文本消息方法
    /// </summary>
    public class TextProcess : BaseProcess
    {
        public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
        {
            //取出发送者与接收者账号
            string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
            string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;
 
            //取出消息内容
            string Content = xl.Elements().Where(a => a.Name == "Content").FirstOrDefault().Value;
 
            //回复的内容
            string retmes = "";
 
            if (Content == "1")
                retmes = "用户输入1";
            else if (Content == "2")
                retmes = "用户输入了2";
            else
                retmes = "随便回复一个^_^";
 
            //组建回复文本信息的类
            ReTextMsgModel rsm = new ReTextMsgModel();
 
            rsm.MsgType = "text";
            rsm.Content = retmes;
            rsm.ToUserName = FromUserName;
            rsm.FromUserName = ToUserName;
 
            //调用回复文本信息方法
            new SendMesTool().SendTextMesXml(_response, rsm);
 
            //记录一个日志
            LogTool.AddLog(new MsgLog() { MsgType = "Text", Content = Content });
 
            _response.End();
 
        }
    }

   效果如下

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



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

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

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[image]]></MsgType>
 <PicUrl><![CDATA[this is a url]]></PicUrl>
 <MediaId><![CDATA[media_id]]></MediaId>
 <MsgId>1234567890123456</MsgId>
 </xml>

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

一个是对应图片的Id

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

    /// <summary>
    /// 处理图片信息的方法
    /// </summary>
    public class ImageProcess : BaseProcess
    {
        public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
        {
            //取出发送者与接收者账号
            string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
            string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;
 
            //取出图片连接
            string PicUrl = xl.Elements().Where(a => a.Name == "PicUrl").FirstOrDefault().Value;
 
            //取出MediaId,图片资源对应的id
            string MediaId = xl.Elements().Where(a => a.Name == "MediaId").FirstOrDefault().Value;
 
            //记录一个日志
            LogTool.AddLog(new MsgLog() { MsgType = "Image", Remark = "PicUrl:" + PicUrl,
                                          Remark2 = MediaId });
 
            _response.End();
        }
    }

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

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


 回复图片信息

 先看看文档        

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[media_id]]></MediaId>
</Image>
</xml>

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

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

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

 

编写回复图片信息的model        

   /// <summary>
    /// 回复图片信息的model
    /// </summary>
    public class ReImageMsgModel
    {
        public string ToUserName { get; set; }
        public string FromUserName { get; set; }
        public int CreateTime { get; set; }
        public string MsgType { get; set; }
        public string MediaId { get; set; }
    }

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

  /// <summary>
        /// 回复图片消息的方法
        /// </summary>
        public void SendImageMesXml(HttpResponseBase Response, ReImageMsgModel _rmg)
        {
 
            string rxmls = string.Format(@"<xml>
                               <ToUserName>{0}</ToUserName>
                               <FromUserName>{1}</FromUserName>
                               <CreateTime>{2}</CreateTime>
                               <MsgType><![CDATA[{3}]]></MsgType>
                               <Image>
                                  <MediaId><![CDATA[{4}]]></MediaId>
                                 </Image>
                             </xml>           
                           ", _rmg.ToUserName, _rmg.FromUserName
                            , ConvertDateTimeInt(DateTime.Now),_rmg.MsgType,_rmg.MediaId);
 
            Response.Write(rxmls);
            Response.End();
        }

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

  /// <summary>
    /// 处理图片信息的方法
    /// </summary>
    public class ImageProcess : BaseProcess
    {
        public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
        {
            //取出发送者与接收者账号
            string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
            string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;
 
            //取出图片连接
            string PicUrl = xl.Elements().Where(a => a.Name == "PicUrl").FirstOrDefault().Value;
 
            //取出MediaId,图片资源对应的id
            string MediaId = xl.Elements().Where(a => a.Name == "MediaId").FirstOrDefault().Value;
 
 
            //组建回复图片信息的类
            ReImageMsgModel rsm = new ReImageMsgModel();
 
            rsm.MsgType = "image";
            rsm.MediaId = MediaId;
            rsm.ToUserName = FromUserName;
            rsm.FromUserName = ToUserName;
 
            new SendMesTool().SendImageMesXml(_response, rsm);
 
            //记录一个日志
            LogTool.AddLog(new MsgLog() { MsgType = "Image", Remark = "PicUrl:" + PicUrl,
                                          Remark2 = MediaId });
 
            _response.End();
        }
    }

效果如下





请先登录

{{item.title}}

{{item.content}}
不能简单的解决问题,那是设计与做法有问题
博主搜索
文章类别
CSS 5篇
云服务 2篇
Git 4篇
.NET 29篇
Android 0篇
软件架构 4篇
.NET Core 15篇
.NET MVC 3篇
英语 3篇
随笔 3篇
Bootstrap 1篇
Redis 12篇
编辑器 2篇
Js相关 6篇
Layui 2篇
Oracle 7篇
Python 2篇
数据库 2篇
EF 2篇
微信 2篇
前端 1篇
消息队列 1篇
最新文章
为什么要使用webapi而不直接使用controller
net core发布到IIS常见错误
net core依赖注入
NET CORE配置EF连接字符串
Net Core使用依赖注入来装载EF的上下文对象
下载net core
Sqlerver添加用户与授权
net core中使用url编码与解码操作
net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified
.net core使用response
ef6动态添加条件
最新评价
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}