【问题标题】:PHP send 200 status and close connection without sending any content in Paypal IPNPHP发送200状态并关闭连接而不在Paypal IPN中发送任何内容
【发布时间】:2015-10-16 08:31:28
【问题描述】:

我正在尝试使用 Paypal 的 IPN,他们声明我应该“返回一个空的 HTTP 200 响应”。我需要返回这个,然后 PHP 脚本才能继续处理。

有很多关于堆栈溢出和其他地方的示例展示了如何使用带有输出缓冲的“连接:关闭”标头向客户端发送响应并继续处理。但是,当内容长度设置为零时,我找不到任何解决方案。每当我将内容长度标头设置为零时,连接都会保持打开状态,直到脚本终止。

如何提前终止连接,不发送内容并继续处理?

更新:

ob_flush() 在这里无济于事。它将刷新缓冲区,但不会关闭连接。如果您设置 headers connection: close 和一个非零的 content-length 标头,那么当您发送 content-length 字节时,连接将从客户端关闭;这就是 ob_flush() 可以提供帮助的地方。但是,如果您将内容长度设置为零并刷新没有任何内容的缓冲区,则不会向客户端发送任何内容并且连接保持打开状态。

【问题讨论】:

  • “继续处理”是什么意思?您想返回代码 200,然后在同一请求期间执行其他操作吗?您能否链接告诉您执行此操作的 PayPal 文档?我想你可能误解了它应该如何工作
  • 事实证明我做了一个错误的假设。我在协议步骤的第 2 点下的 IPN 协议和体系结构部分中参考了此文档developer.paypal.com/docs/classic/ipn/integration-guide/…。在您继续验证之前,我错误地假设您已经发回了空的 200 响应,但事实证明并非如此,并且 200 状态可以一直等到最后。虽然我已经解决了我遇到的问题,但问题仍然是抽象的,即如何发送空响应并让脚本继续处理。

标签: php paypal-ipn


【解决方案1】:

您必须使用分叉机制:在子节点中处理数据时发送 200 il 父节点。 您还可以将 ReactPHP 用于异步处理或一些排队系统,如 JmsJobQueue :处理是在您调用并向其传递参数的单独脚本中完成的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-22
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2013-08-07
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多