We have implemented a new component to our Java and jPOS fueled Payment Switch – OLS.Switch which we have called the CaseSwitch. The vast majority of our switching algorithms are based on either the determination of CardType – which dictates which outbound endpoint we send that transaction to, or on Card Bin Ranges.
An example of a Bin Range:
If a CardNumber’s Bin or IIN – matches our Bin Range configurations – We will select the appropriate EndPoint. In this example if we have a VISA or MC Card we switch it out to a FDR Gateway. If we were connecting to a to MasterCard MIP or Visa VAP or DEX then we would have a MC and VISA EndPoint defined with our BankNet and VisaNet interfaces and switch the transactions to those endpoints.
An example of a Card Type:
We have certain transaction types that we know where they go because of their Card Type – Many of these are internal authorization hosts such as implementations of Authorized Returns, MethCheck, Loyalty, Couponing. Others are transactions where the transaction type also dictates the card type – such as those to GreenDot, InComm and other external hosts where a BIN Range lookup is unnecessary.
Source (Port) Based Routing
We recently had a requirement for Source-Based Routing – where depending on the source port that would dictate the outbound transaction path(s).
In our Server we accept the incoming transaction and then place a Context varaible we call PORT that tells us which Server Port the transaction came in on. One we have that additional data we can perform a Logic Branch in our Transaction Manager that looks like this.
This allows us to define transaction paths based on the incoming port of the server, so in this example.
<participant class=”com.ols.switch.CaseSwitch” logger=”Q2″ realm=”Switch”> <property name=”switch” value=”PORT” /> <property name=”case 5001" value=”LookUpResponse Log Close Send Debug” /> <property name=”case 5002" value=”QueryRemoteHost_xxx Log Close Send Debug” /> <property name=”case 5005" value=”QueryRemoteHost_yyy Log Close Send Debug” /> <property name=”default” value=”Log Close Debug” /> </participant>
Port 5001 – we perform an authorization locally
Port 5002 – we switch out the transaction and reformat it to endpoint xxx – message format and interchanges requirements.
Port 5005 – we switch out the transaction and reformat it to endpoint yyy – message format and interchanges requirements.