【问题标题】:Can I test paypal api's from localhost我可以从 localhost 测试 paypal api
【发布时间】:2011-07-27 12:41:22
【问题描述】:

更新 1:

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

原始问题:

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

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

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

【问题讨论】:

  • 您是否从贝宝收到错误代码?您使用的是哪个 API 集,ExpressCheckout?
  • 我收到一条 apache 类型的消息,说网站(我的本地主机)因维护而停机...
  • 您可以运行一个脚本来在本地伪造 IPN,这将在 paypal 的沙箱上验证。这和运行他们的模拟器一样:stackoverflow.com/questions/11469636/…

标签: php paypal paypal-sandbox


【解决方案1】:

如果您想调试您的 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"

【讨论】:

    【解决方案2】:

    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 变量。 这些真实变量可以在 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 后,您可以使用浏览器打开文件,然后提交此表单。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 为什么这没有被标记是超出我的。猜猜人们更喜欢无用的疯狂过于复杂的工作,而不是简单的事情。谢谢,我知道我曾经做过这个,但忘了尝试这个。
      • 嗨,肖恩,我还没有尝试过,但很好奇。那么当我们使用贝宝的沙箱瓮来测试贝宝支付时,你是说贝宝沙箱的IPN应该能够到达127.0.0.1,即我的本地机器吗? 127.0.0.1不是普通的家用机IP吗?
      • 同时,我会试试这个。
      • 这应该是正确的答案(至少对于 Express Checkout)。完美运行。
      【解决方案4】:

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

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

      【讨论】:

      • 是的,我已经设置了一个沙盒帐户,并将沙盒帐户中的凭据用于从 paypal 自适应 api 集成向导生成的代码中。
      • 请参阅原始问题中的 UPDATE 1:
      • 确保贝宝可以访问您本地主机上的网站。这意味着您的网站必须可以从其他机器访问。
      • @Mihai Fretiu,你确定这是必要的吗?
      • 是的,因为在 paypal 沙箱中(例如)您必须指定一个 IPN 处理程序 URL。 Paypal 正在使用此 URL 调用您网站上处理 IPN 调用的 php 文件。所以你不能传入那个 url localhost/yourwebsite/ipn_handler.php。您将需要类似your_computer_public_ip/yourwebsite/ipn_handler.php
      【解决方案5】:

      它应该可以正常工作,但是如果您为返回 URL 和 IPN 消息 URL 发送“无效 URL”,它可能会变得很挑剔。这意味着,以 cancelURL 形式发送 http://localhost/cancelpaypal.php 可能会告诉您这是一个无效的 url。

      但我认为不应该。

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

      【讨论】:

        【解决方案6】:

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

        1. 打开你的 /etc/hosts
        2. 添加新条目:yourwebsite.com 127.0.0.1

        因此,当您的浏览器查询将从您的 127.0.0.1 获取时,您需要刷新 dns(/etc/init.d/nscd 重启)。

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

        【讨论】:

        • 这使得 localhost 在您的计算机上称为 yourwebsite.com,但 PayPal 仍然不知道在哪里可以找到 yourwebsite.com。换句话说:它不能解决问题。
        • 对于结帐流程,在所有者示例中使用,Paypal 不对redirectUrl 做任何事情,它会处理请求,并将用户返回到redirectUrl,仅此而已。
        • 如果使用客户端流,则不需要这个tmp域名。也可以使用ip地址。
        【解决方案7】:

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

        【讨论】:

        • 完全没有理由使用虚拟机或 VPN。
        猜你喜欢
        • 2021-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-24
        • 2014-02-11
        • 2012-02-27
        • 2013-04-19
        • 2020-05-09
        相关资源
        最近更新 更多