【发布时间】:2012-05-07 20:07:41
【问题描述】:
我似乎无法让我的应用接受来自不同域的 POST 请求。我正在尝试在我的应用程序中创建一个 PayPal IPN 处理程序。
当用户点击我页面上的“订阅”按钮时,PayPal 会向我的 IPN 处理程序发送一个 IPN(一个 POST)。
我可以在我的 AppEngine 日志中看到收到了一个 POST 请求,但它是空的(例如,没有参数,我的 logging.debug 消息没有显示在日志中等)
因此,我通过在我的应用程序内向它发送 POST 来测试我的处理程序,并且处理程序按预期工作。
我假设不接受来自外部来源的 POST 是一项安全功能?如果是这样,我如何让我的应用接受来自 PayPal 的 POST?
这是我的处理程序目前的样子(仅用于测试):
class BaseHandler(tornadotoad.mixin.RequestHandler, tornado.web.RequestHandler):
# ...
class IPNHandler(BaseHandler):
def post(self):
if is_ajax(self.request):
logging.info('AJAX')
logging.info(self.request.arguments)
self.write("This is the IPN Handler\n'")
self.write(self.request.arguments)
return
提前致谢。
附:我正在使用 PayPal 的 Sandbox Test Tool 发送 IPN
【问题讨论】:
-
据我所知,没有安全问题会阻止这种情况发生。您确定来自 PayPal 的请求中确实包含您想要的数据吗?
-
不,没有“安全功能”。
is_ajax是什么?您的处理程序返回什么状态码?您确定您使用的是正确的 URL 并且您的处理程序正在被调用吗?您能否向我们展示一个展示该问题的简单演示应用程序,以及一个演示该问题的命令行 (curl/wget)? -
您如何确保该帖子来自 PayPal。另外,您能否说出您正在尝试哪种与 PayPay 的集成模型?
-
@NickJohnson is_ajax 只是一个检查请求标头是否包含“XMLHttpRequest”的函数。我认为我的处理程序正在被调用,因为我在发送 IPN 时在我的日志中得到了这个
2012-04-27 11:13:50.294 /ipn 302 23ms 0kb 173.0.82.126 - - [26/Apr/2012:20:13:50 -0700] "POST /ipn HTTP/1.1" 302 0 - - "myapp.appspot.com" ms=23 cpu_ms=0 api_cpu_ms=0 cpm_usd=0.000108。 -
@KarthikAnanth 我正在使用Website Payments Standard 方法。
标签: python google-app-engine tornado paypal-ipn paypal-subscriptions