在拉拉维尔收银员中处理新付款意图的最佳方法是什么



除非我错过了什么,否则我看不到任何收银员包装器来提供付款意图的创建,这存在吗?

虽然 Cashier v10 添加了一些内容来处理 SCA,但它对我不起作用,因为我通过字体端元素处理付款详细信息,因此重定向到新route很混乱。

我需要按照本指南处理它 https://stripe.com/docs/payments/payment-intents/migration

这需要创建如下所示的付款意图:

$intent = StripePaymentIntent::create([
'payment_method' => $json_obj->payment_method_id,
'amount' => 1099,
'currency' => 'gbp',
'confirmation_method' => 'manual',
'confirm' => true,
]);

我当然可以直接从 Stripe sdk 执行此操作,如下所示,但鉴于我可能会添加更多功能,这些功能可能会利用 Cashier 的其他功能,这将使通过 Cashier 处理所有内容时保持更干净。

我可以通过收银员创建付款意图还是错过了付款意图?如果是这样,如何?还是我应该以不同的方式处理这个问题?

进一步调查后,答案是

LaravelCashierBillable->charge($amount,$method,$options)

方法在幕后进行StripePaymentIntent::create($options)

有一些事项需要注意:

  • 默认情况下,选项confirmation_method将设置为automaticconfirm设置为true
  • 将设置currency选项,并将使用出纳默认货币
  • amount选项将根据传入$amount进行设置,payment_method选项将根据传入$method进行设置。
  • 通过在$options参数中传递等效值,都可以用替换覆盖这些值

最后,如果您需要 SCA(我确实这样做了(,那么您必须捕获一个LaravelCashierExceptionsPaymentActionRequired异常,并为此重定向到内置Cashier页面,或者通过您的 API 请求在前端处理它。

我不是收银员用户,但它看起来像是 Stripe Billing 的接口,因此它主要处理与计费相关的原语。 据我所知,它确实在引擎盖下使用了PaymentIntents(用于验证需要身份验证的发票付款(,但没有直接公开PaymentIntent的创建。

收银员文档建议在需要身份验证时将集成重定向到"付款页面":https://laravel.com/docs/5.8/billing#payments-requiring-additional-confirmation(对于付款意图处于状态requires_action的情况(

对于直接创建PaymentIntents,stripe-php API库将是正确的方法。

扩展 Laravel\Cashier\Billable Traits; 和拉拉维尔\收银员\关注\执行费用; 并使用它代替用户模型中的默认计费特征

<?php
namespace AppTraitsStripe;
use LaravelCashierConcernsManagesCustomer;
use LaravelCashierConcernsManagesInvoices;
use LaravelCashierConcernsManagesPaymentMethods;
use LaravelCashierConcernsManagesSubscriptions;
use AppTraitsStripeCustomPerformCharges as PerformsCharges;
trait CustomBillable
{
use ManagesCustomer;
use ManagesInvoices;
use ManagesPaymentMethods;
use ManagesSubscriptions;
use PerformsCharges;
}
trait CustomPerformCharges
{
use PerformsCharges;

public function authorize(int $amount): Payment
{
if (!$this->hasStripeId()) {
throw new BadRequestException(__('User is not a stripe customer'));
}

$paymentMethod = $this->defaultPaymentMethod();
$options = [
'capture_method' => 'manual'
];
return $this->charge($amount, $paymentMethod, $options);
}

public function capture(int $amount, string $paymentIntent): void
{
$intent = StripePaymentIntent::retrieve($paymentIntent, $this->stripeOptions());
$intent->capture(['amount_to_capture' => $amount]);
}
}

注意:现在可以创建付款意图(使用 Laravel 10.x 检查(

这是官方文档的链接:https://laravel.com/docs/10.x/billing#creating-payment-intents

复制以下历史目的

您可以通过在可计费模型实例上调用支付方法来创建新的 Stripe 支付意向。调用此方法将创建包装在LaravelCashierPayment实例中的付款意向:

use IlluminateHttpRequest;

Route::post('/pay', function (Request $request) {
$payment = $request->user()->pay(
$request->get('amount')
);

return $payment->client_secret;
});

创建付款意向后,可以将客户端密码返回到应用程序的前端,以便用户可以在其浏览器中完成付款。

最新更新