The First Data Global Gateway e4℠ web service API is a web service that allows third-party applications to process transactions through the Global Gateway e4℠ system.
To use this API we need to create a test account on the First Data website
You can create the account by the following link :
Once, you create the demo account you will have three terminal in your account.
Now , to use the Rest API you need the following things :
GatewayId or ExactID and Password
To see the GatewayId and Password : Administration --> Terminals --> Click on any terminal --> Details and you will see the GatewayId and Password
to see the password click on Generate hyperlink.
KeyId and HMAC Key
For KeyId and HMAC Key go to Administration --> Terminals --> Click on terminal (from where we took the GatewayId and Password) --> API Access
you can generate the new key from "Generate New Key"
GatewayURL
If you are using the demo account then GatewayUrl will be "https://api.demo.globalgatewaye4.firstdata.com/transaction/v12"
and if you are using the production account then GatewayUrl will be "https://api.globalgatewaye4.firstdata.com/transaction/v12"
you can use any version here i am taking v12.
Code for using API
Write the following code
StringBuilder string_builder = new StringBuilder();
using (StringWriter string_writer = new StringWriter(string_builder))
{
using (XmlTextWriter xml_writer = new XmlTextWriter(string_writer))
{ //build XML string
xml_writer.Formatting = Formatting.Indented;
xml_writer.WriteStartElement("Transaction");
xml_writer.WriteElementString("ExactID", "******-**");//Your Gateway ID
xml_writer.WriteElementString("Password", "********");//Password
xml_writer.WriteElementString("Transaction_Type", "00");
xml_writer.WriteElementString("DollarAmount", "0.25");
xml_writer.WriteElementString("Expiry_Date", "1214");
xml_writer.WriteElementString("CardHoldersName", "xyz");
xml_writer.WriteElementString("Card_Number", "4111111111111111");// demo account validate this card number
xml_writer.WriteElementString("VerificationStr2", "123");
xml_writer.WriteEndElement();
String xml_string = string_builder.ToString();
//SHA1 hash on XML string
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] xml_byte = encoder.GetBytes(xml_string);
SHA1CryptoServiceProvider sha1_crypto = new SHA1CryptoServiceProvider();
string hash = BitConverter.ToString(sha1_crypto.ComputeHash(xml_byte)).Replace("-", "");
string hashed_content = hash.ToLower();
//assign values to hashing and header variables
string method = "POST\n";
string type = "application/xml\n";//REST XML
string time = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");
string url = "/transaction/v12";
string keyID = "*****";//your key ID
string key = "****************************";//your Hmac key
string hash_data = method + type + hashed_content + "\n" + time + "\n" + url;
//hmac sha1 hash with key + hash_data
HMAC hmac_sha1 = new HMACSHA1(Encoding.UTF8.GetBytes(key)); //key
byte[] hmac_data = hmac_sha1.ComputeHash(Encoding.UTF8.GetBytes(hash_data)); //data
//base64 encode on hmac_data
string base64_hash = Convert.ToBase64String(hmac_data);
//string uri = "https://api.globalgatewaye4.firstdata.com/transaction/v12"; //production API Endpoint
string uri = "https://api.demo.globalgatewaye4.firstdata.com/transaction/v12";// demo api endpoint
//begin HttpWebRequest
HttpWebRequest web_request = (HttpWebRequest)WebRequest.Create(uri);
web_request.Method = "POST";
web_request.Accept = "application/xml";
web_request.Headers.Add("x-gge4-date", time);
web_request.Headers.Add("x-gge4-content-sha1", hashed_content);
web_request.ContentLength = xml_string.Length;
web_request.ContentType = "application/xml";
web_request.Headers["authorization"] = "GGE4_API " + keyID + ":" + base64_hash;
// send request as stream
StreamWriter xml = null;
xml = new StreamWriter(web_request.GetRequestStream());
xml.Write(xml_string);
xml.Close();
//get response and read into string
string response_string;
try
{
HttpWebResponse web_response = (HttpWebResponse)web_request.GetResponse();
using (StreamReader response_stream = new StreamReader(web_response.GetResponseStream()))
{
response_string = response_stream.ReadToEnd();
response_stream.Close();
}
//load xml
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(response_string);
XmlNodeList nodelist = xmldoc.SelectNodes("TransactionResult");
var Retrieval_Ref_No = string.Empty;
var SequenceNo = string.Empty;
var Transaction_Approved = string.Empty;
var EXact_Resp_Code = string.Empty;
var Bank_Message = string.Empty;
var BankErrorMessage = string.Empty;
foreach (XmlNode item1 in nodelist)
{
foreach (XmlNode item in item1.ChildNodes)
{
if (item.Name.Equals("Retrieval_Ref_No"))
{
Retrieval_Ref_No = item.InnerText;
}
if (item.Name.Equals("SequenceNo"))
{
SequenceNo = item.InnerText;
}
if (item.Name.Equals("Transaction_Approved"))
{
Transaction_Approved = item.InnerText;
}
if (item.Name.Equals("EXact_Resp_Code"))
{
EXact_Resp_Code = item.InnerText;
}
if (item.Name.Equals("Bank_Message"))
{
Bank_Message = item.InnerText;
if (Bank_Message != "Approved")
{
BankErrorMessage = Bank_Message;
}
}
}
}
//bind XML source DataList control
//DataList1.DataSource = nodelist;
//DataList1.DataBind();
//output raw XML for debugging
//request_label.Text = web_request.Headers.ToString() + HttpUtility.HtmlEncode(xml_string);
//response_label.Text = web_response.Headers.ToString() + HttpUtility.HtmlEncode(response_string);
}
catch (WebException ex)
{
if (ex.Response != null)
{
using (HttpWebResponse error_response = (HttpWebResponse)ex.Response)
{
using (StreamReader reader = new StreamReader(error_response.GetResponseStream()))
{
string remote_ex = reader.ReadToEnd();
//error.Text = remote_ex;
}
}
}
}
}
}
For more detail go through the
You can download the solution from the following link :