QIWI-API / bill-payments-dotnet-sdk

.Net SDK для единого платежного протокола эквайринга и QIWI Кошелька.
MIT License
17 stars 7 forks source link

BillPaymentsServiceException #10

Closed boraicho closed 5 years ago

boraicho commented 5 years ago

Подскажите, в чем может быть проблема? руками дёргаю запрос через postman, он все возвращает. https://api.qiwi.com/partner/bill/v1/bills/225983dd-d225-4100-b57c-bc8dc56201ab

2019-04-28` 23:27:38.3068||ERROR|Business.Services.Qiwi.QiwiService|Exception of type 'Qiwi.BillPayments.Exception.BillPaymentsServiceException' was thrown. Qiwi.BillPayments.Exception.BillPaymentsServiceException: Exception of type 'Qiwi.BillPayments.Exception.BillPaymentsServiceException' was thrown. at Qiwi.BillPayments.Client.RequestMappingIntercessor.DeserializeResponseBody[T](ResponseData response) at Qiwi.BillPayments.Client.RequestMappingIntercessor.RequestAsync[T](String method, String url, Dictionary2 headers, Object entityOpt) at Qiwi.BillPayments.Client.BillPaymentsClient.GetBillInfoAsync[T](String billId) at Qiwi.BillPayments.Client.BillPaymentsClient.GetBillInfoAsync(String billId) at Common.QiwiClient.GetPaymentInfo(String billId) in C:\GFFG\Services\Common\QiwiClient.cs:line 66 at Business.Services.Qiwi.QiwiService.GetPaymentWaitingByUserId(Int32 userId) in C:\GFFG\Services\Business\Services\Qiwi\QiwiService.cs:line 92

Можно ли сделать более информативные ошибки? из экспешена нифига не понятно, что произошло.

boraicho commented 5 years ago

CancelBill тоже кидает исключение, хотя отрабатывает. После вызова, если через postman дёрнуть запрос, то видно что статус изменился на REJECTED. Что самое интересное, 20-ю минутами ранее, этот метод отрабатывал нормально, и возвращал результат

lar-dragon commented 5 years ago

Мы постарались улучшить раздел документации посвященный обработки исключений.

asiryan commented 2 years ago

А можете объяснить в чем конкретно проблема в случае данной ошибки? Ничего в голову не приходит, кроме как роптать на API.

DarkLexFirst commented 1 year ago

Изрядно поковырявшись в этой ошибке я осознал несколько моментов: На сколько западло разработчику данного sdk И на сколько меня бесят разрабочики, которые не соблюдают свои же контракты

Теперь к сути... Если коротко, то чаще всего данная ошибка возникает из за невозможности десериализовать тело респонса из json.

В моем случае проблема была следующая: Мне нужно было задать лайфтайм платежа. Меня не смутило отсутствие данного свойства в sdk, и я смело пошел наворачивать его в кверю. Но неожиданно для себя открыл, что больше я не могу сделать ни один запрос (понял я это ой как не сразу, и уж тем более что два этих события как то связаны) Как оказалось, в api lifetime платежа, который мы передаем в uri этого самого платежа, по которому ходит юзер, прям как есть записывается в expirationDate платежа и далее передается в том же виде во все респонсы, где нам возвращается bill.

И проблема тут в том, что формат даты lifetime и всех других приходящих дат отличаются

lifetime: ГГГГ-ММ-ДДTччмм все остальные: yyyy-MM-ddTHH\:mm\:ss.fffzzz

по итогу из за того, что конфигурация json может иметь только один формат даты, который она будет парсить, он не сможет распарсирить expirationDate, а мы получим максимально неинформативный exception.

По итогу имеем:

и да... почему lifetime'ом называется то, что по факту обрабатывается как experationDate, а не время жизни??