Does your Payment Switch handle non-payment transactions and message formats ?

As a financial payment switch and switch vendor, we need to be agile, adaptable and expandable to support different formats that are required by our customers. See The New Normal – for one of our more complex acquirer side integrations.

One of these initiatives consisted of developing an interface to switch incoming MethCheck Pseudoephedrine Inquiry transactions from the Point-of-Sale to OLS.Switch, and then switched out to another end-point for further processing.

While most message formats in the payment space follow the ISO-8583 standard, we do have many end-points that we need to interface with that are either fixed length or variable length, we call these FSD messages. In the MethCheck implementation we used a FSD based message format for request and response messages. Our role here was to pass a customer defined buffer from the POS system to the end-point, though our switch and pass a response buffer back to the POS system

FSD Request

<field id="header" type="K" length="7">OLSMETH</field>
<field id="0" type="N" length="2">    <!--tran type -->
<field id="41" type="A" length="5">    <!--store number -->
<field id="46" type="N" length="19">   <!--tran id -->
<field id="meth-trans-info" type="AFS" length="452">

FSD Response

<?xml version="1.0" encoding="UTF-8"?>
<field id="header"             type="K" length="7" >OLSMETH</field>
<field id="0"                  type="N" length="2" /> <!--tran type -->
<field id="41"                 type="A" length="5" />  <!--store number-->
<field id="46"                 type="N" length="19" /> <!--tran id-->
<field id="39"                 type="A" length="2"/>    <!-- Result Code-->
<field id="meth-trans-reply"    type="AFS" length="255" />

We have a very easy way of creating and populating these messages.

FSDMsg fsd = new FSDMsg ("file:cfg/meth-");
        FSDMsg msg = (FSDMsg) ctx.tget (REQUEST);

        fsd.set ("0", msg.get("transaction-code"));
        String storeNumber = msg.get ("store-number");
        fsd.set ("41", storeNumber);

        TranLog tranLog = (TranLog) ctx.tget (TRANLOG);
        if (tranLog != null) {
           fsd.set ("46", ISOUtil.zeropad (Long.toString(tranLog.getId().longValue()), 19 ));

        StringBuffer sb = new StringBuffer();
        sb.append (msg.get ("register-logon-nbr"));
        sb.append (msg.get ("meth-entry-mode"));
        sb.append (msg.get ("meth-id-format"));
        sb.append (msg.get ("meth-id-data"));
        sb.append (RS);
        sb.append (msg.get ("meth-person-info"));
        sb.append (RS);
        fsd.set ("meth-trans-info", sb.toString());

In less then a week’s time in development (testing and user acceptance testing will take longer) – we were able to add an interface to our switch to handle this non-payment transaction type.