作者:琴瑟_0203 | 来源:互联网 | 2021-11-16 18:46
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。请注意:
1、关于重试的消息排重,推荐使用msgid排重。
2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。
3、为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“消息加解密说明”。
各消息类型的推送XML数据包结构如下:
文本消息
1348831860
1234567890123456
参数 | 描述 |
---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | text |
Content | 文本消息内容 |
MsgId | 消息id,64位整型 |
图片消息
1348831860
1234567890123456
参数 | 描述 |
---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | image |
PicUrl | 图片链接 |
MediaId | 图片消息媒体id,可以调用多媒体文件下载接口拉取数据。 |
MsgId | 消息id,64位整型 |
语音消息
1357290913
1234567890123456
参数 | 描述 |
---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 语音为voice |
MediaId | 语音消息媒体id,可以调用多媒体文件下载接口拉取数据。 |
Format | 语音格式,如amr,speex等 |
MsgID | 消息id,64位整型 |
请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段 (注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启 语音识别后的语音XML数据包如下:
1357290913
1234567890123456
多出的字段中,Format为语音格式,一般为amr,Recognition为语音识别结果,使用UTF8编码。
视频消息
1357290913
1234567890123456
参数 | 描述 |
---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 视频为video |
MediaId | 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。 |
ThumbMediaId | 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。 |
MsgId | 消息id,64位整型 |
小视频消息
1357290913
1234567890123456
参数 | 描述 |
---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 小视频为shortvideo |
MediaId | 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。 |
ThumbMediaId | 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。 |
MsgId | 消息id,64位整型 |
地理位置消息
1351776360
23.134521
113.358803
20
1234567890123456
参数 | 描述 |
---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | location |
Location_X | 地理位置维度 |
Location_Y | 地理位置经度 |
Scale | 地图缩放大小 |
Label | 地理位置信息 |
MsgId | 消息id,64位整型 |
链接消息
1351776360
1234567890123456
参数 | 描述 |
---|
ToUserName | 接收方微信号 |
FromUserName | 发送方微信号,若为普通用户,则是一个OpenID |
CreateTime | 消息创建时间 |
MsgType | 消息类型,link |
Title | 消息标题 |
Description | 消息描述 |
Url | 消息链接 |
MsgId | 消息id,64位整型 |
if
(!string.IsNullOrWhiteSpace(requestXML.EventName) &&
requestXML.EventName.ToString().Trim().Equals("subscribe"))
{
SendWelComeMsg(requestXML);//关注时返回的图文消息
}
else if (!string.IsNullOrWhiteSpace(requestXML.EventName) &&
requestXML.EventName.ToString().Trim().Equals("CLICK"))
{
SendEventMsg(requestXML);//发送事件消息
}
break;
///
/// 发送响应事件消息
///
///
private void SendEventMsg(RequestXML requestXML)
{
string keyStr = requestXML.EventKey.ToString();
switch (keyStr)
{
case "mypay":
SendPayDetails(requestXML);//发送薪资账单
break;
case "tianqiyubao":
SendWeaterMessage(requestXML);//发送天气预报
break;
case "kaixinyixiao":
SendKaiXinMessage(requestXML);//发送开心一笑结果集
break;
case "updateMessage":
SendUpdateMessage(requestXML);//发送修改信息链接
break;
case "yuangonghuodong":
SendYuanGongHuoDong(requestXML);//发送学生活动
break;
case "yuangongtongzhi":
SendYuanGongTongZhi(requestXML);//发送员工通知
break;
case "youwenbida":
SendWenti(requestXML);//发送员工提交问题链接
break;
case "mywen":
SendWentiList(requestXML);//发送问题列表链接
break;
case "PhoneSerices":
SendKeFuMessage(requestXML);//接入客服
break;
default:
String respOnseContent= String.Empty;
respOnseContent= FormatTextXML(requestXML.FromUserName, requestXML.ToUserName,"此功能暂未开放!敬请期待!");
HttpContext.Current.Response.COntentType= "text/xml";
HttpContext.Current.Response.COntentEncoding= Encoding.UTF8;
HttpContext.Current.Response.Write(responseContent);
HttpContext.Current.Response.End();
break;
}
}
SendWelComeMsg(requestXML);//关注时返回的图文消息
///
/// 发送关注时的图文消息
///
///
private void SendWelComeMsg(RequestXML requestXML)
{
String respOnseContent= String.Empty;
string newdate = DateTime.Now.Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds.ToString();
string PUrlfileName = "http://www.deqiaohr.com.cn/weixin/welcome.jpg";
respOnseContent= string.Format(Message_News_Main, requestXML.FromUserName, requestXML.ToUserName, newdate, "1",
string.Format(Message_News_Item, "欢迎关注德桥员工服务中心", "苏州德桥人力资源创立于2002年...", PUrlfileName, "http://www.deqiaohr.com.cn/weixin/WxGsjianjie.aspx"));
HttpContext.Current.Response.COntentType= "text/xml";
HttpContext.Current.Response.COntentEncoding= Encoding.UTF8;
HttpContext.Current.Response.Write(responseContent);
HttpContext.Current.Response.End();
}
Message_News_Main 和Message_News_Item是图文消息格式化
///
/// 返回图文消息主体
///
public static string Message_News_Main
{
get
{
return @"
{2}
{3}
{4}
";
}
}
///
/// 返回图文消息项
///
public static string Message_News_Item
{
get
{
return @"
";
}
}
///
/// 发送响应语音识别结果
///
///
private void SendVoiceMsg(RequestXML requestXML)
{
string respOnseContent= FormatTextXML(requestXML.FromUserName, requestXML.ToUserName, "您刚才说的语音消息识别结果为:" + requestXML.Recognition.ToString());
HttpContext.Current.Response.COntentType= "text/xml";
HttpContext.Current.Response.COntentEncoding= Encoding.UTF8;
HttpContext.Current.Response.Write(responseContent);
HttpContext.Current.Response.End();
}
点击查看全文,直接跳转至自己写的网页,关于网页图片自适应的问题,把图片的宽度设置为100%,即可,如果让网页在屏幕中自适应,记得在网页中一定要添加
以上就是详解asp.net微信开发消息应答方法的详细内容,更多请关注其它相关文章!