您的位置:首页 > 移动开发 > 微信开发

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

2017-04-23 15:43 621 查看
            

                  [b]微信接收用户普通消息可以在官方文档中直接看[/b]



           



           

                   微信普通消息分为:
            


   

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

             

          注意在接收用户普通消息的时候,推送的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();
}
}
             

           效果如下

           

 

           

           



          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐