Подписка на 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.
Есть ли способ конвертировать PaymentMethod в токен? (или правильно ли отправлять на сервер PaymentMethod.stripeId)?
Чего не хватает?
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]
])