使用 IPN 处理“待付款”的 PayPal 快速结账

Posted

技术标签:

【中文标题】使用 IPN 处理“待付款”的 PayPal 快速结账【英文标题】:PayPal express checkout handling "pending payments" with IPN 【发布时间】:2012-03-08 00:19:26 【问题描述】:

我找不到关于此的任何明确文档。 如果您使用 paypal 快速结帐,当付款待处理时,接下来会发生什么? 如果状态发生变化,paypal 是否会通过 IPN 向您发送更新,您有选择吗?

假设您执行 DoExpressCheckoutPayment(使用 NVP) 你得到这个:

&PAYMENTSTATUS=Pending 
&PENDINGREASON= ECHECK //The payment is pending because it was made by an eCheck that has not yet cleared. 
&REASONCODE=None

所以你已经付款了,你想等到它被清除吗?你接下来应该怎么做。

更新一些(外部文档)我发现只有建议您可以使用(IPN?)来处理待处理的付款。

"如果 Do Express Checkout Payment PENDINGREASON 响应是一个值 除了 none 或 completed ,付款待处理。通常, 这意味着客户已使用 aneCheck 付款。在这种情况下,资金 不保证,您不应运送或交付物品或 服务直到付款成功完成。注意: PayPal 建议您阻止电子支票作为付款方式,如果您 无法处理未决的状态付款。要找出一个状态 待付款,您可以:

提交查询交易。

使用 PayPal 管理器检查状态。请参阅 PayPal 管理器在线帮助 了解详情。”

paypal 沙盒似乎可以选择检查 IPN 消息的快速结帐类型。 DoExpressCheckoutPayment 和 IPN 之间的唯一关联(如果以这种方式使用)似乎您可以使用“自定义”字段来跟踪待处理状态。 DoExpressCheckoutPayment (nvp) 中没有给出 txn_id (ipn)。有人有这方面的经验吗?

【问题讨论】:

我收到 PENDINGREASON=missing 【参考方案1】:

交易 ID 肯定会在 DoExpressCheckoutPayment 中给出,即使 PAYMENTSTATUS=Pending。待处理的付款仍然是交易。

所以是的,当交易完成时,您会通过 IPN 收到通知。这通常需要几个工作日。 完成后,您可以将来自 DoExpressCheckoutPayment 的交易关联到您将通过 IPN 中的 txn_id 收到的 IPN。

注意:如果您想在 PayPal 沙盒中测试“待处理”付款,只需转到https://developer.paypal.com/ > 测试账户,然后点击您正在测试的卖家账户的“付款审核”。 在该卖家账户上启用付款审核后,它收到的任何交易都将处于“待处理”状态。 只需禁用付款审核即可在之后发布交易。

【讨论】:

谢谢,这是有道理的,Paypal 文档对此不太清楚。 确实!是否有更详细的文档,其中包含有关 ExpressCheckout 的“完整故事”的信息?例如,它如何受 IPN 影响,在什么情况下交易可能处于待处理状态,在这种情况下通常可以做什么,何时应该接受待处理的交易,何时不接受等等。【参考方案2】:

这里没有提到的一件事,我还没有找到任何其他可以确认的内容.. 是 Paypal Express API 不支持通过代码传入 NOTIFYURL。因此,您必须使用在您的贝宝帐户中设置的硬编码 IPN 网址。这当然会导致问题,因为您需要一个可以重定向到各个付款选项的通用回调文件。

例如,如果您使用的是 Paypal Express 和 Paypal Advanced。它们都不支持使用代码传入的 notifyurl。 Paypal Advanced 声称可以,但它似乎不起作用。所以需要有一个通用的 IPN 回调文件来处理对每个的重定向。

除非其他人可以确认可以在代码中传递的 Express Checkout 变量的有效通知 URL?

【讨论】:

如果您在 DoExpressCheckoutPayment 中指定 NOTIFYURL,它应该可以工作。这是你做的吗? 是的,它“应该”但没有。我与 Zen-Cart 开发人员确认了这一点,这就是为什么他们必须制作一个“通用”ipn 文件来处理来自多个 paypal apis 的回调。我确实发现他们已经在他们的 Paypal Express API 的较新版本中将它添加为“PAYMENTREQUEST_0_NOTIFYURL”,它似乎终于在那里工作了。但老实说,Paypal 有这么多的 API,而且它们都有很多错误,所以它通常会被击中或错过什么有效或无效。 哦等等..你说DoExpress..我只有在SetExpress..好的,我会试试DoExpress【参考方案3】:

我想我会为此加上我的两便士的想法。

根据文档和示例,我通过 dotNet SDK 使用 Express Checkout 获得了待处理的退货状态,我应该获得“已批准”状态。

我不知道为什么,但事实证明这是因为我正在通过一种新货币,在我们的例子中是“英镑”。我必须以主持人沙盒帐户的身份登录并决定如何处理新货币。转换它或设置新的货币余额。一旦我这样做了,并将其设置为默认操作,就不再出现待处理的返回状态。

希望对某人有所帮助!

【讨论】:

以上是关于使用 IPN 处理“待付款”的 PayPal 快速结账的主要内容,如果未能解决你的问题,请参考以下文章

Paypal IPN 不适用于 woocommerce

Paypal:使用 Express Checkout 处理待付款

如何修复 WooCommerce 中的 PayPal IPN 验证错误? [关闭]

您是不是需要使用 IPN 和快速结帐来确认 PayPal 付款?

使用 activemerchant 和 ipn 的 Paypal 快速结帐

Paypal 多个 IPN 同一商家设置快速结帐