AcquiringSdkAndroid icon indicating copy to clipboard operation
AcquiringSdkAndroid copied to clipboard

TinkoffAcquiring.openPaymentScreen - зависает белый экран с прелоадером

Open decaseal opened this issue 5 years ago • 42 comments

Использую TinkoffAcquiring.openPaymentScreen.

После ввода данных карты и нажатия Pay зависает белый экран с прелоадером.

Лог:

I/System.out: Tinkoff Acquiring SDK: === Parameters: {"CustomerKey":"40","TerminalKey":"...","Token":"..."}
I/System.out: Tinkoff Acquiring SDK: === Sending POST request to https://securepay.tinkoff.ru/v2/GetCardList
I/System.out: Tinkoff Acquiring SDK: === Got server response: [{"CardId":"1773316","Pan":"521324******2696","Status":"D","RebillId":"","CardType":0,"ExpDate":"0921"}]
I/System.out: Tinkoff Acquiring SDK: === Request done with success, sent for processing
I/System.out: Tinkoff Acquiring SDK: === Parameters: {"Description":"Предоставление права использования ПО Топвизор - Счет ID401279","Receipt":{"Email":"[email protected]","Items":[{"Amount":100,"Name":"ПО Топвизор ID401279","Price":100,"Quantity":1.0,"Tax":"none"}],"Taxation":"usn_income_outcome"},"Language":"EN","DATA":{"chargeFlag":"false"},"Amount":"100","CustomerKey":"40","TerminalKey":"...","Token":"...","OrderId":"401279"}
I/System.out: Tinkoff Acquiring SDK: === Sending POST request to https://securepay.tinkoff.ru/v2/Init
I/System.out: Tinkoff Acquiring SDK: === Got server response: {"Success":true,"ErrorCode":"0","TerminalKey":"...","Status":"NEW","PaymentId":"344973847","OrderId":"401279","Amount":100}
I/System.out: Tinkoff Acquiring SDK: === Request done with success, sent for processing
I/System.out: Tinkoff Acquiring SDK: === Parameters: {"PaymentId":"344973847","TerminalKey":"...","Token":"..."}
I/System.out: Tinkoff Acquiring SDK: === Sending POST request to https://securepay.tinkoff.ru/v2/Check3dsVersion
I/System.out: Tinkoff Acquiring SDK: === Got server response: {"Success":true,"ErrorCode":"0","Message":"OK","Version":"1.0.0"}
I/System.out: Tinkoff Acquiring SDK: === Request done with success, sent for processing
I/System.out: Tinkoff Acquiring SDK: === Parameters: {"InfoEmail":"[email protected]","PaymentId":"344973847","TerminalKey":"...","Token":"...","SendEmail":true,"CardData":"..."}
I/System.out: Tinkoff Acquiring SDK: === Sending POST request to https://securepay.tinkoff.ru/v2/FinishAuthorize
I/System.out: Tinkoff Acquiring SDK: === Got server response: {"Success":true,"ErrorCode":"0","TerminalKey":"...","Status":"3DS_CHECKING","PaymentId":"344973847","OrderId":"401279","Amount":100,"ACSUrl":"https://ds1.mirconnect.ru:443/sc1/pareq","MD":"ACQP-5971590169","PaReq":"..."}
I/System.out: Tinkoff Acquiring SDK: === Request done with success, sent for processing

P.S.:

Судя по дебагеру, код попадает в ThreeDsWebViewClient.onPageFinished, где устанавливается

progressBar?.visibility = View.GONE
view.visibility = View.VISIBLE

И сразу же после этого в ThreeDsWebViewClient.onPageStarted, отменяя content.visibility

content?.visibility = View.INVISIBLE
progressBar?.visibility = View.VISIBLE

decaseal avatar Oct 26 '20 14:10 decaseal

Здравствуйте! Судя по всему зависает на проверке 3DS. Должна загрузиться страница проверки кода банка. Карта какого банка была использована? Как долго пробовали ожидать загрузки?

MaryAPc avatar Oct 26 '20 15:10 MaryAPc

Используется карта Тинькофф. Загрузки ждал 10 минут

decaseal avatar Oct 26 '20 17:10 decaseal

Зависает запрос к https://ds1.mirconnect.ru/sc1/authreq

decaseal avatar Oct 27 '20 05:10 decaseal

Пробовал следующие карты:

  • Дебетовая Тинькофф MasterCard
  • Кредитка Тинькофф MasterCard
  • Дебетовая Сбербанк Visa

decaseal avatar Oct 27 '20 05:10 decaseal

Такое происходит только на прод контуре? https://securepay.tinkoff.ru Или на тестовом тоже? какой терминал использовался, тест/прод?

MaryAPc avatar Oct 27 '20 06:10 MaryAPc

Терминал прод, обновляемся со старой версии SDK.

decaseal avatar Oct 27 '20 06:10 decaseal

Передала проблему в нашу поддержку, как будет прояснение ситуации, я вам сообщу

MaryAPc avatar Oct 27 '20 07:10 MaryAPc

Большое спасибо. Если поддержке будет удобно связаться с нами на прямую, то можно писать на [email protected].

decaseal avatar Oct 27 '20 07:10 decaseal

@decaseal Здравствуйте! сейчас такая проблема повторяется? коллеги сообщают, что платежи по терминалу проходят успешно

MaryAPc avatar Nov 06 '20 09:11 MaryAPc

@MaryAPc Добрый день.

Все по прежнему, зависает запрос к https://ds1.mirconnect.ru/sc1/authreq.

P.S. Рабочая версия приложения, использующая старый SDK, работает. Возможно ваши коллеги видят успешные платежи с использованием старого SDK.

decaseal avatar Nov 06 '20 11:11 decaseal

Терминалы используются одинаковые в старой и новой версиях?

MaryAPc avatar Nov 06 '20 13:11 MaryAPc

Да, терминал один и тот же.

decaseal avatar Nov 06 '20 13:11 decaseal

Если есть возможность, пришлите пожалуйтса PaymentId других неуспешных/зависающих операций, для того чтобы мы проанализировали проблему на большем кол-ве запросов

MaryAPc avatar Nov 09 '20 08:11 MaryAPc

@MaryAPc "PaymentId":"357188093" - Дебетовая, Tinkoff Black, MasterCard "PaymentId":"357189062" - Кредитная, Tinkoff Drive, MasterCard "PaymentId":"357189862" - Дебетовая, Сбербанк Молодежная, Visa

decaseal avatar Nov 09 '20 11:11 decaseal

Подозреваем, что проблема в SDK. По какой-то причине не передается параметр PaReq при загрузке страницы. Скажите, у вас включен proguard для сборки (minifyEnabled true)? например так:

 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

MaryAPc avatar Nov 09 '20 13:11 MaryAPc

@MaryAPc ProGuard включен только для release, тесты выполняю на debug.

Наши настройки ProGuard для SDK:

-keep class ru.tinkoff.acquiring.sdk.localization.** { *; }
-keep class ru.tinkoff.acquiring.sdk.requests.* { *; }

decaseal avatar Nov 09 '20 14:11 decaseal

Мне удалось повторить проблему. Но не понятно почему и в каком месте теряется параметр, под капотом там используется обычный StringBuilder. Можете подтвердить догадку с помощью дебага? Нужно поставить точку остановки в классе ThreeDsActivity, метод start3Ds, строка wvThreeDs.postUrl(.....) И прислать значение переменной params, можно заменить реальные значения PaReq, MD

MaryAPc avatar Nov 10 '20 11:11 MaryAPc

@MaryAPc

PaReq=eJxVU...ucXMT6&MD=ACQP-...4766&TermUrl=https%3A%2F%2Fsecurepay.tinkoff.ru%2Frest%2FSubmit3DSAuthorization

decaseal avatar Nov 10 '20 11:11 decaseal

Спасибо, догадка не подтвердилась, параметр теряется в другом месте. Буду искать дальше

MaryAPc avatar Nov 10 '20 11:11 MaryAPc

@MaryAPc,

Запустил chrome devtools. Судя по логам, запрос https://ds1.mirconnect.ru/sc1/authreq выполняется успешно, страница в devtools отрисовывается, при этом в приложении белый экран с прелоадером. onPageFinished не запускается. Так же, возможно, не запускается js window.onload после загрузки https://ds1.mirconnect.ru/sc1/authreq.

Скриншоты из devtools:

  • http://joxi.ru/823axlbt8zbZwr?d=1 (https://ds1.mirconnect.ru/sc1/pareq)
  • http://joxi.ru/52aazP8tklQ9g2?d=1 (https://ds1.mirconnect.ru/sc1/authreq)

decaseal avatar Nov 10 '20 12:11 decaseal

@decaseal я подготовила для вас snapshot с фиксом, замените зависимость ui на следующее: implementation 'ru.tinkoff.acquiring:ui:2.1.1-SNAPSHOT'

В файл build,gradle проекта добавте:

 allprojects {
    repositories {
        .......
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
    }
}

Сделайте ребилд приложения, запустите и попробуйте провести оплату

MaryAPc avatar Nov 11 '20 11:11 MaryAPc

@MaryAPc

С фиксом прелоадер не зависает оплата проходит.

Однако есть некоторые косяки по интерфейсу:

  1. После нажатия Pay появляется экран с кнопкой "Please click here to continue" (http://joxi.ru/ZrJaYPNtnQBjPA?d=1).
  2. Нажатие на кнопку вызывает экран подтверждения платежа.
  3. После ввода кода из смс платеж проходит и опять появляется экран с кнопкой "Please click here to continue".
  4. Нажатие на кнопку закрывает экран, вызывается метод onActivityResult.

decaseal avatar Nov 11 '20 12:11 decaseal

Этот платеж был по карте Тинькофф Банка?

MaryAPc avatar Nov 11 '20 12:11 MaryAPc

И пришлите пожалуйста paymentId операции

MaryAPc avatar Nov 11 '20 13:11 MaryAPc

@MaryAPc

"PaymentId":"360292972" - Дебетовая, Tinkoff Black, MasterCard "PaymentId":"360294332" - Кредитная, Tinkoff Drive, MasterCard "PaymentId":"360295746" - Дебетовая, Сбербанк Молодежная, Visa

decaseal avatar Nov 12 '20 05:11 decaseal

По карте Visa Сбербанка тоже была кнопка на 3DS?

MaryAPc avatar Nov 12 '20 06:11 MaryAPc

@MaryAPc Да, все тоже самое, только снизу иконка не MasterCard а Visa

decaseal avatar Nov 12 '20 06:11 decaseal

Поняла, спасибо, передам коллегам, попробуем выяснить почему показываются кнопки

MaryAPc avatar Nov 12 '20 06:11 MaryAPc

С какой модели девайса проводились тесты и какая у него версия Android? Приложение со старой версией SDK тестировалось на таком же девайсе и кнопки на 3DS не было или тоже была?

MaryAPc avatar Nov 12 '20 12:11 MaryAPc

В релизе версия 2.2.0 без дополнительных лоадеров, можете переходить на нее вместо снэпшота

MaryAPc avatar Nov 19 '20 10:11 MaryAPc