我可以从localhost测试paypal api吗?

时间:2011-04-01 08:42:39

标签: php paypal paypal-sandbox

更新1:

根据Using PayPal's Instant Payment Notification with PHP上的本教程,除非打开某些路由器端口,否则PayPal无法访问本地托管的网站。这是因为网站是IPN还是所有PayPal API都是如此?

原始问题:

在我的笔记本电脑上,我有一个LAMP环境设置,当我在上线前使用http://localhost创建网站时。

对于新项目,我需要使用PayPal API。如果我将笔记本电脑连接到互联网,我是否可以使用localhost来测试PayPal API?或者我是否必须将我的网站上传到其他地方的LAMP主机?

你可能在想,这是一个多么愚蠢的问题,试试看它是否有效。我已经尝试了它并且没有用,我想在进入下一步之前排除这个问题。

7 个答案:

答案 0 :(得分:18)

如果您想调试IPN代码,则需要以某种方式公开您的服务器。这样,PayPal可以在您提交请求后稍后异步回发到您的服务器。通常情况下我认为(15秒内)很快,但可能会更长。

我发现公开提供开发服务器的一种简单方法是使用ngrokforwardhq.com。这使您可以像在正常情况下一样在IDE中继续开发,在调试模式下运行代码。当PayPal回发到您的端点时,您可以在IDE中调试它。这些服务为您提供了这些服务,因此在没有任何技术知识的情况下很容易做到。

根据我的理解,这是使用“反向SSH隧道”完成的,它允许您的网站通过已经公开可用的服务器进行代理来公开。请注意,在您执行此操作之前,您必须考虑到PayPal一旦公开就可以访问您的网站,但任何人都可以,所以请先考虑这一点。

另外,如果您有自己的面向公众的域名,并且不介意在使用SSH的终端中玩游戏,那么您可以做类似这样的shell脚本(copied from this gist

# Usage: show <local-port> <subdomain>
function show() {
    DOMAIN=".yourdomain.com"
    REMOTE="$2$DOMAIN"
    ssh -tR 1080:127.0.0.1:$1 vps "sudo ssh -Nl \$USER -L $REMOTE:80:127.0.0.1:1080 localhost"
}

要让它按上述方式工作,您需要将以下内容放在〜/ .ssh / config文件中:

Host vps
    HostName <server address>
    User <server username>

如果您不想(或不能)这样做,那么以下内容将起作用:

SERVERUSER="<server username>"
ssh -l $SERVERUSER -tR 1080:127.0.0.1:$1 <server address> "sudo ssh -Nl \$SERVERUSER -L $REMOTE:80:127.0.0.1:1080 localhost"

答案 1 :(得分:7)

PayPal的官方开发者页面中描述了一个简单的解决方案:

developer.paypal.com - Local IPN Testing

诀窍在于使用以下内容编写一个小HTML文件:

<form target="_new" method="post" action="https://www.YourDomain.com/Path/YourIPNHandler.php">

<!-- start example variables: -->

<input type="hidden" name="SomePayPalVar" value="SomeValue1"/>
<input type="hidden" name="SomeOtherPPVar" value="SomeValue2"/>
    
<!-- /end example variables -->

<input type="submit"/>
	
</form>

要获得真实的结果,您需要复制PayPal发送的所有IPN变量。 这些真实变量可以在IPN历史记录中的PayPal帐户中找到:

IPNs History

您需要点击相关的消息ID,然后复制“IPN消息”内容(它将类似于mc_gross = 27.00&amp; invoice = Test-1&amp; protection_eligibility = Ineligible&amp; ...)必须转换进入HTML隐藏输入字段。 例如:

<input type="hidden" name="mc_gross" value="27.00"/>
<input type="hidden" name="invoice" value="Test-1"/>
<input type="hidden" name="protection_eligibility" value="Ineligible"/>

....

设置所有这些变量并更改操作URL后,您可以使用浏览器打开该文件,然后提交此表单。

答案 2 :(得分:5)

如果http://localhost未验证使用http://127.0.0.1

答案 3 :(得分:4)

它应该工作。 我去年与paypal进行了一次付款集成,它在localhost上运行没有问题。

您是否正在使用paypal沙箱进行开发? https://developer.paypal.com/

答案 4 :(得分:3)

它应该没有问题,但是如果您为返回网址和IPN消息网址发送“无效网址”,它可能会变得挑剔。这意味着,以http://localhost/cancelpaypal.php作为cancelURL发送可能会告诉您它是无效的网址。

但我不认为应该这样做。

IPN只需要打开路由器端口,因为正常流程中的重定向是常规的“Location:”标头,因此您的浏览器需要能够访问该站点(localhost)

答案 5 :(得分:0)

嗯,它最有效,但是,你也可以设置一个临时的本地dns条目。 您所要做的就是:

  1. 打开您的/ etc / hosts
  2. 添加新条目:yourwebsite.com 127.0.0.1
  3. 因此,当您从127.0.0.1获取网站的浏览器查询时,您需要刷新dns(/etc/init.d/nscd restart)。

    就是这样,但记得在准备好生产时删除该条目。

答案 6 :(得分:-3)

要使用IPN,必须从网络访问本地主机。一个绝对有效的解决方案是使用虚拟机,安装VPN-Server,通过VPN连接Clinet并管理虚拟主机以重定向到本地IP地址。这样,如果您打开VPN,您的服务器可以从外部访问,并且可以发送IPN。