我设置了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/