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类型没有丝毫关系,之前改的都是做无用功罢了

为了让大家能搜索到这个问题,将这个巨坑放在下一篇文章讲解……

 

posted @ 2014-08-01 22:51  yzeng  阅读(3084)  评论(0编辑  收藏  举报