php 我可以测试贝宝API的从localhost

k3fezbri  于 2023-04-04  发布在  PHP
关注(0)|答案(8)|浏览(142)

更新1:

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

原始问题:

在我的笔记本电脑上,我有一个LAMP环境设置,当我使用http://localhost创建网站之前去生活。
对于一个新项目,我需要使用PayPal API。如果我将笔记本电脑连接到互联网,我是否可以使用本地主机来测试PayPal API?或者我必须将我的网站上传到其他地方的LAMP主机?
你可能在想,这是个多么愚蠢的问题,试试看它是否有效。我试过了,它不起作用,我想在进入下一步之前排除这个问题。

4szc88ey

4szc88ey1#

如果你想调试你的IPN代码,你需要以某种方式使你的服务器公开可用。这是为了让PayPal可以在你提交请求后异步发送回你的服务器。我认为这通常很快(15秒内),但可能会更长。
我发现了一种让开发服务器公开可用的简单方法,就是使用a tunneling solution from this list,就像boringproxy一样。这允许你像平常一样在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"
ej83mcc0

ej83mcc03#

一个简单的解决方案在PayPal的官方开发者页面中描述:
developer.paypal.com - 本地IPN测试
诀窍在于编写一个包含以下内容的小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变量。这些真实变量可以在PayPal帐户的IPN历史记录下找到:
IPNs History
您需要点击相关消息ID,然后复制“IPN消息”内容(它将类似于mc_gross=27.00&invoice=Test-1&protection_eligibility=Ineligible&...),必须将其转换为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后,您可以使用浏览器打开文件,然后提交此表单。

q9rjltbz

q9rjltbz4#

它应该工作。我已经做了一个支付集成与贝宝去年,它的工作在localhost没有问题。
您是否正在使用贝宝沙盒进行开发?https://developer.paypal.com/

8yoxcaq7

8yoxcaq75#

它应该可以正常工作,但是如果您发送“无效URL”作为返回URL和IPN消息URL,它可能会变得挑剔。这意味着,发送http://localhost/cancelpaypal.php作为cancelURL可能会告诉您这是一个无效的URL。
但我不认为它应该。
只有IPN才需要打开路由器端口,因为正常流中的重定向是一个常规的“Location:”头,因此需要能够访问站点(localhost)的浏览器

ql3eal8s

ql3eal8s6#

你需要注册你的本地地址,这样它就可以从互联网上打开。你可以使用ngrok服务。

6rvt4ljy

6rvt4ljy7#

好吧,它大多数工作,但也,你可以设置一个临时的本地DNS条目.所有你需要做的是:
1.打开/etc/hosts
1.添加新条目:yourwebsite.com127.0.0.1
因此,当您的浏览器查询网站将从您的www.example.com获取127.0.0.1,您需要刷新dns(/etc/init.d/nscd重启)。
这就是全部,但是请记住,当您准备好生产时,请删除该条目。

ruoxqz4g

ruoxqz4g8#

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

相关问题