微信公众号官网提供代码示例的坑---自定义菜单

我第一次开发微信公众号,参照微信公众号官网提供的示例进行练习,前面一直都正常,但是在自定义菜单开发阶段,却出现错误。

主函数Handle代码如下:

def POST(self):
    try:
        webData = web.data()
        print "Handle Post webdata is ", webData   #后台打日志
        recMsg = receive.parse_xml(webData)
        if isinstance(recMsg, receive.Msg):
            toUser = recMsg.FromUserName
            fromUser = recMsg.ToUserName
            if recMsg.MsgType == 'text':
                content = kefu.upload(recMsg.Content).encode('utf-8')
                replyMsg = reply.TextMsg(toUser, fromUser, content)
                return replyMsg.send()
            if recMsg.MsgType == 'image':
                mediaId = recMsg.MediaId
                replyMsg = reply.ImageMsg(toUser, fromUser, mediaId)
                return replyMsg.send()
        if isinstance(recMsg, receive.EventMsg):
            print '1'
            if recMsg.Event == 'CLICK':
                print '2'
                if recMsg.EventKey == 'mpGuide':
                    print '3'
                    content = u"编写中,尚未完成".encode('utf-8')
                    replyMsg = reply.TextMsg(toUser, fromUser, content)
                    print '4'
                    return replyMsg.send()
        return reply.Msg().send()
    except Exception, Argment:
        return Argment

我点击菜单中的CLICK按钮时,后台日志会打印出webData,说明正常接收到数据了,而且,也正常打印出我用于寻找bug的log:1,2,3。但是在没有打印出4的情况下就结束了

Handle Post webdata is  <xml><ToUserName><![CDATA[gh_d4c4e048a698]]></ToUserName>
<FromUserName><![CDATA[o0kN40bxtsYdj7DEuhTfmJsNEPbU]]></FromUserName>
<CreateTime>1506067827</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[mpGuide]]></EventKey>
</xml>
1
2
3
127.0.0.1:10622 - - [22/Sep/2017 16:10:29] "HTTP/1.1 POST /wx" - 200 OK

说明正确判断了是CLICK属性,EventKey也等于mpGuide。但是,就是不能打印出4,所以我推测肯定是在这两句出错:

replyMsg = reply.TextMsg(toUser, fromUser, content)
return replyMsg.send()

但是我认为这句话是不可能出错的啊,因为这句话就是把toUser,fromUser和content三个值组合成一个返回值,然后return返回啊。

我也知道,之所以显示这么个错误,是因为微信服务器没收到一个url请求,都会等待返回结果,如果尝试3次都没有收到任何返回值,就会回复给用户“服务器错误”提示,所以我确定这个错误就是因为我的返回值没有正确返回给微信服务器。但是,我死活不知道原因在哪。


下面转折来了。。。


就在我写这篇博客的时候,在我仔仔细细说明问题的时候,在我一行一行截取代码的时候,我发现。。。我竟然在第二个if里面少写了两行看似最简单,但是却最有用的代码!!!!!


            toUser = recMsg.FromUserName
            fromUser = recMsg.ToUserName

因为缺少这两行,导致后面的

replyMsg = reply.TextMsg(toUser, fromUser, content)
没能成功生成返回值,自然微信服务器收不到消息,提示错误。。。

哎,想自杀的心都有了。。。真感谢微信公众号官网为大家挖的坑。。。

浪费了一天的时间,哎。。。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值