我目前正在使用Laravel Cashier(PHP)并使用保存在我的 users 表中的已返回 stripe_id 以供将来付款 . 我没有使用Stripes或Laravel收银员订阅功能,因为我想要对它进行更多动态控制 .

它目前的工作方式是......

  • 客户在我的应用上有一个帐户 .

  • 如果愿意,可以添加信用卡

  • 当它们执行时,这将在Stripe上生成0 /月的订阅并将其保存为客户 .

  • 使用我的 users 表中返回并保存的 stripe_id ,我继续使用自己的订阅功能 .

关于错误处理等添加信用卡是好的,因为我可以简单地使用条带提供的测试卡 .

但是,一旦客户被添加到我的Stripe帐户,我就无法测试该客户以便将来结算 .

我尝试在条带信息中心中添加拒绝卡片,例如4000 0000 0000 0002,但没有任何反应,当我检查控制台时,我可以看到下面的错误 . 这是可以理解的,但我希望在测试模式下它允许我添加它 .

我知道我可以使用网络钩子,但对我来说这似乎是不切实际的 . 在我的本地机器上进行测试会很令人沮丧,我仍然需要能够将信用卡更改为失败的信用卡以发送正确的Web挂钩 . 我不想依赖Stripe web hook测试,因为它不会与我的进程同步,因为我无法控制customer_id等进行测试 .

这是我为客户收费的代码 . 如你所见,我用 stripe_id 充电 .

其他错误有效,但我真正想要测试的唯一一个是卡,所以如果它过期或资金不足我的应用程序会知道

$stripeID = $this->billing->getStripeID($userID);

try {
    \Stripe\InvoiceItem::create( [
        'customer'    => $stripeID,
        'amount'      => $totalAmount,
        'currency'    => 'eur',
        'description' => 'Test Charge'
    ] );


    $invoice = \Stripe\Invoice::create( [
        'customer' => $stripeID
    ] );

    $invoice = \Stripe\Invoice::retrieve( $invoice->id );
    $charge = $invoice->pay();

} catch(Card $e) {
    // error handling
} catch (RateLimit $e) {
    // error handling
} catch (InvalidRequest $e) {
    // error handling
} catch (Authentication $e) {
    // error handling
} catch (ApiConnection $e) {
    // error handling
} catch (Base $e) {
    // error handling
} catch (Exception $e) {
    // error handling
}