我的堆栈: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.. 似乎没有任何作用。具体发票未支付。
请指教。
结账会话用于生成新的一次性付款或订阅。它们不能用于已创建的发票(正如您所指出的)。相反,您可以通过此处的hosted_invoice_url 使用发票的托管发票页面来引导您的客户付款。但是,在使用此托管发票 URL 时,无法强制重定向到返回 URL。如果您想要这种级别的控制,那么您需要使用 Payment Element 构建自己的付款页面,并且将所需发票的 PaymentIntent 的 client_secret 传递到前端以呈现付款元素。