Мое приложение использует Jetpack Compose
У меня есть экран оплаты. Поэтому я создаю намерение платежа с помощью новой или сохраненной карты. Затем я проверяю, нужен ли мне 3ds, и запускаю 3ds-обработку следующим образом:
Код: Выделить всё
@Composable
fun ThreeDSScreen(
publishableKey: String,
secret: String,
onSuccess: () -> Unit,
onCancel: () -> Unit,
onFail: () -> Unit
) {
val paymentLauncher = rememberPaymentLauncher(
publishableKey = publishableKey,
stripeAccountId = null,
callback = PaymentResultCallback(
onSuccess = onSuccess,
onCancel = onCancel,
onFail = onFail
)
)
val needLaunch = remember { mutableStateOf(true) }
LaunchedEffect(secret) {
if (needLaunch.value) {
needLaunch.value = false
delay(200)
paymentLauncher.confirm(
ConfirmPaymentIntentParams.create(
clientSecret = secret,
paymentMethodType = PaymentMethod.Type.CardPresent
)
)
}
}
}
class PaymentResultCallback(
private val onSuccess: () -> Unit,
private val onCancel: () -> Unit,
private val onFail: () -> Unit
) : PaymentLauncher.PaymentResultCallback {
override fun onPaymentResult(paymentResult: PaymentResult) {
when (paymentResult) {
is PaymentResult.Completed -> { onSuccess() }
is PaymentResult.Canceled -> { onCancel() }
is PaymentResult.Failed -> { onFail() }
}
}
}
И это работает нормально, независимо от того, делает ли пользователь ошибку, отменяет или подтверждает это.
Но давайте представим, что я остановил приложение . И я хочу, чтобы в моем приложении при запуске проверялось, существует ли ожидающее намерение. Поэтому я проверяю это.
И если я вижу ожидающее намерение, я пытаюсь подтвердить его таким же способом. Передача секретного кода клиента этому составному объекту.
Я использую тестовую карту VISA Stripe с 3ds для проверки.
Итак, я запускаю эту функцию и вижу, что запускается тестовый экран Stripe 3ds, и сразу после этого Stripe ведет себя так, как будто пользователь нажал «Не удалось».
Что я делаю не так? Я проверил, что с моим секретным ключом все в порядке.
UPD: После запуска подтверждения Stripe я получаю сообщение Fail. Поэтому я пытаюсь отменить ожидающее платежное намерение. Если мне не удалось, я пытаюсь подтвердить еще раз, и со второго раза все запускается успешно. Кажется, возникла проблема с запуском этого подтверждения.
Подробнее здесь: https://stackoverflow.com/questions/792 ... on-android