/// <summary>
        /// Process a payment transaction
        /// </summary>
        /// <param name="request">A PayPalRequest object containing the information to process.</param>
        /// <returns>A PayPalResponse object with the payment gateway's response.</returns>
        public CreditCardSaleResponse ProcessTransaction(CreditCardSaleRequest request)
        {
            CreditCardSaleResponse response = new CreditCardSaleResponse();

            PayflowNETAPI payflowNetApi = new PayflowNETAPI(request.HostAddress, request.HostPort, request.TimeOut);
            string apiResponse = payflowNetApi.SubmitTransaction(request.ParmList.ToString(),PayflowUtility.RequestId);
            response = ParseApiResponse(apiResponse);

            return response;
        }
        /// <summary>
        /// Parse a string response from PayPal into the PayPalResponse object.
        /// </summary>
        /// <param name="apiResponse">PayPal's API response</param>
        /// <returns>Our PayPalResponse Service object.</returns>
        private CreditCardSaleResponse ParseApiResponse(string apiResponse)
        {
            CreditCardSaleResponse response = new CreditCardSaleResponse();

            Dictionary<string, string> responseDictionary = new Dictionary<string, string>();
            string[] splitResponse = apiResponse.Split('&');
            foreach (string s in splitResponse)
            {
                string[] pair = s.Split('=');
                responseDictionary.Add(pair[0], pair[1]);
            }

            string output = "";
            responseDictionary.TryGetValue("PNREF", out output);
            response.Pnref = output;

            output = "";
            responseDictionary.TryGetValue("PPREF", out output);
            response.Ppref = output;

            output = "";
            responseDictionary.TryGetValue("RESULT", out output);
            response.Result = output;

            output = "";
            responseDictionary.TryGetValue("CVV2MATCH", out output);
            response.Cvv2Match = output;

            output = "";
            responseDictionary.TryGetValue("RESPMSG", out output);
            response.RespMsg = output;

            output = "";
            responseDictionary.TryGetValue("AUTHCODE", out output);
            response.AuthCode = output;

            output = "";
            responseDictionary.TryGetValue("AVSADDR", out output);
            response.AvsAddr = output;

            output = "";
            responseDictionary.TryGetValue("AVSZIP", out output);
            response.AvsZip = output;

            output = "";
            responseDictionary.TryGetValue("IAVS", out output);
            response.Iavs = output;

            output = "";
            responseDictionary.TryGetValue("PROCAVS", out output);
            response.ProcAvs = output;

            output = "";
            responseDictionary.TryGetValue("PROCCVV2", out output);
            response.ProcCvv2 = output;

            output = "";
            responseDictionary.TryGetValue("CORRELATIONID", out output);
            response.CorrelationId = output;

            output = "";
            responseDictionary.TryGetValue("AMEXID", out output);
            response.AmexId = output;

            output = "";
            responseDictionary.TryGetValue("AMEXPOSDATA", out output);
            response.AmexPosData = output;

            return response;
        }