AcquiringSdkAndroid icon indicating copy to clipboard operation
AcquiringSdkAndroid copied to clipboard

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

Open fonrit opened this issue 3 years ago • 11 comments

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

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

fonrit avatar Dec 03 '22 01:12 fonrit

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

IlnarH avatar Dec 08 '22 11:12 IlnarH

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

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

fonrit avatar Dec 08 '22 19:12 fonrit

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

IlnarH avatar Dec 13 '22 12:12 IlnarH

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

fonrit avatar Dec 13 '22 12:12 fonrit

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

IlnarH avatar Dec 13 '22 13:12 IlnarH

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

fonrit avatar Dec 13 '22 14:12 fonrit

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

IlnarH avatar Dec 13 '22 14:12 IlnarH

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

Тест:

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 avatar Dec 13 '22 15:12 fonrit

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

fonrit avatar Dec 13 '22 16:12 fonrit

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

fonrit avatar Dec 19 '22 10:12 fonrit

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

IlnarH avatar Dec 19 '22 11:12 IlnarH