diff --git a/src/Dynamicweb.Ecommerce.CheckoutHandlers.QuickPayPaymentWindow.csproj b/src/Dynamicweb.Ecommerce.CheckoutHandlers.QuickPayPaymentWindow.csproj index 0475c30..6b99a74 100644 --- a/src/Dynamicweb.Ecommerce.CheckoutHandlers.QuickPayPaymentWindow.csproj +++ b/src/Dynamicweb.Ecommerce.CheckoutHandlers.QuickPayPaymentWindow.csproj @@ -1,6 +1,6 @@  - 10.1.3 + 10.1.4 1.0.0.0 QuickPay Payment Window The QuickPay Payment Window checkout handler is designed to work with QuickPay v10. diff --git a/src/QuickPayPaymentWindow.cs b/src/QuickPayPaymentWindow.cs index 96e972a..3ab4a9d 100644 --- a/src/QuickPayPaymentWindow.cs +++ b/src/QuickPayPaymentWindow.cs @@ -1084,8 +1084,8 @@ private CheckedData CheckData(Order order, string responseText, long transaction LogEvent(order, "Response validation started"); var quickpayResponse = Converter.Deserialize>(responseText); - var operations = Converter.Deserialize[]>(Converter.ToString(quickpayResponse["operations"])); - var metadata = Converter.Deserialize>(Converter.ToString(quickpayResponse["metadata"])); + var operations = Converter.Deserialize[]>(Converter.Serialize(quickpayResponse["operations"])); + var metadata = Converter.Deserialize>(Converter.Serialize(quickpayResponse["metadata"])); string errorMessage = "Some unhandled error is occured."; @@ -1127,7 +1127,7 @@ private CheckedData CheckData(Order order, string responseText, long transaction string fraudSuspectedKey = "fraud_suspected"; if (metadata.ContainsKey(fraudSuspectedKey) && Converter.ToBoolean(metadata[fraudSuspectedKey]) is true) { - string[] fraudRemarks = Converter.Deserialize(Converter.ToString(metadata["fraud_remarks"])); + string[] fraudRemarks = Converter.Deserialize(Converter.Serialize(metadata["fraud_remarks"])); string fraudText = string.Join(System.Environment.NewLine, fraudRemarks); errorMessage = $"{errorMessage}. {fraudText}"; } @@ -1371,7 +1371,7 @@ private OperationStatus GetLastOperationStatus(Order order, string operationType { paymentModel = Converter.Deserialize>(responseText); } - var operations = Converter.Deserialize[]>(Converter.ToString(paymentModel["operations"])); + var operations = Converter.Deserialize[]>(Converter.Serialize(paymentModel["operations"])); Dictionary operation; operation = operations.Last(o => string.IsNullOrEmpty(operationTypeLock) || diff --git a/src/QuickPayRequest.cs b/src/QuickPayRequest.cs index 7905376..de42537 100644 --- a/src/QuickPayRequest.cs +++ b/src/QuickPayRequest.cs @@ -82,14 +82,19 @@ ApiService.DeleteCard or if (!response.IsSuccessStatusCode) { - var error = Converter.Deserialize(responseText); - if (error.ErrorCode > 0 || !string.IsNullOrWhiteSpace(error.Message)) + string errorMessage = $"QuickPay request failed with HTTP status {(int)response.StatusCode} {response.ReasonPhrase}."; + try { - string errorMessage = error.ErrorCode > 0 - ? $"Error code: {error.ErrorCode}. Message: {error.Message}." - : $"Message: {error.Message}."; - throw new Exception(errorMessage); + var error = Converter.Deserialize(responseText); + if (error?.ErrorCode > 0 || !string.IsNullOrWhiteSpace(error?.Message)) + { + errorMessage = error.ErrorCode > 0 + ? $"Error code: {error.ErrorCode}. Message: {error.Message}." + : $"Message: {error.Message}."; + } } + catch { } + throw new Exception(errorMessage); } return responseText;