【问题标题】:How to disable IPN for a specific button如何禁用特定按钮的 IPN
【发布时间】:2015-09-08 07:18:20
【问题描述】:

我们正在运行 WPMUdev 的 Memberships 插件,它要求在一个人的 PayPal 配置文件中设置默认 IPN 列表 URL(因为即使订阅按钮包含 notify_url,但没有设置默认 IPN 监听器,显然没有办法获得定期付款取消消息)——一切正常。

问题是,PayPal 无法区分此插件生成的按钮和手动生成的按钮(例如一次性捐赠),并尝试将 IPN 消息发送到插件的侦听器,这会因为预期的元数据而完全混淆不随它一起发送。然后,PayPal 会重试 IPN,直到达到其限制。

有没有办法使用notify_url(或其他一些HTML变量)来禁用特定按钮的IPN消息?还是我必须编写一个空 IPN 侦听器来简单地确认 IPN 消息并将它们丢弃在地板上?

【问题讨论】:

  • 只是一个想法(自从我使用 IPN 以来已经有一段时间了),如何将一些查询字符串附加到您想要挑选出来的 URL 以便 您的侦听器 可以识别?归根结底,Paypal 真正所做的只是向您发送消息(您可以通过notify_url 告诉他们,帐户或覆盖)。
  • @EdSF,这不是一个好主意,即使我确实创建了必要的本地数据库记录以防止现有侦听器拒绝 IPN。请记住,侦听器存在是有原因的,并且期望更改本地状态作为 paypal 事件的结果。使手动创建的按钮看起来像属于插件的按钮可能会破坏插件。我想我必须编写一个自定义侦听器 :( 周围有足够多的模板实现,我只是很生气我必须有这个额外的、毫无意义的步骤。
  • 反之亦然,您只是在识别“一次性”,甚至可能不需要做任何数据库的事情。如果你有你的听众应该“忽略”的“一次性按钮”,那么这个想法是保持你现有的工作实现不变,并且只“一次性”“偶尔”按钮 - 例如使用查询字符串 - 您只能识别“一次性”(仅此而已) - 它可能很简单,如 if has "foo" querystring just respond but don't do anything in backend。我想这完全取决于你所说的“一次性”是什么意思......
  • @EdSF 也许我们在谈论不同的事情。问题是会员插件会收到手动创建按钮的 IPN 请求,除非我使用 notify_url 提供显式覆盖,但是对于手动创建的按钮,没有除非我写一个监听器。如果无法为特定按钮禁用 IPN,那么我需要将手动创建的按钮指向一个侦听器,该侦听器将对通知执行一些合理的操作(包括正确确认消息)。
  • 正确,所以在您的“手动创建按钮”(一次性/偶尔需要)中,您将按照 http://my-current-listener.com?disregard=me 的行分配一个 notify_url - 在这一点你的听众只会正确回应而不做任何其他事情。这有意义吗?

标签: paypal paypal-ipn


【解决方案1】:

@EdSF 所说的是我会推荐的。

设置一个 IPN 侦听器,该侦听器只向 PayPal 返回 200 OK。它实际上不需要做任何事情。

然后将该 URL 设置为要“禁用”的按钮中的 notify_url 的值。

这样您就不会遇到来自 PayPal 的 IPN 循环尝试访问不存在的虚假 URL。

【讨论】:

  • 猜猜我必须写一个空监听器,然后。似乎很遗憾我不能告诉 PP 不要为这个按钮发送 IPN。然而,单独返回 200 可能还不够:根据 PP 文档,侦听器必须附加一个字符串并调用某些东西或其他东西才能获得有效/无效响应(因此,2 次握手)
  • 所做的只是验证数据,以便您确定它来自 PayPal。在这种情况下,你不关心那个,所以你不需要这样做。实际上,一个简单的 IPN 脚本实际上什么都不做就足够了。设置需要 2 分钟。
  • 好的,只要 PayPal 不在乎没有收到 cmd=_notify-validate ,那么可以确定,无操作端点可以工作。我想我对 PayPal 的文档的解释更加无情了。来自 PayPal 的 IPN 调用是否完全关心 IPN 端点返回的数据的内容(或类型),还是只关心 HTTP 结果代码?
  • 它根本不关心数据。它只需要从 PayPal 发送到您的 URL 的 HTTP POST 返回 200 响应。只要您在该 URL 处加载页面而没有错误,就可以了。它实际上可能是一个空白页面。
【解决方案2】:

在我描述的场景中,很明显提供一个空的notify_url 不起作用(仍然使用默认的 IPN 侦听器 URL)因此(除非更有经验的 PayPal 开发人员可以另外指出),并且作为@ Andrew Angell 说,有必要提供一个 IPN 侦听器来简单地确认 IPN 消息(如果需要,还可以记录它)。

请注意,如PayPal's documentation 中所述,仅回复 HTTP 200 响应是不够的; PayPal 将继续重试 IPN,直到超出限制或配置的侦听器以该链接中描述的适当肯定确认作出响应。

网络上有许多可用的 IPN 侦听器模板,所以这是一种选择,但这是我刚刚想到的另一种选择:

有一个或两个 IPN 多路复用器脚本浮动,例如,this one,虽然我还没有尝试过,所以无法评价它的质量或适用性。但我猜想使用预先存在的多路复用器脚本将是明智之举,因为 a) 它处理我在我的 OP 中提出的问题,并且 b) 它提供了一个现成的机制来处理其他应用程序如果需要,请使用 IPN。

【讨论】:

  • HTTP 200 '肯定确认'。您的链接表明您需要参与验证协议,但这不是“肯定的确认”。
  • 您不需要验证 IPN。这并不是阻止 PayPal 服务器发送更多 IPN 的原因。当任何页面从您的服务器成功加载时,就会发生 200 OK。这就是阻止更多 IPN 的原因。一个实际上什么都没有的脚本,但至少在用浏览器点击时可以成功加载,就可以了。
猜你喜欢
  • 2022-01-15
  • 2017-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多