将PayPal返回URL设置为本地主机

10

我正在尝试集成Paypal,并在此过程中使用沙盒。 我遵循下面问题中被接受的答案所述的步骤。 设置PayPal返回URL并使其自动返回?

但是当我尝试输入URL时,Paypal返回以下错误。

We were unable to validate the URL you have entered. Please check your entry and try again.

我试图设置的URL是http://localhost:8888/paypal/success.php

另外,我尝试将返回的URL与以下表单一起发送。

<input type="hidden" name="return" value="http://localhost:8888/paypal/success.php">

两种方法都对我不起作用。

完整形式

<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr">
<!-- Identify your business so that you can collect the payments. -->
<input type="hidden" value="dasun_1358759028_biz@archmage.lk" name="business">
<!-- Specify a Buy Now button. -->
<input type="hidden" value="_xclick" name="cmd">
<!-- Specify details about the item that buyers will purchase. -->
<input type="hidden" value="AM Test Item" name="item_name">
<input type="hidden" value="22.16" name="amount">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" value="item_number" name="item_number">
<input type="hidden" name="return" value="http://localhost:8888/paypal/success.php">
<!-- Display the payment button. -->
<input type="image" name="submit" border="0" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif" alt="PayPal - The safer, easier way to pay online">
<img alt="" border="0" width="1" height="1" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" >
</form> 

我该如何在我的开发电脑上进行测试?

4个回答

19

如果您尝试指定您的IP地址而不是本地主机会发生什么?

远程计算机无法解析本地主机。只有您的本地DNS知道本地主机声明并且它是127.0.0.1。

http://your-IP-address:8888/paypal/success.php

2
开发者机器通常无法从外部系统访问。除非它与PayPal在同一网络中,否则提供本地IP地址是行不通的。 - mjn42

6
您可以为您的网站创建一些URL别名,并将其添加到主机文件中(http://en.wikipedia.org/wiki/Hosts_(file))。然后将该URL作为您的返回URL传递给PayPal。它们只会在浏览器内触发重定向到该位置,此时您的主机文件将将其解析为本地开发服务器。
例如: 在hosts文件中添加一行,如127.0.0.1    local.mywebdomain.com 然后在您的PayPal按钮中,传递同样的URL作为return参数(例如:<input type="hidden" name="return" value="http://local.mywebdomain.com/success.php">

有人成功了吗? - Mangesh Sathe

1
值得注意的是,当使用Facebook授权API(可能也包括其他所有API)时,您可以将https://localhost:xxxx/my-redirect作为重定向URL,并且它会起作用。
因此,这里的答案基本上是“咄...... paypal无法访问您PC上的localhost”有点严厉和不准确。
远程API不需要知道localhost在其端如何解析,但在客户端重定向的上下文中,他们不关心并假设客户端将localhost解析为开发人员预期的位置。
话虽如此,我要诚实地说......第一次使用Facebook API时,我对localhost如何工作感到有些困惑。但正是在这个过程中,我对这些类型的重定向发生的方式以及它们是客户端方面的有了更全面的理解。
这很有道理,因为在绝大多数情况下,提供身份验证或支付的API都会将客户端重定向到带有某种证明他们身份/付款的令牌的URL。
是的,PayPal也有Webhooks,但那是一个不同的问题。Webhooks是指你正在使用的第三方服务将其后端发送POST到你的后端,给你一些交易的正式结果。
当我开发这类东西时,我会更加重视这些服务器之间的通信,因为我可以确定如果Paypal的后端告诉我发生了某件事情,那么它确实发生了,而不可能是客户端的黑客攻击。
没有人在Webhooks中使用“localhost”作为Webhook URL,因为显然这对于服务器之间的通信毫无意义并且无法工作。
但是,当服务在交易后重定向Web浏览器客户端时,一些开发人员会认为localhost可以工作,因为它应该是客户端重定向,并且不是Webhook。
当一个新手开发者在似乎是客户端重定向的过程中使用“localhost”来将用户带回商家网站时,这并不是一个“愚蠢”的问题。

这其实是关于重定向和回调之间区别的相当精确的摘要 ;) - Honk der Hase

0

你不能使用localhost,因为它不是有效的URL,PayPal无法访问你的本地环境。

最好的方法是将表单和返回脚本上传到网络上,如果你没有网络主机,有许多免费的PHP网络主机可供选择。


我一开始也有同样的想法,但上面的答案帮了我很多。无论如何还是谢谢。 - Techie
2
此外,这是不正确的。我所有的测试都在本地进行,PayPal 对于使用本地主机地址作为返回 URL 没有任何问题。只有在测试 IPN 时,您需要在公共 Web 服务器上。 - Ryan Szrama
1
问题是“自动返回”,但在使用localhost时无法正常工作。但是,您可以将返回URL设置为localhost,并且在paypal步骤期间单击返回到(任何名称)。它将返回到localhost URL,但是在尝试调试和测试自动返回时会出现问题! - YodasMyDad
1
ReturnURL是客户端重定向,客户端浏览器被发送到本地主机,PayPal服务器本身不访问它。因此理论上来说本地主机应该没问题。尽管如此,PayPal拒绝接受它,SetExpressCheckout给我返回了一个奇怪的关于运输无意义的错误,如果我使用域名则不会出现这种情况。 - BoomShaka

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