Billing Information
Overview
A simple form demonstrating how to set a customer's saved billing information, such as credit card information, using the web service.
Namespaces
The following sample requires these namespaces:
using ExigoWebService; using System.Xml.Linq; using System.Net; using System.Text; using System.IO;
Exigo API Authentication
This sample accesses the web service using the ExigoApi object:
public ExigoApi Exigo { get { return new ExigoApi { ApiAuthenticationValue = new ApiAuthentication { LoginName = exigoAPILoginName, Password = exigoAPIPassword, Company = exigoAPICompany } }; } }
jQuery
We use jQuery UI Themes for styling.
<link href="<%=this.ResolveUrl("../../Themes/start/jquery-ui.custom.css") %>" rel="stylesheet" type="text/css" /> <script src="<%=this.ResolveUrl("../../Scripts/jquery.min.js") %>" type="text/javascript"></script> <script src="<%=this.ResolveUrl("../../Scripts/jquery-ui.min.js") %>" type="text/javascript"></script>
Fetching Customer Data
We fetch the customer data using the webservice GetCustomersRequest method:
return Exigo.GetCustomers(new GetCustomersRequest { CustomerID = customerID }).Customers[0];
Populate The Country/Region Dropdown Menus
We use the webservice GetCountryRegions method to request a list of countries.
// Get the data var response = Exigo.GetCountryRegions(new GetCountryRegionsRequest() { CountryCode = countryCode });
The webservice RegionResponse method returns the requested regions.
// Populate the new regions into the dropdown foreach (RegionResponse r in response.Regions) { regionList.Items.Add(new ListItem() { Value = r.RegionCode, Text = r.RegionName }); } }
Fetching Credit Card Tokens
private string GetCreditCardToken(string creditCardNumber, int expirationMonth, int expirationYear) { XNamespace ns = "http://payments.exigo.com"; var xRequest = new XDocument( new XElement(ns + "CreditCard", new XElement(ns + "CreditCardNumber", creditCardNumber), new XElement(ns + "ExpirationMonth", expirationMonth), new XElement(ns + "ExpirationYear", expirationYear) )); var xResponse = PostRest("https://payments.exigo.com/1.0/rest/CreateCreditCardToken", exigoPaymentAPILoginName, exigoPaymentAPIPassword, xRequest); return xResponse.Root.Element(ns + "CreditCardToken").Value; } private XDocument PostRest(string url, string username, string password, XDocument element) { string postData = element.ToString(); var request = (HttpWebRequest)WebRequest.Create(url); request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(username + ":" + password))); request.Method = "POST"; request.ContentLength = postData.Length; request.ContentType = "text/xml"; var writer = new StreamWriter(request.GetRequestStream()); writer.Write(postData); writer.Close(); try { var response = (HttpWebResponse)request.GetResponse(); using (var responseStream = new StreamReader(response.GetResponseStream())) { return XDocument.Parse(responseStream.ReadToEnd()); } } catch (WebException ex) { var response = (HttpWebResponse)ex.Response; if (response.StatusCode == HttpStatusCode.Unauthorized) throw new Exception("Invalid Credentials"); using (var responseStream = new StreamReader(ex.Response.GetResponseStream())) { XNamespace ns = "http://schemas.microsoft.com/ws/2005/05/envelope/none"; XDocument doc = XDocument.Parse(responseStream.ReadToEnd()); throw new Exception(doc.Root.Element(ns + "Reason").Element(ns + "Text").Value); } } }
Update Customer Billing
To save the customer's credit card information, we use the webservice method SetAccountCreditCardTokenRequest. The form data is saved as a new credit card token.
public SetAccountResponse UpdateCustomerBilling() { // Fetch a credit card token from the Exigo Payment API string creditCardToken = GetCreditCardToken(txtCreditCardNumber.Text, Convert.ToInt32(lstCreditCardExpirationMonth.SelectedValue), Convert.ToInt32(lstCreditCardExpirationYear.SelectedValue)); SetAccountCreditCardTokenRequest request = new SetAccountCreditCardTokenRequest(); request.CustomerID = customerID; // Credit Card Information request.CreditCardToken = creditCardToken; request.BillingName = txtBillingName.Text; request.ExpirationMonth = Convert.ToInt32(lstCreditCardExpirationMonth.SelectedValue); request.ExpirationYear = Convert.ToInt32(lstCreditCardExpirationYear.SelectedValue); request.CreditCardAccountType = creditCardAccountType; // Billing Address Information request.BillingAddress = txtBillingAddress.Text; request.BillingCity = txtBillingCity.Text; request.BillingState = lstBillingState.SelectedValue.ToString(); request.BillingZip = txtBillingZip.Text; request.BillingCountry = lstBillingCountry.SelectedValue.ToString(); return Exigo.SetAccountCreditCardToken(request); }