Laravel Stripe 无法为现有发票创建结帐会话

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

我的堆栈:Laravel 和 stripephp

场景:有一张已为订阅生成的未结发票。条带发票 ID (in_1PVBjnSE4D7cjIupbEfXsQ4w)。

我想实现以下目标

第 1 步 - 创建一个 URL,供客户为生成的发票付款。 步骤 2 - 客户支付发票 ID (in_1PVBjnSE4D7cjIupbEfXsQ4w)。 第 3 步 - 付款后,客户应被重定向回重定向网址。

问题:重定向正在运行,但相关发票未支付。但会收取相同金额的新发票。

我一直在尝试:我正在尝试创建一个有助于重定向的条带会话。但似乎我无法指示条纹系统支付特定发票。

这是我的控制器代码,它生成条带会话。

public function createCheckoutSession(Request $request, $invoiceId)
    {
        $firmId = session('firmdatas.id');
        $firmData = Firmregistration::findOrFail($firmId);

        $invoice = FirmInvoices::findOrFail($invoiceId);
        $stripeObj = new \Stripe\StripeClient(config('services.stripe.secret'));
        $subscription = $stripeObj->subscriptions->retrieve($invoice->stripe_subscription_id);
        try {
            $session = $stripeObj->checkout->sessions->create([
                'payment_method_types' => ['card'],
                'line_items' => [[
                    'price_data' => [
                        'currency' => 'usd',
                        'product_data' => [
                            'name' => 'Invoice Payment',
                        ],
                        'unit_amount' => $invoice->amount_due,
                    ],
                    'quantity' => 1,
                ]],
                'subscription_data' => [
                    'items' => [
                        ['plan' => $subscription->items->data[0]->id], // Assuming only one item in the subscription
                    ],
                ],
                'mode' => 'payment',
                'customer' => $firmData->stripe_id,
                'payment_intent_data' => [
                    'description' => "Payment for Invoice #{$invoice->number}",
                    'metadata' => [
                        'invoice_id' => $invoice->invoice_id,
                    ],
                ],
                'success_url' => route('admin.subscription.invoice.paymentsuccess', [
                    'invoiceid' => $invoice->invoice_id,
                    'amount_paid' => $invoice->amount_due, // Stripe will update the actual amount paid after payment
                    'receipt_url' => '', // Placeholder, will be updated below
                ]),
                'cancel_url' => route('admin.subscription.view'),
            ]);

            // Redirect to the Checkout Session URL
            return redirect()->away($session->url);

        } catch (\Exception $e) {
            Log::error('Error creating Stripe Checkout Session: ' . $e->getMessage());
            return view('errors.500');
        }
    }

上面我试图传递订阅或发票 ID.. 似乎没有任何作用。具体发票未支付。

请指教。

php laravel stripe-payments
1个回答
0
投票

结账会话用于生成新的一次性付款或订阅。它们不能用于已创建的发票(正如您所指出的)。相反,您可以通过此处的hosted_invoice_url 使用发票的托管发票页面来引导您的客户付款。但是,在使用此托管发票 URL 时,无法强制重定向到返回 URL。如果您想要这种级别的控制,那么您需要使用 Payment Element 构建自己的付款页面,并且将所需发票的 PaymentIntent 的 client_secret 传递到前端以呈现付款元素。

© www.soinside.com 2019 - 2024. All rights reserved.