首页 > 代码库 > C#开发微信.NET平台MVC微信开发 发送普通消息Demo以及收不到消息的问题

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

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