public void MockPurchaseRequest()
        {
            PurchaseTransactionRequest purchaseTransactionRequest = new PurchaseTransactionRequest();

            // Action should be derived.
            purchaseTransactionRequest.action = "1";
            // user and pass should be from DB - should also be set in the PerformPaymentTransaction method
            purchaseTransactionRequest.terminalid = "CMVAUL1";
            purchaseTransactionRequest.password   = "******";

            purchaseTransactionRequest.card         = "4444444444444444";
            purchaseTransactionRequest.cvv2         = "115";
            purchaseTransactionRequest.expYear      = "2012";
            purchaseTransactionRequest.expMonth     = "12";
            purchaseTransactionRequest.member       = "Test User";
            purchaseTransactionRequest.currencyCode = "USD";
            purchaseTransactionRequest.address      = "Ebene";
            purchaseTransactionRequest.city         = "MOKA";
            purchaseTransactionRequest.stateCode    = "MOKA";
            purchaseTransactionRequest.zip          = "152458";
            purchaseTransactionRequest.countryCode  = "Mauritius";
            purchaseTransactionRequest.Email        = "*****@*****.**";
            purchaseTransactionRequest.amount       = "0.00";
            purchaseTransactionRequest.trackid      = "soft1256";

            PurchaseTransactionResponse ptRes = this.PerformPaymentTransaction(purchaseTransactionRequest);

            Console.WriteLine("authcode [" + ptRes.authcode + "]");
            Console.WriteLine("responsecode [" + ptRes.responsecode + "]");
            Console.WriteLine("result [" + ptRes.result + "]");
            Console.WriteLine("terminalid [" + ptRes.terminalid + "]");
            Console.WriteLine("trackid [" + ptRes.trackid + "]");
            Console.WriteLine("tranid [" + ptRes.tranid + "]");
            Console.WriteLine("udf1 [" + ptRes.udf1 + "]");
            Console.WriteLine("udf2 [" + ptRes.udf2 + "]");
            Console.WriteLine("udf3 [" + ptRes.udf3 + "]");
            Console.WriteLine("udf4 [" + ptRes.udf4 + "]");
            Console.WriteLine("udf5 [" + ptRes.udf5 + "]");
            string myKey = Console.ReadLine();
        }
        public PurchaseTransactionResponse PerformPaymentTransaction(PurchaseTransactionRequest requestTx)
        {
            // Get URL from Config
            // Do DB lookup here. Currently hard-coded
            string paymentGatewayURL = "http://test.soft-connect.biz/DirectTransaction.aspx"; //https://secure.soft-connect.biz/DirectTransaction.aspx;

            // Create a request for the URL.
            WebRequest request = WebRequest.Create(paymentGatewayURL);

            // If required by the server, set the credentials.
            request.Credentials = CredentialCache.DefaultCredentials;

            // Set the request Method
            request.Method = "POST";

            // Serialize request

            XmlSerializer xmlSerializer = new XmlSerializer(requestTx.GetType());
            StringWriter  textWriter    = new StringWriter();

            // For testing
            xmlSerializer.Serialize(Console.Out, requestTx);

            xmlSerializer.Serialize(textWriter, requestTx);
            string postData = textWriter.ToString();

            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            // Set the ContentType property of the WebRequest.
            request.ContentType = "text/xml";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length;
            // Get the request stream.
            Stream dataStream = request.GetRequestStream();

            // Write the data to the request stream.
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Close the Stream object.
            dataStream.Close();

            // Get the response.
            WebResponse response = request.GetResponse();

            // Display the status.
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);

            PurchaseTransactionResponse purchaseTransactionResponse;
            XmlSerializer deserializer = new XmlSerializer(typeof(PurchaseTransactionResponse));

            // Call the Deserialize method and cast to the object type.
            purchaseTransactionResponse = (PurchaseTransactionResponse)deserializer.Deserialize(reader);

            // Clean up the streams.
            reader.Close();
            dataStream.Close();
            response.Close();

            return(purchaseTransactionResponse);
        }
        public PurchaseTransactionResponse DoPayment(PurchaseTransactionRequest requestTx, string paymentGatewayURL)
        {
            // Build the data string
            StringBuilder sb_purchase_data = new StringBuilder();

            sb_purchase_data.Append(string.Format("CO_ID={0}", requestTx.CO_ID));
            sb_purchase_data.Append(string.Format("&OUTLET={0}", requestTx.OUTLET));
            sb_purchase_data.Append(string.Format("&Reference={0}", requestTx.Reference));
            sb_purchase_data.Append(string.Format("&CC_Amount={0}", requestTx.CC_Amount));
            sb_purchase_data.Append(string.Format("&CCName={0}", requestTx.CCName));
            sb_purchase_data.Append(string.Format("&CCNumber={0}", requestTx.CCNumber));
            sb_purchase_data.Append(string.Format("&ExYear={0}", requestTx.ExYear));
            sb_purchase_data.Append(string.Format("&ExMonth={0}", requestTx.ExMonth));
            sb_purchase_data.Append(string.Format("&CCCVV={0}", requestTx.CCCVV));

            if (requestTx.Consistent != "")
            {
                sb_purchase_data.Append(string.Format("&Consistent={0}", requestTx.Consistent));
            }

            // Optional SETCOM fields
            if (requestTx.MobileNumber != "")
            {
                sb_purchase_data.Append(string.Format("&MobileNumber={0}", requestTx.MobileNumber));
            }

            if (requestTx.MobileNumber != "")
            {
                sb_purchase_data.Append(string.Format("&buyer_id={0}", requestTx.buyer_id));
            }

            if (requestTx.bill_first_name != "")
            {
                sb_purchase_data.Append(string.Format("&bill_first_name={0}", requestTx.bill_first_name));
            }

            if (requestTx.bill_last_name != "")
            {
                sb_purchase_data.Append(string.Format("&bill_last_name={0}", requestTx.bill_last_name));
            }

            if (requestTx.bill_phone != "")
            {
                sb_purchase_data.Append(string.Format("&bill_phone={0}", requestTx.bill_phone));
            }

            if (requestTx.bill_street1 != "")
            {
                sb_purchase_data.Append(string.Format("&bill_street1={0}", requestTx.bill_street1));
            }

            if (requestTx.bill_street2 != "")
            {
                sb_purchase_data.Append(string.Format("&bill_street2={0}", requestTx.bill_street2));
            }

            if (requestTx.bill_state != "")
            {
                sb_purchase_data.Append(string.Format("&bill_state={0}", requestTx.bill_state));
            }

            if (requestTx.bill_zip != "")
            {
                sb_purchase_data.Append(string.Format("&bill_zip={0}", requestTx.bill_zip));
            }

            if (requestTx.bill_city != "")
            {
                sb_purchase_data.Append(string.Format("&bill_city={0}", requestTx.bill_city));
            }

            if (requestTx.bill_country != "")
            {
                sb_purchase_data.Append(string.Format("&bill_country={0}", requestTx.bill_country));
            }

            if (requestTx.bill_title != "")
            {
                sb_purchase_data.Append(string.Format("&bill_title={0}", requestTx.bill_title));
            }

            if (requestTx.EmailAddress != "")
            {
                sb_purchase_data.Append(string.Format("&EmailAddress={0}", requestTx.EmailAddress));
            }

            if (requestTx.ip_address != "")
            {
                sb_purchase_data.Append(string.Format("&ip_address={0}", requestTx.ip_address));
            }

            byte[] postData = Encoding.UTF8.GetBytes(sb_purchase_data.ToString());

            // Create a request for the URL.
            WebRequest request = WebRequest.Create(paymentGatewayURL);

            //request.Proxy = new WebProxy("127.0.0.1", 8888); // for debugging with fiddler
            // Set the request Method
            request.Method = "POST";
            // If required by the server, set the credentials.
            //request.Credentials = CredentialCache.DefaultCredentials;

            // Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = postData.Length;

            // Get the request stream.
            Stream dataStream = request.GetRequestStream();

            // Write the data to the request stream.

            dataStream.Write(postData, 0, postData.Length);
            // Close the Stream object.
            dataStream.Close();

            // Get the response.
            WebResponse response = request.GetResponse();

            // Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream();

            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);

            string serverResponse = reader.ReadToEnd();

            reader.Close();
            string[] TrimStrings  = serverResponse.Split(',');
            string   ReturnString = string.Empty;

            for (int i = 0; i < TrimStrings.Length; i++)
            {
                if (i != TrimStrings.Length - 1)
                {
                    ReturnString = ReturnString + TrimStrings[i].Trim() + ",";
                }
                else
                {
                    ReturnString = ReturnString + TrimStrings[i].Trim();
                }
            }

            /*------------Handling purchase response------------*/
            List <string> ReturnedList = new List <string>(ReturnString.ToString().Split(','));

            PurchaseTransactionResponse purchaseTransactionResponse = new PurchaseTransactionResponse();

            purchaseTransactionResponse.outcome            = ReturnedList[0];
            purchaseTransactionResponse.responseIndicator  = ReturnedList[1];
            purchaseTransactionResponse.transactionDate    = ReturnedList[2];
            purchaseTransactionResponse.transactionTime    = ReturnedList[3];
            purchaseTransactionResponse.transactionOrderID = ReturnedList[4];
            purchaseTransactionResponse.merchantReference  = ReturnedList[5];
            purchaseTransactionResponse.transactionAmount  = ReturnedList[6];

            // Clean up the streams.
            reader.Close();
            dataStream.Close();
            response.Close();
            return(purchaseTransactionResponse);
        }