Tuesday 23 July 2013

Implementing credit card payment in your app

Introduction:

Hi Everyone, Here I am putting sample code for card payment. You can use it in your code and can implement the payment module in your project. API that I am using it will return the response in XML format. Use your API and enjoy. Hope it can help you.

Card payment sample code:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.Serialization;
using System.Net;
using System.IO;
using System.Xml;

using System.Text;
using System.Data;
using System.Configuration;

using ModelLayer;
using DataAccessLayer;

namespace BusinessLayer
{
    public class AccountInfo:IDisposable
    {
        XmlDocument objXmlDocument;//declare XmlDocument to store xml document
        //default constructor
        public AccountInfo()
        {
            //code
        }
        //parametric constructor accepting LoginDetail class from model layer as a signature
        public AccountInfo(LoginDetails objLogin)
        {
            //Calling GetAccntInfo() method
            GetAccntInfo(objLogin);
        }


        void GetInfo(LoginClass objLogin)
        {
           
                //url containing the web service api which will return document in the xml format
                string uri = objLogin.BaseURL + string.Format(@"/accntinfo?apikey={0}&accntID={1}", objLogin.APIKey, objLogin.AccountID);

                //We are creating new url and sending to HttpWebRequest
                HttpWebRequest objHttpWebRequest = WebRequest.Create(uri) as HttpWebRequest;
                //Getting response from HttpWebRequest
                HttpWebResponse objHttpWebResponse = objHttpWebRequest.GetResponse() as HttpWebResponse;
                //Putting response in the form of stream to the StreamReader
                using (StreamReader objStreamReader = new StreamReader(objHttpWebResponse.GetResponseStream()))
                {
                    objXmlDocument = new XmlDocument();
                    //reading the stream
                    using (XmlTextReader objXmlTextReader = new XmlTextReader(objStreamReader))
                    {
                        objXmlTextReader.Namespaces = false;
                        //Loading xml document with the data got from the stream
                        objXmlDocument.Load(objXmlTextReader);
                    }
                }
  
        }


        public DataTable FetchData(AccDetails objAccInfo)
        {
                //declaring the data columns name and their types for the table to store data in it
                DataColumn[] dcGuarantor = new DataColumn[8];
                dcGuarantor[0] = new DataColumn("FirstName", typeof(string));
                dcGuarantor[1] = new DataColumn("LastName", typeof(string));
                dcGuarantor[2] = new DataColumn("Addr1", typeof(string));
                dcGuarantor[3] = new DataColumn("Addr2", typeof(string));
                dcGuarantor[4] = new DataColumn("City", typeof(string));
                dcGuarantor[5] = new DataColumn("StateProvinceRegion", typeof(string));
                dcGuarantor[6] = new DataColumn("ZipPostalCode", typeof(string));
                dcGuarantor[7] = new DataColumn("AccntRef", typeof(string));
               
                dtGuarantor.Columns.AddRange(dcGuarantor);//Add columns into table
                //selecting a perticular node from the xml document to read data from its nodes
                XmlNodeList nodes = objXmlDocument.SelectNodes("/Account/Guarantor");
                foreach (XmlNode node in nodes)
                {
                    objAccountInfo.GuarantorFirstName = node.SelectSingleNode("FirstName").InnerText;
                    objAccountInfo.GuarantorLastName = node.SelectSingleNode("LastName").InnerText;
                    objAccountInfo.GuarantorAddress1 = node.SelectSingleNode("Addr1").InnerText;
                    objAccountInfo.GuarantorAddress2 = node.SelectSingleNode("Addr2").InnerText;
                    objAccountInfo.GuarantorCity = node.SelectSingleNode("City").InnerText;
                    objAccountInfo.GuarantorStateProvinceRegion = node.SelectSingleNode("StateProvinceRegion").InnerText;
                    objAccountInfo.GuarantorZipPostalCode = node.SelectSingleNode("ZipPostalCode").InnerText;
                    objAccountInfo.GuarantorAccountRef = node.SelectSingleNode("AccntRef").InnerText;
                    //loading data into the datarow
                    dtGuarantor.LoadDataRow(new object[]{ objAccountInfo.GuarantorFirstName, objAccountInfo.GuarantorLastName, objAccountInfo.GuarantorAddress1,
                    objAccountInfo.GuarantorAddress2, objAccountInfo.GuarantorCity,objAccountInfo.GuarantorStateProvinceRegion,
                objAccountInfo.GuarantorZipPostalCode,objAccountInfo.GuarantorAccountRef}, false);
                }

            }
            return dtGuarantor;//returns table object
        }


  
        string PostPaymentResponse(GetDetails objGetDetails)
        {
            string refkey = "";
            //creating instance of the string builder class to hold the tracing data
            StringBuilder objStringBuilder = new StringBuilder();
            //append tracing into string builder
            objStringBuilder.Append("Entered into the function :PostPaymentResponse ");
            try
            {
                //objGetDetails.AccountID = "testing invalid account abcd";
               
                string uri = objGetDetails.BaseURL + string.Format(@"/pymt?apikey={0}&accntID={1}", objGetDetails.APIKey, objGetDetails.AccountID);

                // build XML body to POST
                XmlDocument objXmlDocument = CreatePostPaymentXMLDoc(objGetDetails);

                // POST xml to webservice
                byte[] bytes = System.Text.Encoding.Default.GetBytes(objXmlDocument.OuterXml);

                WebClient objWebClient = new WebClient();
               
                objWebClient.Headers.Add("Content-Type", "application/xml");        //Adding header to webclient
                byte[] response = objWebClient.UploadData(uri, "POST", bytes);      //uploading data

                Stream objStream = new MemoryStream(response);                      //getting response from POST

                DataContractSerializer obj = new DataContractSerializer(typeof(string));

                refkey = obj.ReadObject(objStream).ToString();                      // email reference ID to user

                objWebClient.Dispose();
                objStream.Dispose();
                //append tracing into string builder
                objStringBuilder.Append("Exited from the function :PostPaymentResponse ");
                //writing trace log into the log file
                LogManager.WriteTraceLog(objStringBuilder);
            }
            catch (Exception ex)
            {
                //Write error log into log file.
                LogManager.WriteErrorLog(ex);
                throw;
            }
            finally
            {
                //nullify the string builder object.
                objStringBuilder = null;
            }
            return refkey;
        }

        public XmlDocument CreatePostPaymentXMLDoc(GetDetails objGetDetails)
        {
            // new XML doc
            XmlDocument xmlDoc = new XmlDocument();

                XmlElement pymt = xmlDoc.CreateElement("Payment");
                xmlDoc.AppendChild(pymt);
                pymt.Attributes.Append(pymt.OwnerDocument.CreateAttribute("xmlns"));
                //pymt.Attributes["xmlns"].Value = @"http://schemas.datacontract.org/2004/07/testAPI";
                pymt.Attributes["xmlns"].Value = objGetDetails.PostXMLSchema;

                // RefID - passed to TransFirst as the User Unique Order Number
                // this is the "RefID" element found Account
                //
                XmlElement refID = xmlDoc.CreateElement("RefID");
                refID.InnerText = objGetDetails.RefID;
                pymt.AppendChild(refID);

                // TransactionID - ID return from TransFirst
                XmlElement transID = xmlDoc.CreateElement("TransactionID");
                transID.InnerText = objGetDetails.TransactionID;
                pymt.AppendChild(transID);

                // masked pattern Credit Card Num
                XmlElement ccNum = xmlDoc.CreateElement("CCNum");
                ccNum.InnerText = objGetDetails.CardNumber;
                pymt.AppendChild(ccNum);

                // Credit Card Code: MC, VI, AX, DC
                // Codes from Account
                XmlElement ccCode = xmlDoc.CreateElement("CCCode");
                ccCode.InnerText = objGetDetails.CardCode;
                pymt.AppendChild(ccCode);

                // Credit Card holder name
                XmlElement ccName = xmlDoc.CreateElement("CCName");
                ccName.InnerText = objGetDetails.FirstName + " " + objGetDetails.LastName;
                pymt.AppendChild(ccName);

                // Authorization Number return from TransFirst
                XmlElement authNum = xmlDoc.CreateElement("AuthorizationNum");
                authNum.InnerText = objGetDetails.AuthorizationNumber;
                pymt.AppendChild(authNum);

                // Total Amount paid
                XmlElement amt = xmlDoc.CreateElement("Amount");
                amt.InnerText = objGetDetails.TotalAmount;
                pymt.AppendChild(amt);

                // individual payments on invoice(s)
                XmlElement invPymts = xmlDoc.CreateElement("InvoicePymts");

                IDictionaryEnumerator objIDictionaryEnumerator =
                            objGetDetails.TransactionAmountPerInvoice.GetEnumerator();   //retreiving values from hashtable into IDictionaryEnumerator
                while (objIDictionaryEnumerator.MoveNext())                             //checking if IDictionaryEnumerator has records
                {
                    XmlElement invoice = xmlDoc.CreateElement("InvoicePymt");
                    invPymts.AppendChild(invoice);

                    // invoice number
                    XmlElement invNum = xmlDoc.CreateElement("InvoiceNum");
                    invNum.InnerText = objIDictionaryEnumerator.Key.ToString();
                    invoice.AppendChild(invNum);

                    // amount paid on invoice num
                    XmlElement invAmt = xmlDoc.CreateElement("InvoiceAmt");
                    invAmt.InnerText = objIDictionaryEnumerator.Value.ToString();
                    invoice.AppendChild(invAmt);
                }

                pymt.AppendChild(invPymts);
               
                // Email confirmation
                XmlElement emailcnfrm = xmlDoc.CreateElement("EmailConfirm");
                emailcnfrm.InnerText = objGetDetails.EmailConfirmation;
                pymt.AppendChild(emailcnfrm);

            return xmlDoc;
        }

}

No comments:

Post a Comment