Payment Technology Blog

Explore our modern gateway designed to help you sell more, make more and keep more.

Friday, June 25, 2010

How To: Integrate Credit Card and ACH (e-check) with ColdFusion

This is the (long awaited) sixth part in a series (sorry that this one is out of order!) of postings on how to integrate credit card and ACH/E-check transactions into various systems. This installment demonstrates code used for processing payments (credit card and/or ACH) within a ColdFusion application.

This was taken from the NELiX TransaX FleXport toolkit documentation. Credit card integration examples can be downloaded on the NELiX TransaX FleXport page.

Assumptions:
- Using NELiX TransaX Payment Gateway
- Communicating using NELiX TransaX Webservice
  
params = {TransactionType = 'auth',
GatewayUserName = FORM.GatewayUserName,
GatewayPassword = FORM.GatewayPassword,
IPAddress = CGI.REMOTE_ADDR,
//Merchant_Defined_Field_1 = FORM.Merchant_Defined_Field_1,
//Merchant_Defined_Field_2 = FORM.Merchant_Defined_Field_2,
PaymentType = FORM.PaymentType,
Customer_Vault_Action = 'add_customer',
//Customer_Vault_ID = FORM.Customer_Vault_ID,
CCNumber = FORM.CCNumber,
CCExpDate = FORM.CCExpDate,
CVV = FORM.CVV,
CheckName = FORM.CheckName,
CheckABA = FORM.CheckABA,
CheckAccount = FORM.CheckAccount,
AccountHolderType = FORM.AccountHolderType,
AccountType = FORM.AccountType,
SecCode = FORM.SecCode,
Amount = '1',

OrderDescription = FORM.OrderDescription,

//PONumber = FORM.PONumber,
FirstName = FORM.FirstName,
LastName = FORM.LastName,
Company = FORM.Company,
Address1 = FORM.Address1,
Address2 = FORM.Address2,
City = FORM.City,
State = FORM.State,
Zip = FORM.Zip,
Country = FORM.Country,
Phone = FORM.Phone,
Fax = FORM.Fax,
EMail = FORM.EMail,
Website = FORM.Website};

ws = CreateObject("webservice","https://www.nelixtransax.com/roxapi/rox.asmx?WSDL");
ws.ProcessTransaction(params);
resp = getSOAPResponse(ws);




If you need any assistance with payment processing integration with your ColdFusion system, we are here to help!

Download ColdFusion credit card and ACH (e-check) integration examples.


Sunday, June 20, 2010

Automation of Credit Card and ACH Collection

Although our focus is helping our software development partners improve, enhance, and streamline credit card and ACH collection processes using our technology, we find that often a merchant approaches us without a development team, and asks us to do the development for them.

We have been building many custom systems on behalf of our customers. The common themes we have seen are:

- Online Bill Pay and Presentment
- Mobile Credit Card Processing
- Credit Card Processing using Telephony

Although the systems we build are all completely custom and unique to the merchant, and we use our FleXport toolkit as the basis of all of them, we find that the above themes are the most common.

If you are a merchant, and have questions about how to put together a system that has payment processing as a core component, we are the experts! Talk to us, and we can point you in the right direction, build a system, or bring in one of our many development partners to help you out!

For more information, visit nelixtransax.com.

Tuesday, June 15, 2010

I love Microsoft Access

I have been using Microsoft Access personally since 1991. Seems so long ago. It was version 1.1 when I started with it.

Since that time, me and my team of developers have built literally hundreds of Access databases. Access is probably my favorite application to work in, with Excel a close second.

With Microsoft Access it is so easy to whip up forms, reports, queries, etc. It is probably the greatest data manipulation tool that I have seen, and I've worked with many different tools!

Best of all, it is bundled with a Visual Basic based programming language that allows you to perform any automation that you need. You can use Access as a front end to a SQL Server backend and have it connect with any of countless remote data sources.

I use Access daily personally to manipulate my own data and automate otherwise manual processes. We have Access databases linked up with our QuickBooks files to manipulate data there, as well as with many different SQL Server, MySQL and Access databases we work with.

That is why, when a new developer calls us looking to integrate payment process (credit card and/or ACH) into their Access based application, my heart soars. I love to see it. These integrations are just so easy - we can do them usually in an hour or less. And it is so seemless, that the developer, and the clients, are always beyond happy.

It is a beautiful thing! I do have a place in my heart for many other database packages as well - 4D and FileMaker to name a couple. Each tool should be suited for it's purpose, and every database package has it's strengths and weaknesses. For data manipulation, none surpass Access.

More information on Microsoft Access and Credit Card Integration.

Tuesday, June 8, 2010

How To: Integrate Credit Card and ACH / E-Check processing into FileMaker

This is the ninth part in a series of postings on how to integrate credit card and ACH/E-check transactions into various systems. This installment demonstrates code used for processing payments (credit card and/or ACH) within a FileMaker application.

This was taken from the NELiX TransaX FleXport toolkit documentation. Credit card integration examples can be downloaded on the NELiX TransaX FleXport page.

Assumptions:
- Using NELiX TransaX Payment Gateway
- Communicating using NELiX TransaX Webservice
To accomplish a web service connection within FileMaker, we used the Troi URL Plug-in, a very inexpensive plug-in which allows FileMaker to easily post to a web resource.  This plug-in is available at http://www.troi.com/software/urlplugin.html.   Version 2.0.3 of the plug in is also included along with the example, but of course a license must be purchased from Troi before putting into production.  Once purchased, a permanent license key will be generated and sent to you from Troi.

Copy the plug in into your FileMaker extensions directory (both Windows and Mac plug-ins are included).

After being installed, we use FileMaker Scripts and Calculations to run the transaction.

First, we create a calculated filed to compose the XML payload needed to run the transaction. Here is an example calculation as seen in our example file. The fields here can be replaced with fields from your database, and elements that you will not use can be dropped from the calculation.

// REQUIRED FOR ALL TRANSACTIONS

"" & transactiontype & ""
& "" & username & ""
& "" & password & ""

// MERCHANT DEFINED FIELDS - UP TO 20 ARE SUPPORTED

& "" & merchantdefined1 & ""
& "" & merchantdefined2 & ""

// VOID TRANSACTION
// used to void a transaction prior to settlement. TRANSACTION ID is required. Payment Type is required if this is a "check" transaction.

& If ( transactiontype = "void" ; "" & transid & "" & If ( paymenttype = "check" ; "" & paymenttype & ""; ""); "")


// REFUND TRANSACTION
// used to refund a previous transaction. AMOUNT and TRANSACTION ID are required. Payment Type is required if this is a "check" transaction.

& If ( transactiontype = "refund" ; "" & amount & "" & "" & transid & "" & If ( paymenttype = "check" ; "" & paymenttype & ""; ""); "")

// CAPTURE TRANSACTION
// used to capture a previously auth'd transaction. AMOUNT and TRANSACTION ID are required. Payment Type is required if this is a "check" transaction.

& If ( transactiontype = "capture" ;
"" & amount & ""
& "" & transid & ""
& "" & orderid & ""
& "" & tracking_number & ""
& "" & shipping_carrier & ""
& If ( paymenttype = "check" ; "" & paymenttype & ""; ""); "")

// UPDATE TRANSACTION
// used to update shipping and tracking information in the gateway. Payment Type is required if this is a "check" transaction.

& If ( transactiontype = "update" ;
"" & transid & ""
& "" & tracking_number & ""
& "" & shipping_carrier & ""
& If ( paymenttype = "check" ; "" & paymenttype & ""; ""); "")

// VAULT DELETE CUSTOMER TRANSACTION
// used to remove a customer from the vault. CUSTOMER VAULT ID is required.

& If ( customer_vault_action = "delete_customer" ; "" & customer_vault_action & "" & "" & customer_vault_id & "" ; "")

// SALE OR AUTH TRANSACTION, OR ADD CUSTOMER/UPDATE CUSTOMER VAULT ACTIONS

& If ( transactiontype = "sale" or transactiontype = "auth" or customer_vault_action = "add_customer" or customer_vault_action = "update_customer" ;
"" & paymenttype & "" // REQUIRED

// FOR VAULT ACTIONS
& If ( customer_vault_action = "add_customer" or customer_vault_action = "update_customer" ; "" & customer_vault_action & ""; "")
& "" & customer_vault_id & ""

// INFO FOR CREDIT CARD TRANSACTION
& If ( paymenttype = "creditcard" ;
"" & ccnumber & ""
& "" & ccexpire & ""
& "" & cvv2 & ""
; "")

// INFO FOR CHECK (ACH) TRANSACTION
& If ( paymenttype = "check";
"" & checkname & ""
& "" & routing & ""
& "" & account & ""
& "" & accountholdertype & ""
& "" & accounttype & ""
& "" & seccode & ""
; "")


& "" & payment_plan_sku & "" // Used for recurring billing
& "" & amount & "" // REQUIRED
& "" & tax & "" // Informational Only
& "" & shipping & "" // Informational Only
& "" & description & ""
& "" & orderid & "" // Sent back in response, can be used to tie orders with transactions
& "" & ponumber & "" // Informational Only


// BILLING CONTACT INFO
& "" & firstname & ""
& "" & lastname & ""
& "" & company & ""
& "" & address1 & ""
& "" & address2 & ""
& "" & city & ""
& "" & state & ""
& "" & zip & ""
& "" & country & ""
& "" & phone & ""
& "" & fax & ""
& "" & email & ""
& "" & website & ""

// SHIPPING CONTACT INFO
& "" & shipfirstname & ""
& "" & shiplastname & ""
& "" & shipcompany & ""
& "" & shipaddress1 & ""
& "" & shipaddress2 & ""
& "" & shipcity & ""
& "" & shipstate & ""
& "" & shipzip & ""
& "" & shipcountry & ""
& "" & shipemail & ""

// OPTIONAL FEATURES
& "" & processorid & "" // If multiple merchant accounts are used within the gateway
& "" & descriptor & "" // Only supported by some processors
& "" & descriptorphone & "" // Only supported by some processors


; "")

A field should be created to hold the results as well. In our example, we call this field “results”

A script would then be created which would post the XML payload to the NELIX TransaX gateway. This should be setup to write the results to your “results” field:

// NOW WE POST THE XML STRING TO THE GATEWAY

TURL_Post("-unused"; "https://www.nelixtransax.com/roxapi/roxpost.asp"; "xml=" & TransaXDemo::xmlpayload)

If you are running Mac OS X, you will also need to run this calculation prior to the TURL_POST above:

// THIS STEP IS ONLY NEEDED ON MAC OS X. ALTHOUGH IT CAN BE LEFT IN FOR ANY OPERATING SYSTEM AND WILL NOT CAUSE PROBLEMS.

TURL_SetCustomHeader( "" ; "Content-Type: application/x-www-form-urlencoded" )


We then can use calculations to strip out the individual response values from the XML string that is returned as follows:

Status Code:

Middle ( results; Position (results; ""; 1; 1)+13; Position (results; "";1;1) - ( Position (results; ""; 1; 1)+13))

Status Message
Middle ( results; Position (results; ""; 1; 1)+12; Position (results; "";1;1) - ( Position (results; ""; 1; 1)+12))

Auth Code
Middle ( results; Position (results; ""; 1; 1)+11; Position (results; "";1;1) - ( Position (results; ""; 1; 1)+11))

Transaction ID
Middle ( results; Position (results; ""; 1; 1)+10; Position (results; "";1;1) - ( Position (results; ""; 1; 1)+10))

AVS Message
Middle ( results; Position (results; ""; 1; 1)+9; Position (results; "";1;1) - ( Position (results; ""; 1; 1)+9))

CVV2 Message
Middle ( results; Position (results; ""; 1; 1)+10; Position (results; "";1;1) - ( Position (results; ""; 1; 1)+10))

Order ID
Middle ( results; Position (results; ""; 1; 1)+9; Position (results; "";1;1) - ( Position (results; ""; 1; 1)+9))

Customer Vault ID
Middle ( results; Position (results; ""; 1; 1)+19; Position (results; "";1;1) - ( Position (results; ""; 1; 1)+19))


NOTE: In some cases, the TURL plug in will strip spaces from data passed into the gateway. If you experience this problem, you can replace your spaces with “%20”. These will be converted to spaces when they hit the gateway. This can be done for the First Name, Last Name, Company, Order Description, Address 1, Address 2 and City fields.


If you need any assistance with payment processing integration with your FileMaker Flash system, we are here to help!

Download FileMaker credit card and ACH (e-check) integration examples.



Thursday, June 3, 2010

How To: Integrate Credit Card and ACH (e-check) processing into a Flex / Actionscript Flash system

This is the eighth part in a series of postings on how to integrate credit card and ACH/E-check transactions into various systems. This installment demonstrates code used for processing payments (credit card and/or ACH) within a Flex / ActionScript Flash application.

This was taken from the NELiX TransaX FleXport toolkit documentation. Credit card integration examples can be downloaded on the NELiX TransaX FleXport page.

Assumptions:
- Using NELiX TransaX Payment Gateway
- Communicating using NELiX TransaX Webservice

Follow these steps.

1. Create a new project.

2. Open “Data->Import Web Service” menu

Image: (NelixExmaples\doc\images\flex\01.jpg)

3. Change port to “RoXAIPSoap”and click “Finish”.
WebService files will be generated automatically.

Image: (NelixExmaples\doc\images\flex\02.jpg)

4. Add import directives in your project:

import com.nelixtransax.Responses;
import com.nelixtransax.Params;
import com.nelixtransax.ProcessTransaction_request;
import com.nelixtransax.ProcessTransactionResultEvent;
import com.nelixtransax.RoXAPI;

5. Initialize WebService:

private var ws:RoXAPI = new RoXAPI(null, null);

6. Add event listeners:

private function OnNelixWSButtonClick():void
{
ws.addEventListener(ProcessTransactionResultEvent.ProcessTransaction_RESULT, OnNelixWSSucces);

var params:Params = new Params();
var token:AsyncToken = ws.processTransaction(params);
token.addEventListener(FaultEvent.FAULT, OnFault);
}

private function OnNelixWSSucces(event:ProcessTransactionResultEvent):void
{
var a:com.nelixtransax.Responses = ws.processTransaction_lastResult;
Alert.show("Succes!");
}

private function OnFault(event:FaultEvent):void
{
Alert.show("Error #" + event.fault.errorID.toString() + ": " + event.fault.message );
}

7. Fill parameters:

private function FillParams(wsParams:Params):void
{
wsParams.TransactionType = TransactionType.selectedItem.toString();
wsParams.GatewayUserName = GatewayUserName.text;
wsParams.GatewayPassword = GatewayPassword.text;
wsParams.IPAddress = "127.0.0.1";

wsParams.Merchant_Defined_Field_1 = Merchant_Defined_Field_1.text;
wsParams.Merchant_Defined_Field_2 = Merchant_Defined_Field_2.text;

if(TransactionType.selectedItem.toString() == "void")
wsParams.TransactionID = TransactionID.text;

if(TransactionType.selectedItem.toString() == "refund")
{
wsParams.Amount = Amount.text;
wsParams.TransactionID = TransactionID.text;
}

if (TransactionType.selectedItem.toString() == "capture" )
{
wsParams.Amount = Amount.text;
wsParams.TransactionID = TransactionID.text;
wsParams.OrderID = OrderID.text;
wsParams.Tracking_Number = Tracking_Number.text;
wsParams.Shipping_Carrier = Shipping_Carrier.text;
}

if (TransactionType.selectedItem.toString() == "update")
{
wsParams.TransactionID = TransactionID.text;
wsParams.Tracking_Number = Tracking_Number.text;
wsParams.Shipping_Carrier = Shipping_Carrier.text;
}

if (Customer_Vault_Action.selectedItem.toString() == "delete_customer")
{
wsParams.Customer_Vault_Action = Customer_Vault_Action.selectedItem.toString();
wsParams.Customer_Vault_ID = Customer_Vault_ID.text;
}

if(TransactionType.selectedItem.toString() == "sale" || TransactionType.selectedItem.toString() == "auth" || Customer_Vault_Action.selectedItem.toString() == "add_customer" || Customer_Vault_Action.selectedItem.toString() == "update_customer" )
{
wsParams.PaymentType = PaymentType.selectedItem.toString();

if(Customer_Vault_Action.selectedItem.toString() == "add_customer" || Customer_Vault_Action.selectedItem.toString() == "update_customer" )
{
wsParams.Customer_Vault_Action = Customer_Vault_Action.selectedItem.toString();
}
wsParams.Customer_Vault_ID = Customer_Vault_ID.text;

if (wsParams.PaymentType == "creditcard")
{
wsParams.CCNumber = CCNumber.text;
wsParams.CCExpDate = CCExpDate.text;
wsParams.CVV = CVV.text;
}
if(wsParams.PaymentType == "check")
{
wsParams.CheckName = CheckName.text;
wsParams.CheckABA = CheckABA.text;
wsParams.CheckAccount = CheckAccount.text;
wsParams.AccountHolderType = AccountHolderType.selectedItem.toString();
wsParams.AccountType = AccountType.selectedItem.toString();
wsParams.SecCode = SecCode.selectedItem.toString();
}

wsParams.Payment_Plan_SKU = Payment_Plan_SKU.text;

wsParams.Amount = Amount.text;
wsParams.Tax = Tax.text;
wsParams.Shipping = Shipping.text;
wsParams.OrderDescription = OrderDescription.text;
wsParams.OrderID = OrderID.text;
wsParams.PONumber = PONumber.text;

wsParams.FirstName = FirstName.text;
wsParams.LastName = LastName.text;
wsParams.Company = Company.text;
wsParams.Address1 = Address1.text;
wsParams.Address2 = Address2.text;
wsParams.City = City.text;
wsParams.State = State.text;
wsParams.Zip = Zip.text;
wsParams.Country = Country.text;
wsParams.Phone = Phone.text;
wsParams.Fax = Fax.text;
wsParams.EMail = EMail.text;
wsParams.Website = Website.text;

wsParams.ShippingFirstName = ShippingFirstName.text;
wsParams.ShippingLastName = ShippingLastName.text;
wsParams.ShippingCompany = ShippingCompany.text;
wsParams.ShippingAddress1 = ShippingAddress1.text;
wsParams.ShippingAddress2 = ShippingAddress2.text;
wsParams.ShippingCity = ShippingCity.text;
wsParams.ShippingState = ShippingState.text;
wsParams.ShippingZip = ShippingZip.text;
wsParams.ShippingCountry = ShippingCountry.text;
wsParams.ShippingEmail = ShippingEmail.text;

wsParams.ProcessorID = ProcessorID.text;
wsParams.Descriptor = Descriptor.text;
wsParams.DescriptorPhone = DescriptorPhone.text;
}
}


If you need any assistance with payment processing integration with your Flex /ActionScript Flash system, we are here to help!

Download Flex / ActionScript flash credit card and ACH (e-check) integration examples.
Flash /ActionScript credit card integration examples also available.



The biggest advantage of our gateway comes from power that it puts in the hands of your developers. Easily integrate with your application and take advantage of features to enhance your system.

We invite you to a live demo and the opportunity to build a partnership. Our promise to partners is, through innovation, today's products will be relentlessly enhanced into tomorrow's solutions.

1921-A Rohlwing Road
Rolling Meadows IL 60008-4800
P) 866-513-1547
F) 866-513-1548
info@transaxgateway.com