Archive for May, 2008

 
May
05
Posted (admin) in Payment News on May-5-2008

Glenbrook’s Payment News has a list of Payment and Banking Blogs — The Payment Systems Blog is included in this list.

Check out the page and other blogs here.



 
May
05
Posted (db) in Development, General on May-5-2008

I was thinking about the tools and systems and general knowledge that I use on a daily basis, and thought is would be a good exercise to document them here:

Computer Systems:

Software:

  • A good text editor - UltraEdit, TextMate or vim
  • A good hex editor - UltraEdit, hexdump, hexedit or vim -b
  • ssh client - PuTTY or OS native ssh clients
  • svn client
  • NetCat - to pipe binary message dumps to simulators, and to create listening servers to accept message dumps.
  • Client and Server Simulators — write your own!
  • Calculator — the DEC to HEX and HEX to DEC functions are great for header lengths - if you are a real geek you have a HP-16c
  • Instant Messenging clients and Skype to communicate with your team.

Knowledge:

  • Ability to read — seriously, read those specs!
  • ISO8583
  • TCP/IP Socket programming - both Client and Server
  • Database programming experience e.g. SQL - and other O/R Mapping tools - Understanding the I/O requirements between write intensive OLTP and read intensive Data Warehouse data stores.
  • Payment Processing 101 knowledge
  • Data Encoding techniques and character sets and numbering systems - ACSII, EBCDIC, BCD, Binary etc.
  • Basic understanding of Encryption, including symmetric, asymmetric, PIN encryption , PIN translation, and DUKPT
  • Basic understanding of IT Security
  • PCI and PABP/PA-DSS requirements - review the audit procedures !
  • How to use Google
  • Ability to read — Note: This is intentionally listed twice :)


 
May
05
Posted (db) in General, Point of Sale on May-5-2008

PseudoephedrineAs 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

<schema>
<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">
</schema>

FSD Response

<?xml version="1.0" encoding="UTF-8"?>
<schema>
<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" />
</schema>

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.