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

4 回答 4

19

如果您尝试指定 IP 地址而不是 localhost 会怎样?

本地主机无法在远程机器上解析。只有您的本地 DNS 知道 localhost 语句并且是 127.0.0.1。

http://your-IP-address:8888/paypal/success.php
于 2013-01-21T10:24:16.690 回答
6

您可以为您的网站创建一些 URL 别名并将其添加到您的主机文件(http://en.wikipedia.org/wiki/Hosts_(file))。然后将该 URL 作为您的返回 URL 传递给 paypal。它们只是在浏览器中触发重定向到该位置,此时您的主机文件会将其解析到您的本地开发服务器。

例如:在您的主机文件中添加一行,例如127.0.0.1 local.mywebdomain.com

然后在您的 PayPal 按钮中,为返回参数传递相同的 URL (例如<input type="hidden" name="return" value="http://local.mywebdomain.com/success.php">

于 2014-01-24T01:12:59.563 回答
1

值得注意的是,在使用 Facebook 授权 API(如果不是全部,可能还有其他)时,您可以将 https://localhost:xxxx/my-redirect 作为重定向 URL 放入,它会起作用。

因此,这里基本上说“duh ..... paypal 无法在您的 PC 上访问本地主机”的答案有点苛刻和不合时宜。

远程 API 不需要知道 localhost 如何最终解析,但在客户端重定向的上下文中,他们并不关心并假定客户端将 localhost 解析到开发人员想要的位置。

话虽如此,老实说……我第一次使用 Facebook API 时,对 localhost 如何工作感到有些困惑。但正是在这个过程中,我对这些类型的重定向如何发生以及它们是客户端有了更全面的了解。

这很有意义,因为在绝大多数情况下,提供身份验证或在本例中为付款的 API 会将客户端重定向到带有某种类型的令牌的 URL,该令牌可以证明其身份/付款。

是的,paypal 也有 webhook,但那是另一回事。Webhook 是当您正在使用的第 3 方服务将让其后端向您的后端发送 POST 时,为您提供某些交易的正式结果。

当我开发这种性质的东西时,我更加重视这些服务器到服务器的通信,因为我可以肯定,如果 paypal 的后端告诉我发生了什么事,那么它确实确实发生了,而且不可能是客户端黑客。

使用 webhook 的人不会尝试将 'localhost' 作为 webhook URL,因为显然这没有任何意义,并且无法用于服务器到服务器的通信。

但是当服务在事务之后重定向 Web 浏览器客户端时,一些开发人员会假设 localhost 可以工作,因为它应该是客户端重定向而不是 Webhook。

当一个对任何给定 API 不熟悉的开发人员在似乎是客户端重定向的情况下使用“localhost”来让用户回到商家的网站时,这根本不是一个“愚蠢”的问题。

于 2021-08-20T22:12:43.443 回答
0

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

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

于 2013-01-21T10:23:40.637 回答