更新1:
根据Using PayPal's Instant Payment Notification with PHP上的本教程,除非打开某些路由器端口,否则PayPal无法访问本地托管的网站。这是因为网站是IPN
还是所有PayPal API都是如此?
原始问题:
在我的笔记本电脑上,我有一个LAMP
环境设置,当我在上线前使用http://localhost
创建网站时。
对于新项目,我需要使用PayPal API。如果我将笔记本电脑连接到互联网,我是否可以使用localhost来测试PayPal API?或者我是否必须将我的网站上传到其他地方的LAMP主机?
你可能在想,这是一个多么愚蠢的问题,试试看它是否有效。我已经尝试了它并且没有用,我想在进入下一步之前排除这个问题。
答案 0 :(得分:18)
如果您想调试IPN代码,则需要以某种方式公开您的服务器。这样,PayPal可以在您提交请求后稍后异步回发到您的服务器。通常情况下我认为(15秒内)很快,但可能会更长。
我发现公开提供开发服务器的一种简单方法是使用ngrok或forwardhq.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帐户中找到:
您需要点击相关的消息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)
答案 3 :(得分:4)
它应该工作。 我去年与paypal进行了一次付款集成,它在localhost上运行没有问题。
您是否正在使用paypal沙箱进行开发? https://developer.paypal.com/
答案 4 :(得分:3)
它应该没有问题,但是如果您为返回网址和IPN消息网址发送“无效网址”,它可能会变得挑剔。这意味着,以http://localhost/cancelpaypal.php作为cancelURL发送可能会告诉您它是无效的网址。
但我不认为应该这样做。
IPN只需要打开路由器端口,因为正常流程中的重定向是常规的“Location:”标头,因此您的浏览器需要能够访问该站点(localhost)
答案 5 :(得分:0)
嗯,它最有效,但是,你也可以设置一个临时的本地dns条目。 您所要做的就是:
因此,当您从127.0.0.1获取网站的浏览器查询时,您需要刷新dns(/etc/init.d/nscd restart)。
就是这样,但记得在准备好生产时删除该条目。
答案 6 :(得分:-3)
要使用IPN,必须从网络访问本地主机。一个绝对有效的解决方案是使用虚拟机,安装VPN-Server,通过VPN连接Clinet并管理虚拟主机以重定向到本地IP地址。这样,如果您打开VPN,您的服务器可以从外部访问,并且可以发送IPN。