微信–使用客服消息异步自动回复用户消息

接收到微信用户发送过来的消息,我们服务器处理并回应。

需要注意一下,微信说明

对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。请注意,回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器,只支持认证服务号。

微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。

关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。

假如服务器无法保证在五秒内处理并回复,必须直接回复空串(是指回复一个空字符串,而不是一个XML结构体中content字段的内容为空,请切勿误解),微信服务器不会对此作任何处理,并且不会发起重试。。这种情况下,可以使用客服消息接口进行异步回复。

请开发者注意,一旦遇到以下情况,微信都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”:

1、开发者在5秒内未回复任何内容
2、开发者回复了异常数据,比如JSON数据等

我们无法保证我们服务器能在5秒回应的话,推荐使用异步处理,使用客服消息回复用户(不讨论客服消息次数限制等问题)

 

WeixinServer

 1        #region 静态全局变量
 2         private static Token _Token = null;
 3         private static Ticket _Ticket = null;
 4         private readonly static string appid = "wx123456789000";
 5         private readonly static string secret = "abcdefghijklmnopqrstuvwxyz";
 6         private readonly static string domain = "http://wechat.mydomain.com";
 7        #endregion
 1         // 消息处理
 2         public void DisposeMsg(Stream stream)
 3         {
 4             XmlDocument doc = new XmlDocument();
 5             doc.Load(stream);
 6             string type = GetMsgType(doc);
 7             string openid = GetMsgOpenid(doc);
 8             string access_token = AccessToken();
 9             string url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + access_token;
10 
11             switch (type)
12             {
13                 case "event":
14 {
15     string ev = GetMsgEvent(doc);
16     if (ev == "subscribe")
17     {
18         //关注时,回复用户消息
19         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"}]}}";
20         HttpHelper.Post(url, data);
21     }
22 } break;
23                 case "text":
24 {
25     string content = GetMsgContent(doc);
26     string data = "";
27     switch (content)
28     {
29         case "tw":
30             {
31                 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"}]}}";
32             } break;
33         default:
34             {
35                 content = "欢迎关注 “XXXX”nnAPP下载:<a href="">Android</a>   <a href="">IOS</a>";
36                 data = "{"touser":"" + openid + "","msgtype":"text","text":{"content":"" + content + ""}}";
37             } break;
38     }
39     HttpHelper.Post(url, data);
40 } break;
41                 default: break;
42             }
43         }

 

Action里面处理

 1         [HttpPost]
 2         public ActionResult Access()
 3         {
 4             //异步操作 使用客服消息接口回复用户
 5             Stream stream = Request.InputStream;
 6             AsyncManager.OutstandingOperations.Increment();
 7             var task = Task.Factory.StartNew(() => weixin.DisposeMsg(stream));
 8             task.ContinueWith(t =>
 9             {
10                 //AsyncManager.Parameters["model"] = t.Result;
11                 AsyncManager.OutstandingOperations.Decrement();
12             });
13             return Content("");
14         }

 

微信--使用客服消息异步自动回复用户消息

原文:http://www.cnblogs.com/deeround/p/4371482.html

以上是微信–使用客服消息异步自动回复用户消息的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>