接收到微信用户发送过来的消息,我们服务器处理并回应。
需要注意一下,微信说明
对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。请注意,回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器,只支持认证服务号。
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。
关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。
假如服务器无法保证在五秒内处理并回复,必须直接回复空串(是指回复一个空字符串,而不是一个XML结构体中content字段的内容为空,请切勿误解),微信服务器不会对此作任何处理,并且不会发起重试。。这种情况下,可以使用客服消息接口进行异步回复。
请开发者注意,一旦遇到以下情况,微信都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”:
1、开发者在5秒内未回复任何内容 2、开发者回复了异常数据,比如JSON数据等
我们无法保证我们服务器能在5秒回应的话,推荐使用异步处理,使用客服消息回复用户(不讨论客服消息次数限制等问题)
WeixinServer
#region 静态全局变量
private static Token _Token = null;
private static Ticket _Ticket = null;
private readonly static string appid = "wx123456789000";
private readonly static string secret = "abcdefghijklmnopqrstuvwxyz";
private readonly static string domain = "http://wechat.mydomain.com";
#endregion
// 消息处理
public void DisposeMsg(Stream stream)
{
XmlDocument doc = new XmlDocument();
doc.Load(stream);
string type = GetMsgType(doc);
string openid = GetMsgOpenid(doc);
string access_token = AccessToken();
string url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + access_token;
switch (type)
{
case "event":
{
string ev = GetMsgEvent(doc);
if (ev == "subscribe")
{
//关注时,回复用户消息
string data = "{"touser":"" + openid + "","msgtype":"news","news":{"articles": [{"title":"欢迎关注 “XXXX“ ","description":"","url":"","picurl":"" + domain + "/weixin/msg/face1.png"},{"title":"“XXXX” 安卓版下载","description":"","url":"","picurl":"" + domain + "/weixin/msg/jiantou.png"},{"title":"“XXXX” 苹果版下载","description":"","url":"","picurl":"" + domain + "/weixin/msg/jiantou.png"}]}}";
HttpHelper.Post(url, data);
}
} break;
case "text":
{
string content = GetMsgContent(doc);
string data = "";
switch (content)
{
case "tw":
{
data = "{"touser":"" + openid + "","msgtype":"news","news":{"articles": [{"title":"欢迎关注 “XXXX“ ","description":"","url":"","picurl":"" + domain + "/weixin/msg/face1.png"},{"title":" “XXXX” 安卓版下载","description":"","url":"","picurl":"" + domain + "/weixin/msg/jiantou.png"},{"title":" “XXXX” 苹果版下载","description":"","url":"","picurl":"" + domain + "/weixin/msg/jiantou.png"}]}}";
} break;
default:
{
content = "欢迎关注 “XXXX”nnAPP下载:Android IOS";
data = "{"touser":"" + openid + "","msgtype":"text","text":{"content":"" + content + ""}}";
} break;
}
HttpHelper.Post(url, data);
} break;
default: break;
}
}
Action里面处理
[HttpPost]
public ActionResult Access()
{
//异步操作 使用客服消息接口回复用户
Stream stream = Request.InputStream;
AsyncManager.OutstandingOperations.Increment();
var task = Task.Factory.StartNew(() => weixin.DisposeMsg(stream));
task.ContinueWith(t =>
{
//AsyncManager.Parameters["model"] = t.Result;
AsyncManager.OutstandingOperations.Decrement();
});
return Content("");
}




