#php #laravel #stripe-payments #laravel-cashier
#php #laravel #stripe-платежи #laravel-кассир
Вопрос:
https://stripe.com/docs/payments/capture-later
В документации stripe выше говорится, что если вы хотите зафиксировать удержание платежа, установите capture_method на manual, а затем, когда вы будете готовы завершить начисление, отправьте запрос на захват с окончательной суммой.
Я не вижу никакой документации в реализации laravel cashier о том, как это сделать.
однако, когда я смотрю в код, я вижу, что могу передавать параметры, которые объединяются, и я мог бы установить это, я надеюсь?
trait Billable
{
/**
* Make a "one off" charge on the customer for the given amount.
*
* @param int $amount
* @param string $paymentMethod
* @param array $options
* @return LaravelCashierPayment
*
* @throws LaravelCashierExceptionsPaymentActionRequired
* @throws LaravelCashierExceptionsPaymentFailure
*/
public function charge($amount, $paymentMethod, array $options = [])
{
$options = array_merge([
'confirmation_method' => 'automatic',
'confirm' => true,
'currency' => $this->preferredCurrency(),
], $options);
$options['amount'] = $amount;
$options['payment_method'] = $paymentMethod;
if ($this->stripe_id) {
$options['customer'] = $this->stripe_id;
}
$payment = new Payment(
StripePaymentIntent::create($options, $this->stripeOptions())
);
$payment->validate();
return $payment;
}
...
/**
* Create a new SetupIntent instance.
*
* @param array $options
* @return StripeSetupIntent
*/
public function createSetupIntent(array $options = [])
{
return StripeSetupIntent::create(
$options, $this->stripeOptions()
);
}
но, похоже, это устанавливает payment_method, а не capture_method … Я чувствую, что это вызвало бы проблемы, если бы оба были установлены.
Поскольку я пишу это, я думаю, что ответ заключается в использовании функции createSetupIntent с моими желаемыми параметрами, а затем сохраните ответ, чтобы я мог ссылаться на намерение позже и завершить начисление.
Кто-нибудь это делал? Скорее, кто-нибудь, читающий это, сделал это сам? и если да, то правильное ли это решение?
Ответ №1:
Хотя Laravel Cashier отлично подходит для запуска модели на основе подписки для вашего приложения, я всегда считал SDK Stripe более полезным, интуитивно понятным и простым в использовании. Их документация потрясающая, я бы предложил использовать сам SDK.
Учитывая это, вы можете продолжать использовать Cashier для всего остального, и для этого конкретного сценария вы можете использовать SDK. Для вашего случая вам нужно будет создать PaymentIntent и, как вы сказали, установить для capture_method значение manual.
Вот пример использования Stripe SDK (если вы используете Cashier, у вас уже есть пакет):
$stripe = new StripeStripeClient(
'YOUR_SECRET_KEY'
);
$stripe->paymentIntents->create([
'amount' => 2000,
'currency' => 'usd',
'payment_method_types' => ['card'],
'capture_method' => 'manual'
]);