Подписка на Stripe с указанием способа оплаты

Я использую последнюю версию iOS Stripe SDK (1.27), где STPAddCardViewControllerDelegate вместо того, чтобы вернуть STPToken, теперь возвращает PaymentMethod объект.

func addCardViewController(_ addCardViewController: STPAddCardViewController, didCreatePaymentMethod paymentMethod: STPPaymentMethod, completion: @escaping STPErrorBlock) {
   dismiss(animated: true, completion: { [weak self] in
       // Send the paymentMethod.stripeId to my Server
   })
}

На стороне сервера я проверил, есть ли у пользователя в моей системе уже объект клиента, и соответственно создал или обновил клиента, например:

Customer::create(['email'=> email, 'payment_method' => payment_method_id])

Но после попытки создать подписку со следующим фрагментом кода:

Subscription::create(['customer' => customer, 'plan' => plan_id])

Он возвращает следующую ошибку:

У этого клиента нет привязанного источника оплаты

Примечание. В качестве обходного пути я могу вернуться к предыдущей версии iOS SDK, когда STPToken был сгенерирован и использовался в качестве источника (таким образом работал). Но я хочу использовать новый API PaymentMethod.

  1. Есть ли способ конвертировать PaymentMethod в токен? (или правильно ли отправлять на сервер PaymentMethod.stripeId)?

  2. Чего не хватает?

1 ответ

Решение

Надеюсь, это поможет вам. У меня была такая же проблема, и я решил ее. Вы можете использовать этот код:

Subscription::create([
  'customer' => $customer,
  'plan' => $plan_id,
  'default_payment_method' => $paymentMethodId
]);

или

Чтобы использовать этот PaymentMethod по умолчанию для платежей по счетам или подписке, установите invoice_settings.default_payment_method для клиента на идентификатор PaymentMethod.

Customer::create([
'email'=> email,
'payment_method' => $paymentMethodId
'invoice_settings' => ['default_payment_method' => $paymentMethodId]
])
Другие вопросы по тегам