Приложение My React Native дает сбой, когда некоторые пользователи пытаются добавить способ оплаты в производство. Это происходит на Только Android. Я не могу воспроизвести это в отладке. Я получаю этот таинственный отчет об ошибке в Sentry, и после некоторого поиска в Google я понятия не имею, что означает эта ошибка:
No ChallengeStatusReceiver for transaction id
d.q.a.g1.i.d: No ChallengeStatusReceiver for transaction id
at d.q.a.g1.l.s.a
at d.q.a.g1.l.q.c
at d.q.a.g1.l.q.b
at d.q.a.g1.l.y$a.onPostExecute
at android.os.AsyncTask.finish(AsyncTask.java:755)
at android.os.AsyncTask.access$900(AsyncTask.java:192)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8167)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
Я использую полоска типси, и я почти уверен, что эта ошибка возникает при вызове stripe.confirmSetupIntent(). Этот метод представляет собой «проблему» аутентификации, если этого требует банк пользователя.
Сейчас я использую следующий поток:
const createPaymentMethodParams = {
"billingDetails":{
"name":"First Last"
},
"card":{
"cvc":"333",
"expMonth":12,
"expYear":23,
"number":"4111111111111111"
}
}
Вызов бэкэнд, который создает намерение установки с confirmation_method=manual. Это возвращает client_secret
«Создайте» метод оплаты с помощью createPaymentMethod, который возвращает идентификатор метода оплаты.
const paymentMethodData = await
stripe.createPaymentMethod(createPaymentMethodParams)
// confirm the setup intent:
// - if authentication is required user will be redirected to auth flow
// - if no authentication is required this directly returns paymentMethodId
const { status, paymentMethodId } = await stripe.confirmSetupIntent({
clientSecret: intent.client_secret, // previously obtained from backend
paymentMethodId: paymentMethodData.id,
})
Самый подходящий результат, который я нашел в Google, - это https://adyen.github.io/adyen-3ds2-android/com/adyen/threeds2/ChallengeStatusReceiver.html Это относится к SDK 3DS (как в «3-D Secure»), который имеет смысл увидеть на этом этапе, когда пользователю требуется пройти аутентификацию. Однако я действительно не уверен, что нахожусь на правильном пути ...
Кто-нибудь сталкивался с этой проблемой и может помочь мне понять ее или указать мне направление? Любая помощь очень ценится!
@NolanH Спасибо за ответ. Я добавил еще несколько деталей о потоке. И да я уверен, что потоки SCA / 3DSecure поддерживаются типси-полосой. У меня это работает в производстве для подавляющего большинства пользователей.
Можете ли вы поделиться схемой интеграции, которой вы следуете для использования
confirmSetupIntent? Вы уверены, что то, что вы делаете, поддерживаетсяtipsi-stripe?