微信开发回复消息收不到的最大罪魁祸首,微信公众账号为什么回复消息不成功的原因解决办法
上一篇文章讲到如何配置微信开发,以及.NET平台使用MVC做一个小DEMO的流程,还有常见收不到消息的问题,本篇文章讲的是一个很容易让人忽略但又是很重要的问题导致用户收不到响应的消息原因。
上一篇文章链接:[C#开发微信.NET平台MVC微信开发 发送普通消息Demo以及收不到消息的问题]
(如果你是通过搜索引擎进来的建议你看下上篇文章,说不定就解决你的问题了)
这个问题出在代码
首先我们的C#代码是这么写的:
1 //接收/回复 消息接口 2 [HttpPost] 3 public ActionResult WeiXin() 4 { 5 Request.ContentEncoding = Encoding.UTF8; 6 var msg = XmlHelper.ToObject<WxTextMessage.Accept>(Request.InputStream); 7 if (msg == null) 8 return Content(""); 9 WxTextMessage.Send smsg = new WxTextMessage.Send() { Content = "ccc", CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, ToUserName = msg.ToUserName }; 10 var str = XmlHelper.ToXml(smsg); 11 return Content(str,"text/xml",Encoding.UTF8); 12 }
第5~8行:将XML数据转换为对象
第9~11行:实例化回复消息对象、转换为XML、返回结果
看出什么问题了吗?(反正我是看了几个小时才发现的)
其实这样写犯了个巨大的错误:
在第9行的地方:响应的消息中:
FromUserName = msg.FromUserName, ToUserName = msg.ToUserName 错误的原因就在为:msg为接收到的消息,而我们实例化的是返回的消息,在接收时:FromUser=用户 ToUser=我 ,然而在返回消息时From和To是反过来的,FromUser=我 ToUser=用户,如果直接这样写就变成了给自己发送消息,因此要反过来写变成: FromUserName = msg.ToUserName, ToUserName = msg.FromUserName
这样一改,用户立即能收到回复的消息,如此简单的细节居然浪费俺一晚上的时间,真的是不甘心啊!
写篇文章帮助更多遇到这个问题的人……