【问题标题】:django-paypal IPN doesn't workdjango-paypal IPN 不起作用
【发布时间】:2011-05-07 05:55:47
【问题描述】:

我在我的 django 应用程序中使用 django-paypal 作为支付解决方案。我正在尝试实现 IPN 处理程序。

当我在我的 IPN 处理 URL 上收到一条 IPN 消息时,django 服务器崩溃时会发生什么:

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 281, in run
    self.finish_response()
  File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 321, in finish_response
    self.write(data)
  File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 417, in write
    self._write(data)
  File "/usr/lib/python2.6/socket.py", line 300, in write
    self.flush()
  File "/usr/lib/python2.6/socket.py", line 286, in flush
    self._sock.sendall(buffer)
error: [Errno 104] Connection reset by peer

我的支付应用程序 urls.py 如下所示:

urlpatterns = patterns('mysite.payment.views',
    (r'^thank_you/', 'thank_you'),
    (r'^canceled/', 'canceled'),
    (r'^paypal-ipn/', include('paypal.standard.ipn.urls'))
    )

对我来说,错误消息毫无用处。如果有人可以帮助我,那就太好了。

【问题讨论】:

    标签: python django paypal django-paypal


    【解决方案1】:

    我承认我是个白痴:)

    您不需要 ssl。但是你需要做一个syncdb,然后才能使用它,...

    上帝有时很容易,你只是看不到它。

    【讨论】:

    • >.
    【解决方案2】:

    您能否准确监控贝宝使用tcpdump 或wireshark 向您的服务器发送的数据包?看起来他们可能会提前终止连接,但如果没有更长的回溯和/或数据包转储,很难说清楚。

    编辑: 我忘记了https消息。 Paypal 可能需要 HTTPS 来处理这些回调。开发服务器不支持该功能,因此很遗憾,您可能需要充实您的服务器配置,然后才能测试该功能。

    【讨论】:

    • 我可以使用即时支付通知 (IPN) 模拟器或带有“真实”请求的沙箱,问题是一样的。但我现在要用 tcpdump 抓包。
    • 出于某种原因,我只收到 https 消息。所以没有那么多可看的。但这可能是问题所在,因为我在 django 开发服务器上运行,我没有任何 ssl 支持。但我不知道在哪里改变这种贝宝行为。
    • 这听起来确实很困难。 tcpdump 中的 HTTPS 消息不会很有趣,而且我相信您必须使用 https...paypal 不会以未加密的格式发送这些消息。
    • 我尝试使用 stunnel 来提供启用 ssl 的服务器。问题在于,paypal ipn 调用转到端口 80 而不是 443。我现在很困惑。如果这是一条真正的 https 消息,它应该发送到端口 443,对吧?
    • 您使用tcpdump 看到的数据包去了哪里? Paypal 绝对不应该将 SSL 与端口 80 通信。这似乎是您可以在 paypal 的系统中配置的东西。
    最近更新 更多