PayPal自动返回未发送任何POST数据

9

我有一个类似于这篇文章的问题

如何设置PayPal返回URL并使其自动返回?

然而,那里的解决方案不起作用。我们已经设置了IPN,并将POST变量传递回来(访问者点击返回按钮,就能够下载购买的PDF文件),但是当我试图摆脱Paypal订单确认页面时,它仍然会显示:

你已经完成付款。此次付款的交易ID为:XXXXXXXXXXXX。

并且在网站支付首选项中启用“自动返回”,指定URL http://www.educted.ca/payment_complete.php 后,POST变量现在无法传递回 payment_complete.php - 它显示为空白。一旦我禁用“自动返回”,POST变量就可以正常显示,购买的产品也可以下载。当然,我正在使用Paypal沙盒账户。

<input type="hidden" name="return" value="<?php echo LIVE_SITE;>payment_complete.php">
<input type="hidden" name="cancel_return" value="<?php echo LIVE_SITE; ?>catalog.php">
<input type="hidden" name="notify_url" value="<?php echo LIVE_SITE; ?>ipn.php">
<input type="hidden" name="rm" value="2">

任何想法?

也许你可以使用自动返回或IPN,但不能同时使用两者? - Natalia
4个回答

14
如果启用了自动返回,无论rm设置为什么值,数值都将始终通过GET返回。
如果您想在买家完成交易后立即交付文件,请查看PayPal支付数据传输。启用后,PDT会向您的返回URL添加一个tx GET变量;通过调用https://www.paypal.com/cgi-bin/webscr?cmd=_notify-synch&tx=value-for-tx-here&at=value-for-your-paypal-account-authentication-token以获取有关交易的额外数据,您可以立即检查其是否有效。
另请参见https://www.paypal.com/pdt/
IPN应保留用于后端处理,因为它可能会出现显着延迟。
另一方面,PDT要求您从PayPal中获取信息,因此是即时的。

谢谢!“IPN应该保留用于后端处理”是什么意思?那么,使用IPN的适当用途是什么?我们在这种情况下需要使用它吗? - Natalia
是的,通过使用IPN,一旦交易完成后发生任何事情(例如,如果PayPal决定审核交易,或者买家突然对您提起PayPal纠纷),您将自动得到更新。 - Robert
我正在做这件事,但我们在URL中没有得到tx=变量?同时也没有返回任何POST变量?是否有什么改变了? - YodasMyDad

4
您仍然可以将“自动返回”设置为“开启”,但请确保禁用PDT,这样您就可以通过POST方式将所有交易变量发送到您的返回URL(如果您在请求中将rm参数设置为2的话,正如您所说)。启用PDT会忽略rm参数并强制使用GET方法。

1
你仍然可以将自动返回设置为开启,但请确保禁用PDT,这样当你的请求中设置了rm参数为2时(就像你说的那样),所有交易变量都会通过POST发送到您的返回URL。这是正确的答案!如果你想获取POST数据,你不能启用自动响应的付款数据发送。但在这种情况下,你必须使用https网站,否则客户在重定向之前会收到警告!

0
在您的特定情况下,它显示为空白是由于您代码中的错误造成的:
<?php echo LIVE_SITE;>

这不是有效的PHP语法 - 它会导致致命错误。如果尚未输出任何信息并且错误报告已关闭,则页面将为空白。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接