微信開發回復消息收不到的最大罪魁禍首,微信公眾賬號為什么回復消息不成功的原因解決辦法
上一篇文章講到如何配置微信開發,以及.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
這樣一改,用戶立即能收到回復的消息,如此簡單的細節居然浪費俺一晚上的時間,真的是不甘心啊!
寫篇文章幫助更多遇到這個問題的人……