Нет ChallengeStatusReceiver для идентификатора транзакции

Приложение 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(). Этот метод представляет собой «проблему» аутентификации, если этого требует банк пользователя.

Сейчас я использую следующий поток:

  1. Пользователь вводит платежные реквизиты:
const createPaymentMethodParams = {
  "billingDetails":{
    "name":"First Last"
  },
  "card":{
    "cvc":"333",
    "expMonth":12,
    "expYear":23,
    "number":"4111111111111111"
  }
}
  1. Вызов бэкэнд, который создает намерение установки с confirmation_method=manual. Это возвращает client_secret

  2. «Создайте» метод оплаты с помощью createPaymentMethod, который возвращает идентификатор метода оплаты.

const paymentMethodData = await
    stripe.createPaymentMethod(createPaymentMethodParams)
  1. Наконец, подтвердите намерение установки (это шаг, который иногда дает сбой):
// 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»), который имеет смысл увидеть на этом этапе, когда пользователю требуется пройти аутентификацию. Однако я действительно не уверен, что нахожусь на правильном пути ...

Кто-нибудь сталкивался с этой проблемой и может помочь мне понять ее или указать мне направление? Любая помощь очень ценится!

Можете ли вы поделиться схемой интеграции, которой вы следуете для использования confirmSetupIntent? Вы уверены, что то, что вы делаете, поддерживается tipsi-stripe?

Nolan H 08.04.2021 21:03

@NolanH Спасибо за ответ. Я добавил еще несколько деталей о потоке. И да я уверен, что потоки SCA / 3DSecure поддерживаются типси-полосой. У меня это работает в производстве для подавляющего большинства пользователей.

colakollektiv 09.04.2021 15:37
0
2
12
0

Другие вопросы по теме