public I3DSecureResponse Parse(string dataCashResponse) { var document = XDocument.Parse(dataCashResponse); var response = new DataCash3DSecurePaymentResponse(document); string transactionReference; if (document.TryGetXPathValue("Response/datacash_reference", out transactionReference)) { response.TransactionReference = transactionReference; } string avsCv2Result; if (document.TryGetXPathValue("Response/CardTxn/Cv2Avs/cv2avs_status", out avsCv2Result)) { response.AvsCv2Result = avsCv2Result; } var dataCashStatus = int.Parse(document.XPathValue("Response/status")); switch (dataCashStatus) { case DataCashStatus.Success: response.Status = PaymentStatus.Successful; break; case DataCashStatus.RequiresThreeDSecureAuthentication: response.Status = PaymentStatus.Pending; response.Requires3DSecurePayerVerification = true; response.PAReq = document.XPathValue("Response/CardTxn/ThreeDSecure/pareq_message"); response.ACSUrl = document.XPathValue("Response/CardTxn/ThreeDSecure/acs_url"); break; default: if (DataCashStatus.CanImmediatelyAuthorise(dataCashStatus)) { Log.Warn("Response status of '{0}' was returned for DataCash txn reference '{1}'. This txn can be immediately authorised.", dataCashStatus, transactionReference); response.Status = PaymentStatus.Pending; } else { response.Status = PaymentStatus.Failed; response.IsSystemFailure = DataCashStatus.IsSystemFailure(dataCashStatus); var failureReason = DataCashStatus.FailureReason(dataCashStatus); response.FailureMessage = failureReason.Message; response.FailureType = failureReason.Type; } break; } return(response); }
public I3DSecureResponse Parse(string dataCashResponse) { var document = XDocument.Parse(dataCashResponse); var response = new DataCash3DSecurePaymentResponse(document); string transactionReference; if (document.TryGetXPathValue("Response/datacash_reference", out transactionReference)) response.TransactionReference = transactionReference; string avsCv2Result; if (document.TryGetXPathValue("Response/CardTxn/Cv2Avs/cv2avs_status", out avsCv2Result)) response.AvsCv2Result = avsCv2Result; var dataCashStatus = int.Parse(document.XPathValue("Response/status")); switch (dataCashStatus) { case DataCashStatus.Success: response.Status = PaymentStatus.Successful; break; case DataCashStatus.RequiresThreeDSecureAuthentication: response.Status = PaymentStatus.Pending; response.Requires3DSecurePayerVerification = true; response.PAReq = document.XPathValue("Response/CardTxn/ThreeDSecure/pareq_message"); response.ACSUrl = document.XPathValue("Response/CardTxn/ThreeDSecure/acs_url"); break; default: if (DataCashStatus.CanImmediatelyAuthorise(dataCashStatus)) { Log.Warn("Response status of '{0}' was returned for DataCash txn reference '{1}'. This txn can be immediately authorised.", dataCashStatus, transactionReference); response.Status = PaymentStatus.Pending; } else { response.Status = PaymentStatus.Failed; response.IsSystemFailure = DataCashStatus.IsSystemFailure(dataCashStatus); var failureReason = DataCashStatus.FailureReason(dataCashStatus); response.FailureMessage = failureReason.Message; response.FailureType = failureReason.Type; } break; } return response; }
public I3DSecureResponse Parse(string dataCashResponse) { var document = XDocument.Parse(dataCashResponse); var response = new DataCash3DSecurePaymentResponse(document); string transactionReference; if (document.TryGetXPathValue("Response/datacash_reference", out transactionReference)) response.TransactionReference = transactionReference; var dataCashStatus = int.Parse(document.XPathValue("Response/status")); switch (dataCashStatus) { case DataCashStatus.Success: response.Status = PaymentStatus.Successful; break; case DataCashStatus.RequiresThreeDSecureAuthentication: response.Status = PaymentStatus.Pending; response.Requires3DSecurePayerVerification = true; response.PAReq = document.XPathValue("Response/CardTxn/ThreeDSecure/pareq_message"); response.ACSUrl = document.XPathValue("Response/CardTxn/ThreeDSecure/acs_url"); break; default: if (DataCashStatus.CanImmediatelyAuthorise(dataCashStatus)) response.Status = PaymentStatus.Pending; else { response.Status = PaymentStatus.Failed; response.IsSystemFailure = DataCashStatus.IsSystemFailure(dataCashStatus); var failureReason = DataCashStatus.FailureReason(dataCashStatus); response.FailureMessage = failureReason.Message; response.FailureType = failureReason.Type; } break; } return response; }