Php 我可以测试paypal api';来自本地主机的消息

Php 我可以测试paypal api';来自本地主机的消息,php,paypal,paypal-sandbox,Php,Paypal,Paypal Sandbox,更新1: 根据上的本教程,除非打开某些路由器端口,否则PayPal无法访问本地托管的网站。这是因为该网站是关于IPN的,还是所有PayPal API都是这样 原始问题: 在我的笔记本电脑上,当我使用http://localhost在上线前创建网站 对于一个新项目,我需要使用PayPal API。如果我将笔记本电脑连接到互联网,我是否能够使用localhost测试PayPal API?或者我必须将我的网站上传到别处的LAMP主机上 你可能会想,这是一个多么愚蠢的问题,试试看它是否有效。我已经试过了

更新1:

根据上的本教程,除非打开某些路由器端口,否则PayPal无法访问本地托管的网站。这是因为该网站是关于IPN的,还是所有PayPal API都是这样

原始问题:

在我的笔记本电脑上,当我使用
http://localhost
在上线前创建网站

对于一个新项目,我需要使用PayPal API。如果我将笔记本电脑连接到互联网,我是否能够使用localhost测试PayPal API?或者我必须将我的网站上传到别处的LAMP主机上

你可能会想,这是一个多么愚蠢的问题,试试看它是否有效。我已经试过了,但它不起作用,我想在进入下一步之前排除这个问题。

它应该会起作用。 我去年与paypal进行了支付集成,它在localhost上运行没有问题

您是否正在使用paypal沙箱进行开发?

它应该可以正常工作,但是如果您为返回URL和IPN消息URL发送“无效URL”,它可能会变得挑剔。也就是说,以cancelURL发送可能会告诉您它是一个无效的url

但我认为不应该


只有IPN才需要打开路由器端口,因为正常流中的重定向是一个常规的“位置:”标题,因此浏览器需要能够访问站点(localhost)

才能使用IPN。必须从web访问您的localhost。其中一个解决方案是使用虚拟机,安装VPN服务器,通过VPN连接客户端,并管理虚拟主机以重定向到本地IP地址。这样,如果您打开VPN,您的服务器可以从外部访问,并且可以发送IPN。

如果不验证,请使用

如果您想调试IPN代码,您需要以某种方式使您的服务器公开可用。这使得PayPal可以在您提交请求后的稍后时间异步发回您的服务器。通常这是相当快,我认为(在15秒钟内),但它可以更长

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

据我所知,这是通过一个“反向SSH隧道”实现的,该隧道允许您的站点通过一个已经公开的服务器进行代理而公开。注意,在你做这个之前,你必须考虑的是贝宝不仅可以在你的网站上市后点击,而且任何人都可以,所以请先考虑一下。 另外,如果您拥有自己的面向公众的域,并且不介意在终端中使用SSH,那么您可以执行类似以下shell脚本()的操作

#用法:显示
函数show(){
DOMAIN=“.yourdomain.com”
REMOTE=“$2$DOMAIN”
ssh-tR 1080:127.0.0.1:$1vps“sudo ssh-Nl\$USER-L$REMOTE:80:127.0.0.1:1080 localhost”
}
要使其如上所述工作,您需要在~/.ssh/config文件中添加以下内容:

Host vps
    HostName <server address>
    User <server username>
主机vps
主机名
使用者
如果您不想(或不能)这样做,则以下操作将起作用:

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"
SERVERUSER=“”
ssh-l$SERVERUSER-tR 1080:127.0.0.1:$1“sudo ssh-Nl\$SERVERUSER-l$REMOTE:80:127.0.0.1:1080 localhost”

PayPal的官方开发者页面介绍了一个简单的解决方案:

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


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

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


    仅此而已,但请记住在准备生产时删除该条目。

    是,我已经设置了一个沙盒帐户,并将沙盒帐户中的凭据用于paypal adaptive api integration wizard生成的代码中。请参阅原始问题中的更新1。确保paypal可以访问本地主机上的站点。这意味着您的站点必须可以从其他计算机访问。@Mihai Frentiu,您确定这是必要的吗?是的,因为在paypal沙盒(例如)中,您必须指定IPN处理程序URL。Paypal正在使用此URL调用您网站上处理IPN调用的php文件。因此,您无法传递到该url。你将需要像你收到贝宝的错误代码?ExpressCheckout,你在使用哪个API集?我收到一条apache类型的消息,说网站(我的本地主机)已停止维护…你可以在本地运行一个脚本来伪造IPN,该脚本将在paypal的沙箱上验证。这和运行他们的模拟器是一样的:完全没有理由使用虚拟机或VPN。我无法理解为什么没有标记。我猜人们更喜欢无用的、过于复杂的工作而不是简单的事情。谢谢,我知道我曾经试过这个,但忘了试这个。嗨,肖恩,我还没试过这个,但很好奇。所以,当我们使用paypal的sandbox Burn测试paypal支付时,你是说paypal sandbox的IPN应该能够到达我的本地机器吗?127.0.0.1不是普通的家庭机器IP吗?同时,我会试试这个。这应该是正确的答案(至少对于快速结账)。这使得本地主机在您的计算机上被称为yourwebsite.com,但PayPal仍然不知道在哪里可以找到yourwebsite.com。换句话说:它解决不了问题
    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"