public static PaymentGatewayResponse Create(bool logTheResponse) { PaymentGatewayResponse response = null; if (HLConfigManager.Configurations.PaymentsConfiguration.HasPaymentGateway) { var handlers = GetPaymentGatewayResponseList(); foreach (PaymentGatewayResponse handler in handlers) { if (handler.CanProcess) { response = handler; response.CanSubmitIfApproved = response.DetermineSubmitStatus(); if (handler.LogResponses(logTheResponse)) { if (string.IsNullOrEmpty(response.errorMessage)) { if (response.AuthResultMissing) { response.errorMessage = string.Format(NoAuthResultInResponse, response.GatewayName); } } if (string.IsNullOrEmpty(response.OrderNumber)) { response.errorMessage = string.Format(NoOrderNumberInResponse, response.GatewayName); } string message = (!string.IsNullOrEmpty(response.errorMessage)) ? string.Format(ResponseHadError, response.errorMessage) : string.Empty; if (!string.IsNullOrEmpty(response.errorMessage)) { PaymentGatewayInvoker.LogBlindError(message); } else { var statusType = PaymentGatewayRecordStatusType.Unknown; if (response.IsReturning) { statusType = response.Status; if (statusType != PaymentGatewayRecordStatusType.OrderSubmitted) { statusType = (response.IsApproved) ? PaymentGatewayRecordStatusType.Approved : PaymentGatewayRecordStatusType.Declined; statusType = (response.IsPendingTransaction) ? PaymentGatewayRecordStatusType.ApprovalPending : statusType; statusType = (response.IsCancelled) ? PaymentGatewayRecordStatusType.CancelledByUser : statusType; } } else { statusType = (response.IsApproved) ? PaymentGatewayRecordStatusType.Approved : PaymentGatewayRecordStatusType.Declined; statusType = (response.IsPendingTransaction) ? PaymentGatewayRecordStatusType.ApprovalPending : statusType; statusType = (response.IsCancelled) ? PaymentGatewayRecordStatusType.CancelledByUser : statusType; statusType = (response.Status == PaymentGatewayRecordStatusType.OrderSubmitted) ? response.Status : statusType; } PaymentGatewayInvoker.LogMessageWithInfo(PaymentGatewayLogEntryType.Response, response.OrderNumber, string.Empty, response.GetType().Name.Replace("Response", string.Empty), statusType, response.WebResponse); } } } } } return(response); }