您的位置:首页 > 编程语言 > Python开发

Python+Django开发微信公众号验证通过但微信推送信息接收不到的问题解答

2015-02-27 14:40 1146 查看
    先说明问题,再说下解决的过程,最后说下解决的方法。其实很简单,但是排查很恶心,可以直接看最后的解决方案。

问题:

我使用:Apache:2.4.7 Ubuntu:12.04 Python:2.7.6 Django:1.6.8开发。做完第一步:微信网站验证成功,之后文档上说微信所有的请求,处理,回复都有转发到我自己的服务器。1.但是我没有收到任何请求(在views.py内没有接收到post请求)。

排查:

1.然后我问了微信平台说没有技术客服。又问了一些微信开发的群,里面本来使用Python进行微信开发的人就少再加之这个问题没有多少人遇到,所以基本上没得到突破。

2.在平台上试探性的找其他可能有帮助的信息,直到找到一个叫报警号的二维码,我可以关注然后得到微信服务器方的报警提示,关注后我尝试发送信息真的得到了报警信息。如下:

Appid: wx90391d14181ccbdc

昵称: 天天搜贷

时间: 2015-02-13 15:04:28

内容: 微信服务器向公众号推送消息或事件后,得到的回应不合法

次数: 5分钟 12次

错误样例: [Event=UnSubscribe][ip=121.41.76.173][response_length=54253][response_content=<!DOCTYPE html>

<html lang="en">

<head>

  <meta http-equiv="content-type" content="text/html; charset=utf-8">

  <meta name="robots" content="NONE,NOARCHIVE">

  <title>RuntimeError at /wxcheck</title>

  <style type="text/css">

    html * { padding:0; margin:0; }

    body * { padding:10px 20px; }

    body * * { padding:0; }

    body { font:small sans-serif; }

    body>div { border-bottom:1px solid #ddd; }

    h...

报警排查指引,请见: http://url.cn/ab0jnP
然后对照平台上面的报警说明肯定的是微信服务器是发送了请求给我,但是由于使用了Django框架,在请求还没有到达代码时就被Django错误返回了,但现在的问题是微信的提示就那么多,但Django的相应里面是有详细的错误路径和原因的,这些微信里面是查不到的。

3.于是我就是用火狐浏览器测试get类请求是可以的,将get请求重新编辑为post请求重新发送也是可以的,那这里我就纳闷了,我自己的get,post请求都是可以的,但是微信的却使get请求可以post请求是不可以的。也就是说不能重新模拟错误重现。

4.我就想是不是由于微信请求的结构影响造成的,但是微信平台上有没有详细介绍request的结构的部分,所以我打算是用Java先来完整的走通一遍再是用Python做,因为Java是有示例代码的。

5.就在又重新部署Java及tomcat环境的时候想到了,可以是用表单提交post请求模拟微信服务器的请求,而且这个要简洁的多,现在简单的,于是放下第四步先做这个。

6.是用表单执行的post请求终于模拟出了微信请求同样的错误,如下图:


RuntimeError at /wxcheck

You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to www.ddbid.com/wxcheck/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings.


Request Method:POST
7.我也就知道了这是settings设置里面少一个设置造成的。然后我就添加了这个设置。

8.添加后浏览器直接模拟get,post请求都不行了,只有在后面添加一个“/“才可以。修改公众平台上的配置,在原有的url后面添加”/“

9.一切正常。然后我想重现之前的错误,整理文档的时候发现当我吧settings里面添加的那条配置删掉后没有任何影响!

解决方案:最后知道这种情况只要在url后面添加一个”/“就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐