internal HpEcommerce.messages.Authorization sendAuthorizationRequest(AuthorizationRequest request)
 {
     HttpWebResponse response = client.sendPostRequest(UrlGenerator.getAuthorizationUrl(CardAcceptor, Environment), HpXmlSerializer.getMessage(typeof(AuthorizationRequest), request), SharedSecret);
     if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Forbidden)
     {
         return HpXmlSerializer.convertAuthorization(getResponsestring(response));
     }
     else
     {
         throw new HpServerError("Authorization declined.", HpXmlSerializer.convertErrorMessage(getResponsestring(response)));
     }
 }
        internal static AuthorizationRequest authorizationRequest(string paymentScenario, string currency, string amount,
                                                            string token, string cardNumber, string expiryDateMMYY,
                                                            string cardVerificationCode, string customerReference)
        {
            AuthorizationRequest authorizationRequest = new AuthorizationRequest();
            authorizationRequest.PaymentScenario = paymentScenario;
            authorizationRequest.Currency = currency;
            authorizationRequest.Amount = amount;
            authorizationRequest.Token = token;
            authorizationRequest.CardNumber = cardNumber;
            authorizationRequest.ExpiryDateMMYY = expiryDateMMYY;
            authorizationRequest.CardVerificationCode = cardVerificationCode;
            authorizationRequest.CustomerReference = customerReference;

            string validationErrors = validateAuthorizationRequest(authorizationRequest);
            if (validationErrors != null)
            {
                throw new HpECommerceException("Message failed validation \n" + validationErrors);
            }

            return authorizationRequest;
        }
        private static string validateAuthorizationRequest(AuthorizationRequest request)
        {
            StringBuilder validationErrors = new StringBuilder();
            ValidateCommonFields(request, validationErrors);
            if (!hasValidAuthorizationCardData(request))
            {
                validationErrors.Append("Request has invalid card data. It must have either Card Number and Expiry date or Token");
            }

            if (validationErrors.Length == 0)
            {
                return null;
            }
            else
            {
                return validationErrors.ToString();
            }
        }
 private static bool hasValidAuthorizationCardData(AuthorizationRequest message)
 {
     return (message.CardNumber != null && message.ExpiryDateMMYY != null) || message.Token != null;
 }