internal HpEcommerce.messages.Reversal sendReversalRequest(ReversalRequest request)
 {
     HttpWebResponse response = client.sendPostRequest(UrlGenerator.getReversalUrl(CardAcceptor, Environment), HpXmlSerializer.getMessage(typeof(ReversalRequest), request), SharedSecret);
     if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Forbidden)
     {
         return HpXmlSerializer.convertReversal(getResponsestring(response));
     }
     else
     {
         throw new HpServerError("Reversal declined.", HpXmlSerializer.convertErrorMessage(getResponsestring(response)));
     }
 }
        private static string validateReversalRequest(ReversalRequest request)
        {
            StringBuilder validationErrors = new StringBuilder();
            if (!isValidReversalRequest(request))
            {
                validationErrors.Append("Request has invalid data. It must have either authorization guid, payment guid or refund guid");
            }

            if (validationErrors.Length == 0)
            {
                return null;
            }
            else
            {
                return validationErrors.ToString();
            }
        }
        internal static ReversalRequest reversalRequest(string authorizationGuid, string paymentGuid, string refundGuid, string cusomterReference)
        {
            ReversalRequest reversalRequest = new ReversalRequest();
            reversalRequest.AuthorizationGuid = authorizationGuid;
            reversalRequest.PaymentGuid = paymentGuid;
            reversalRequest.RefundGuid = refundGuid;
            reversalRequest.CustomerReference = cusomterReference;
            string validationErrors = validateReversalRequest(reversalRequest);
            if (validationErrors != null)
            {
                throw new HpECommerceException("Message failed validation \n" + validationErrors);
            }

            return reversalRequest;
        }
 private static bool isValidReversalRequest(ReversalRequest message)
 {
     return message.AuthorizationGuid != null || message.PaymentGuid != null || message.RefundGuid != null;
 }