C#開發微信公眾號.NET平台MVC微信開發Demo解決收不到消息的問題


不得不說現在微信非常火,微信開放平台可以自己寫程序跟用戶交互,節省了前台開發成本,免去用戶裝客戶端的煩惱。於是今天興致來潮,想做一個試試。

首先找到了開發者文檔,看了看,蠻簡單的。(公眾號早已申請,有興趣可以關注看看:zyjsoft)

第一步(提供接口,供微信調用,由於是HTTP請求,於是我用MVC模式做了一個簡單的接口):

 //認證接口
        public ActionResult WeiXin(string signature, string timestamp, string nonce, string echostr)
        {
            //暫不驗證
            return Content(echostr);
        }

        //接收/回復 消息接口
        [HttpPost]
        public ActionResult WeiXin()
        {
         //xxxx
      }

從文檔中看出,認證時使用GET方式請求接口地址,發送消息時使用POST方式請求接口地址,因此寫了以上兩個Action來處理

接口地址為:http://182.92.104.112/wx/open/weixin

暫時未認證,大家可以試着玩玩~~~

第二步 接收和響應消息 

接下來看怎么接收和響應數據:

從官方文檔抄來:

當普通微信用戶向公眾賬號發消息時,微信服務器將POST消息的XML數據包到開發者填寫的URL上。各消息類型的推送XML數據包結構如下
===文本消息(接收)
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>
對於每一個POST請求,開發者在響應包(Get)中返回特定XML結構,對該消息進行響應
===文本消息(響應)
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

 

看上去也是蠻簡單的,就是按照指定XML格式解析、構成就OK了。

代碼很快就寫完了(具體實現代碼就不貼上來了,主要就是實現POST的那個Action,也比較簡單),開始測試:

Test-1:失敗(響應空字符串,原因:未取到參數,因為取Xml的數據包是通過Request.InputStream來取的,而並非Forms)…… 改……

Test-2:失敗(響應正確,微信客戶端可無法接收到消息。原因:可能字段順序與官方不相同)……改……

Test-3:失敗(響應正確,微信客戶端仍無法接收到消息。原因:可能是返回MIME類型需要text/xml和Encoding需要UTF8)……改……

Test-4:失敗(響應正確、順序正確、Encoding正確、MIDE類型正確,可就是收不到消息)……沒改的了,能改的都改了,就是不出來

表示測試一次非常麻煩啊:編譯=>發布=>再測試

以下是官方在線測試工具響應結果:

每個字符都對了,跟官方例子完全一致,就是不知道哪里出問題了,網上的資料都是說要么少幾個字符、要么格式不對什么的。

最后找了很久……了很久……很久……久…… 仔細叮着那幾句簡單的代碼看,最后終於在代碼中找到了個巨坑:

發現這個巨坑后我懷疑跟什么字段順序、IMIE類型沒有絲毫關系,之前改的都是做無用功罷了

為了讓大家能搜索到這個問題,將這個巨坑放在下一篇文章講解……

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM