【问题标题】:Why Stripe API is not working on live website?为什么 Stripe API 不能在实时网站上运行?
【发布时间】:2018-03-03 10:26:15
【问题描述】:

我正在尝试使用 Stripe 在一个小网站上处理一些付款。

在本地,一切正常:我的所有测试都很好。 问题出在实时网站中:我可以获得一个令牌(来自 javascript),但 php 端的 \Stripe\Charge::create 有问题,我不知道为什么。

这里有一些信息:

# Making Stripe works
require_once(dirname(__FILE__).'/stripe/init.php');

# Set API Key (Both Live and Test keys don't work)
\Stripe\Stripe::setApiKey("sk_test_****");

# Trying to charge
# $token is defined from the $_POST and works great ($amount and $metas are fine too)

try {
    $charge = \Stripe\Charge::create(
        array(
            'amount' => $amount,
            'currency' => 'eur',
            'source' => $token,
            'metadata' => $metas
        )
    );

    // Blabla
} catch(\Stripe\Error\Card $e) {
    // Catching card error
} catch (\Stripe\Error\RateLimit $e) {
    // Catching RateLimit API error
} catch (\Stripe\Error\InvalidRequest $e) {
    // Catching invalid request (missing param or else)
} catch (\Stripe\Error\Authentication $e) {
    // Catching fail authentification from API KEY for example
} catch (\Stripe\Error\ApiConnection $e) {
    // Catching fail APIConnection
    // The error seems related to this because the catch is done here !
} catch (\Stripe\Error\Base $e) {
    // Catching base error
} catch (Exception $e) {
    // Catching other errors
}

在本地它工作得很好,但在实时服务器上它在\Stripe\Error\ApiConnection 上捕获一个错误(一段时间后),没有真实信息。

#$e contains :
"httpStatus":null,
"httpBody":null,
"jsonBody":null,
"httpHeaders":null,
"requestId":null,
"stripeCode":null

这不是一个好兆头。

除了 gettin' token 部分(效果很好)之外,我的 Stripe 仪表板日志中没有关于此 Charge Trial 的任何内容。看起来 Stripe 从未收到过请求。

我尝试从我的服务器 ping api.stripe.com,效果很好。

本地和实时站点上的代码是相同的,条带键可以很好地复制/粘贴(它适用于本地,所以...)。

我的 Stripe 帐户已经过验证,所以我可以使用 Live Keys(但 Live Keys 和 Test Keys 都不能像我说的那样工作)。

API 是最新的。

我不知道还能去哪里搜索:​​我联系了 Stripe 的支持人员,但仍在等待答复。

感谢您的关注...

【问题讨论】:

  • 在每个 catch 语句中输入print_r( $e );,然后尝试处理付款。您将看到相关错误(如果有)。
  • 如果它有时有效(如您的文本所示),您可能会遇到速率限制异常,或者与您的托管环境相关的某种出站 https 连接失败。只是摇摆不定。
  • @RahulDev print_r 发生在我提到的 catch \Stripe\Error\ApiConnection 中,但只包含null 值...... @YvesLeBorg 它只适用于本地(它总是适用于本地) 但从未在实时网站中...关于 https 连接失败,我应该检查什么?谢谢大家
  • @Vae 您的主机可能正在阻止端口或目标 IP 地址。如果您在 AWS 或其他有能力的云提供商上,可能会因为没有为您的虚拟服务启用适当的策略而阻止这些。另外...after a while 似乎暗示了 DNS 解析错误(和回退,通常通常需要 5 秒)。验证目标主机名是否可在您的托管服务器中解析。
  • (当然,通过 php 的 curl_getinfo() 给了我一个充满空值的数组......)

标签: php stripe-payments


【解决方案1】:

因此,在与@YvesLeBorg(谢谢)进行了长时间的交谈并进行了大量研究之后,我终于能够通过将其添加到我的 iptables'rules 文件中来完成所有这些工作:

iptables -I OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

据我了解,它允许任何来自本地的流量。如您所见,我在这些事情上不是很专家,所以如果有人认为这是错误的(即使这是使这一切奏效的唯一因素),请告诉我。

【讨论】:

  • 我在本地主机上遇到了同样的问题,在阅读了所有聊天内容并试图弄清楚我的本地服务器如何阻止请求之后,我发现了这个other answer,它基本上说之前要添加这个电话:Stripe\Stripe::setVerifySslCerts(false);。它基本上禁用了安全证书检查。
  • @CPHPython 谢谢你的回答!我不太确定禁用 SSLCertificates 是个好主意哈哈。但这是一条路要走:) 谢谢!
  • 确实,这不是一个好主意。我的问题最终是由于没有正确引用的ca-certificates.crt file (answer)
猜你喜欢
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 2020-05-19
  • 2022-10-22
  • 2021-07-18
  • 1970-01-01
相关资源
最近更新 更多