Php 为什么StripeAPI在live网站上不起作用?

Php 为什么StripeAPI在live网站上不起作用?,php,stripe-payments,Php,Stripe Payments,我正在尝试使用Stripe在一个小网站上处理一些付款 在本地,一切都很好:我所有的测试都很好。 问题在于live网站:我可以从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

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

在本地,一切都很好:我所有的测试都很好。 问题在于live网站:我可以从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
}
在本地,它工作得很好,但在live server上,它捕捉到
\Stripe\error\ApiConnection
上的一个错误(一段时间后),没有实际信息

#$e contains :
"httpStatus":null,
"httpBody":null,
"jsonBody":null,
"httpHeaders":null,
"requestId":null,
"stripeCode":null
这不是一个很好的迹象

除了gettin’token部分(非常有效),我的Stripe仪表盘日志中没有关于这次收费试用的任何信息。看起来Stripe从未收到请求

我试着在我的服务器上ping
api.stripe.com
,效果很好

本地和实时站点上的代码是相同的,条带密钥被很好地复制/粘贴(它在本地工作,所以…)

我的Stripe帐户是validate,所以我可以使用Live密钥(但Live密钥和测试密钥都没有像我说的那样工作)

API是最新的

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


感谢您的关注……

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

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

据我所知,它允许任何来自本地的流量。正如你所看到的,我对这些事情不是很在行,所以如果有人认为这是错误的(即使这是所有这些工作的唯一原因),请告诉我。

Put
print\r($e),然后尝试处理付款。您将看到相关的错误,如果有的话。如果它有时起作用(如您的文本所示),您可能会遇到速率限制异常,或者与宿主环境相关的某种出站https连接故障。只是摇摆一下。@RahulDev打印\r发生在我提到的catch\Stripe\Error\ApiConnection中,但只包含
null
值@YvesLeBorg它只在本地工作(而且总是在本地工作),但从不在实时网站上工作。。。关于https连接失败,我应该检查什么?谢谢guys@Vae您的主机可能正在阻止端口或目标IP地址。如果您在AWS或其他有能力的云提供商上,您可能会因为没有为您的虚拟服务启用适当的策略而阻止这些。还有<代码>过一段时间后
似乎提示DNS解析错误(通常需要5秒的时间进行回退)。验证目标主机名是否可在托管服务器内解析。(当然,通过php的curl_getinfo()会给我一个充满空值的数组…)在阅读所有聊天内容并试图找出本地服务器如何阻止请求后,我的本地主机出现了相同的问题,我发现这一点,基本上是在调用之前添加这一点:
Stripe\Stripe::setVerifySslCerts(false)。它基本上禁用了安全证书检查。@CPHPython Thx获取您的答案!我不太确定禁用SSL证书是否是个好主意哈哈。但这是一条路:)谢谢!事实上,这不是一个好主意。我的问题归根结底是由于没有正确引用的。