我设置了Laravel Cashier,但它无法连接到Stripe。

我已将错误隔离到此简单行失败的地步:

$user = new User();
$user->subscription()->create('test');


错误是无法描述的:

Stripe_ApiConnectionError中的vendor/stripe/stripe-php/lib/Stripe/ApiRequestor.php


  无法连接到Stripe(https://api.stripe.com)。请检查您的互联网连接,然后重试。如果此问题仍然存在,则应在https://twitter.com/stripestatus上检查Stripe的服务状态。原因是:


如您所见,用于显示原因的$errstr为空。

到目前为止,我的研究...

当证书检查失败时,由于an unfixed PHP bug$errstr可以为空。

我发现this StackOverflow question提到这是因为未指定CAPath。

在霍姆斯特德/流浪汉中确实确实如此。我怀疑默认的VagrantBox配置有问题。

当我从Mac运行此命令时,我得到一个返回码0(正在运行):

openssl s_client -connect api.stripe.com:443


当我从Homestead运行相同的命令时,我得到一个返回码20(无法获得本地发行者证书):

为了使其在Homestead中工作,我必须手动指定CAPath,如下所示:

openssl s_client -CApath /etc/ssl/certs/ -connect api.stripe.com:443


然后我得到返回码0。

如何彻底解决此问题,以便收银员通话正常工作?

最佳答案

我也遇到了这个问题,运行无业游民的规定并没有帮助。

我的Homestead盒子有个习惯,就是时钟会略微走动,有时甚至会很没时间。似乎将Homestead的时间更新为正确的时间可以解决此问题。也许这就是为什么在您的情况下运行provision命令修复它的原因。

您可以通过运行以下命令执行此操作:

sudo service ntp stop
sudo ntpdate -s time.nist.gov
sudo service ntp start




因为我不得不相对频繁地执行此操作(这也导致Scout出现问题),所以我运行了:

php artisan make:command UpdateClock


然后将app/Console/Commands/UpdateClock.php编辑为以下内容:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class UpdateClock extends Command
{
    /** The name and signature of the console command. */
    protected $signature = 'clock:update';

    /** The console command description */
    protected $description = 'Updates vagrants clock';

    /** Create a new command instance */
    public function __construct()
    {
        parent::__construct();
    }

    /** Execute the console command. */
    public function handle()
    {
        exec("sudo service ntp stop");
        exec("sudo ntpdate -s time.nist.gov");
        exec("sudo service ntp start");
    }
}


现在,只要时间用完,我就运行:

php artisan clock:update

关于ssl - 由于缺少本地证书路径,Laravel Cashier无法连接到Homestead中的Stripe,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26080357/

10-13 04:15