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

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

    致读者:感谢你阅读本文,请随手点击右下角的推荐或分享,谢谢!
  • 相关阅读:
    select * from a,b探讨
    使用python脚本从数据库导出数据到excel
    git入门
    登录远程服务器脚本
    Ubuntu下python开发环境搭建
    asyncio并发编程
    深入理解python协程
    单例模式的几种实现方式
    MySQL统计百分比结果
    Java查询MySQL数据库指定数据库中所有表名、字段名、字段类型、字段长度、字段描述
  • 原文地址:https://www.cnblogs.com/yzeng/p/3885937.html
Copyright © 2020-2023  润新知