tinkoff-mobile-tech / tinkoff-asdk-android

Other
56 stars 28 forks source link

Обработка ошибок #149

Open fonrit opened 1 year ago

fonrit commented 1 year ago

Можно ли классифицировать полученный exeption для персональной обработки ? В документации сказано что часть ошибок обрабатываются в самом sdk, остальные придется обрабатывать самим. Не понятно как из AcquiringSdkException достать статус ошибки AUTH_FAIL для персональной обработки

exeption ru.tinkoff.acquiring.sdk.exceptions.AcquiringSdkException: PaymentState = AUTH_FAIL

IlnarH commented 1 year ago

Может, просто достать статус из message ошибки?

fonrit commented 1 year ago

Это да, а вот AcquiringSdkException возвращает только статус (Из этой страницы https://www.tinkoff.ru/kassa/develop/api/payments) который нужно обрабатывать самим, не может ли он вернуть клиенто ориентированную ошибку как AcquiringApiException:

message: Попробуйте повторить попытку позже Не получилось оплатить. Воспользуйтесь другой картой или обратитесь к продавцу

IlnarH commented 1 year ago

Т.е. имеется в виду получение человекочитаемого сообщения от бэка для клиента?

fonrit commented 1 year ago

Да. AcquiringApiException возвращает текст и код ошибки, с ним нет проблем кроме того что некоторый текст довольно кривой. А вот из AcquiringSdkException можно вытащить только message, который возвращается в таком виде "PaymentState = AUTH_FAIL", я могу сделать обработчик этих состояний локально, но хочется понимать подобная текстовка "PaymentState = AUTH_FAIL" будет возвращаться всегда с AcquiringSdkException, или он может вдруг вернуть уже текстовку с описанием ошибки

IlnarH commented 1 year ago

Не могли бы вы приложить логи, включающие запрос и ответ при получении этой ошибки?

fonrit commented 1 year ago

Речь идет о исключении которое выбрасывает AcquiringSdkException или ошибки AcquiringApiException ?

IlnarH commented 1 year ago

Речь о запросе (насколько я понимаю, GetState), который возвращает ответ со статусом платежа AUTH_FAIL, т.е. network логи в которых присутствуют строки вида === Sending request и === Got server response:.

fonrit commented 1 year ago

Я почему то вижу логи только с теста, с прода есть скрин дебага

Тест:

https://rest-api-test.tinkoff.ru/v2/GetState

Response: { "Success": true, "ErrorCode": "1014", "Message": "Карта недействительна", "TerminalKey": "TestSDK", "Status": "REJECTED", "PaymentId": "4072210335", "OrderId": "1323658787", "Params": [ { "Key": "Route", "Value": "ACQ" }, { "Key": "Source", "Value": "cards" } ], "Details": "Неправильные реквизиты — проверьте их или воспользуйтесь другой картой", "Amount": 1620 }

Прод:

Снимок экрана 2022-12-13 в 18 47 06

Судя по респонсу на тесте getState может вернуть более детальную информацию о ошибке, но толка от этого нет так как она не передается дальше в ThreeDsViewModel:

Снимок экрана 2022-12-13 в 18 56 10

Вы просто возвращаете message со статусом "PaymentState = AUTH_FAIL"

fonrit commented 1 year ago

Было хорошо если AcquiringSdkException возвращал message (Опционально) и state, чтобы можно было локально Обработать ошибку в случае необходимости. А то сейчас в message возвращает state и не погрузившись не понятно state возвращается всегда или он может еще вернуть текст ошибки из getState

fonrit commented 1 year ago

Можете пожалуйста ответить

IlnarH commented 1 year ago

Думаю, можно реализовать что-то подобное, но не в ближайшее время; скорее всего вместе с редизайном (ориентировочно - Q1 2023).