使用发票描述更新 Stripe 订阅数量并开具发票 laravel cashier

问题描述 投票:0回答:2

美好的一天,

我正在开发一个涉及 Laravel Cashier 的项目。我想让用户能够更新他们的订阅数量并立即收费(我已经能够使用下面的代码实现这一点)

$user = Auth::user()
$user->subscription('main')->incrementAndInvoice(10000);

尽管上述内容按预期工作,但返回的发票不包含指示更改的说明,而是发票说明为空。但是当我检查条带上的事件数据时,有两个描述[见下图]

First Description which is the user's current/unused quantity enter image description here

上图显示了当前订阅计划数量为 5000 个但已增加到 15000 个的用户。有没有办法将这些描述包含在生成的发票中。

我检查了

incrementAndInvoice()
方法后,它只接受两个参数(1.count,2.Plan),如下所示;

enter image description here

没有像

charge()
方法那样包含描述的选项。有什么解决方法吗?任何正确方向的想法或指示将不胜感激。

感谢您提前的帮助。

php laravel stripe-payments laravel-cashier
2个回答
0
投票

目前还没有实现将描述包含在

incrementAndInvoice()
中。

因此我们必须实施它,在此之前请检查更新发票

首先将此行:

$user->subscription('main')->incrementAndInvoice(10000);
更改为
$subscription = $user->subscription('main')->incrementAndInvoice(10000);
(我们将其分配给
$subscription
变量)

然后获取如下发票:

$new_invoice = $user->invoices()->filter(function($invoice) use ($subscription) {
   return $invoice->subscription === $subscription->stripe_id;
});

更新订阅数量后,我们将添加以下内容:

$client  = new \GuzzleHttp\Client();
$request = $client->post('https://api.stripe.com/v1/invoices/' . $invoice_id, [
    'auth' => [$secret_key, null]
    'json' => ['description' => 'your description']
]);

$response = json_decode($request->getBody());

或以下:

$stripe = new \Stripe\StripeClient(
  $secret_key
);
$stripe->invoices->update(
  $invoice_id,
  ['description' => 'your description']
);

请注意:

  • $invoice_id
    是发票的ID。
  • $secret_key
    是 API 密钥。

0
投票

尝试这种自定义方法:

    $user = User::find($userId);
    $currentSubscription = $user->subscription('main');

   
    // Calculate the new quantity
    $newQuantity = $currentSubscription->quantity + $incrementBy;

    // Update the subscription quantity
    $currentSubscription->updateQuantity($newQuantity);

    // Create an invoice item with a custom description
    InvoiceItem::create([
        'customer' => $user->stripe_id,
        'amount' => 10000, // the amount to be charged in cents
        'currency' => 'usd',
        'description' => "Subscription quantity increased to {$newQuantity}",
    ]);

    // Create an invoice
    $invoice = Invoice::create([
        'customer' => $user->stripe_id,
        'auto_advance' => true, // Auto-finalize this draft after ~1 hour
    ]);

    // Finalize the invoice
    $invoice->finalizeInvoice();

    // Optionally, you can immediately pay the invoice
    $invoice->pay();
© www.soinside.com 2019 - 2024. All rights reserved.