REST example XML in CSharp

//Example created VS2010 using 4.0 framework but shouldn't matter.  Nothing exotic here.

//Disclaimer:  This worked for me but I don't profess to be a coding guru.  Not optimised and I don't work for E-xact.

//don't forget to include XML

using System.XML

public void request CC(object sender, EventArgs e)

{

 

 

String post_url = "https://api-demo.e-xact.com/transaction";  //<----"https://api.e-xact.com/transaction" for non demo
            String strFirstName = "";
            String strLastName = "";
            String StrCreditCardNumber = "";
            String strAmount = "";
            String encoded="";
            String redirectUrl = "";
            strFirstName = TextBoxFirstName.Text;
            strLastName = TextBoxLastName.Text;
            StrCreditCardNumber = TextBoxCCNum.Text;
            strAmount = TBAmount.Text;

            //Create the request Transaction.  Form(nodes)will depend on transaction type
            XmlDocument requestXML = new XmlDocument();
            XmlNode docNode = requestXML.CreateXmlDeclaration("1.0", "UTF-8", null);
            requestXML.AppendChild(docNode);

            XmlNode transactionNode = requestXML.CreateElement("Transaction");
            requestXML.AppendChild(transactionNode);
           
            XmlNode node = requestXML.CreateElement("ExactID");
            node.InnerText = "ADXXXX-01";
            transactionNode.AppendChild(node);
            node = requestXML.CreateElement("Password");
            node.InnerText = "password";
            transactionNode.AppendChild(node);
           
           
            //Request Type.  Set to blank which is default for CC request and capture
            node = requestXML.CreateElement("Transaction_Type");
            node.InnerText = "00";
            transactionNode.AppendChild(node);
            //Amount
            node = requestXML.CreateElement("DollarAmount");
            node.InnerText = HttpUtility.UrlEncode(strAmount); //DD.CC
            transactionNode.AppendChild(node);
            //Card Number
            node = requestXML.CreateElement("Card_Number");
            node.InnerText = StrCreditCardNumber; //4111111111111111
            transactionNode.AppendChild(node);
            //Expiry
            node = requestXML.CreateElement("Expiry_Date");
            node.InnerText = ListBox1.SelectedValue + ListBox2.SelectedValue; //MMYY
            transactionNode.AppendChild(node);
            //Cardholders Name
            node = requestXML.CreateElement("CardHoldersName");
            node.InnerText = strFirstName+" "+ strLastName;  //Go Canucks
            transactionNode.AppendChild(node);
            /*
            //CVV
            node = requestXML.CreateElement("VerificationStr2");
            node.InnerText = TextBoxCCV.Text;
            transactionNode.AppendChild(node);
            //CVV
            node = requestXML.CreateElement("CVD_Presence_Ind");
            node.InnerText = "1";
            transactionNode.AppendChild(node);
            */
            //convert to XML string
            string post_string = requestXML.OuterXml;
           
  //if you want basic authentication instead of sending ID and Pass in message body
            // create an HttpWebRequest object to communicate with E-xact
            byte[] encbuff = System.Text.Encoding.UTF8.GetBytes("ADXXXX-01:password");
            encoded = Convert.ToBase64String(encbuff);

            HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(post_url);
            objRequest.Method = "POST";
            //objRequest.Accept = "application/xml; charset=utf-8";
            objRequest.ContentLength = post_string.Length;
            objRequest.ContentType = "application/xml";
            //objRequest.Headers["Authorization"] = "Basic " + encoded; //if you want basic authentication  //don't do both Authenticate OR xml body

            // post data is sent as a stream
            StreamWriter myWriter = null;
            myWriter = new StreamWriter(objRequest.GetRequestStream());
            myWriter.Write(post_string);
            myWriter.Close();

          
            // returned values are returned as a stream, then read into a string
            String post_response;
            try
            {
                HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
                using (StreamReader responseStream = new StreamReader(objResponse.GetResponseStream()))
                {
                    post_response = responseStream.ReadToEnd();
                    responseStream.Close();
                }
                //if post response is XML
                System.Xml.XmlDocument doc = new XmlDocument();
                doc.LoadXml(post_response);
               
  //get data for response
                XmlNode root = doc.DocumentElement;

                XmlNode responseParser = root.SelectSingleNode("Transaction_Approved");
                if (responseParser.InnerText.Equals("true"))
                {
                    responseParser = root.SelectSingleNode("Authorization_Num");
                    string strAuthNum = responseParser.InnerText;
                    responseParser = root.SelectSingleNode("DollarAmount");
                    string amount = responseParser.InnerText;
                   
                }
                else
                {
                    responseParser = root.SelectSingleNode("Bank_Message");
                    string serverMessage = responseParser.InnerText;
                }
               
            }

}

Have more questions? Submit a request

0 Comments

Please sign in to leave a comment.
Powered by Zendesk