How to use 03-00 / 03-40 commands and parse the results


A very common integration method for NEO devices (unimagpro unimagii shuttle unijack unipay unipay15 unipayiii imagpro imagproii btmag btpay200 vp3300 ismart) is to activate Auto Poll Mode and then continuously check for results using 03-40. In this article we show you how to parse the results. 


Here is an example I pulled from my unencrypting reader with 03 - 00 (non-encrypting reader)

56 69 56 4F 74 65 63 68 32 00 03 00 00 76 39 42 36 32 37 39 32 35 37 37 34 39 31 33 32 33 34 33 5E 54 45 53 54 20 43 41 52 44 2F 56 49 56 4F 54 45 43 48 5E 31 30 31 32 38 31 33 30 30 37 32 31 30 34 33 35 30 30 30 30 25 36 32 37 39 32 35 37 37 34 39 31 33 32 33 34 33 3D 31 30 31 32 38 31 33 30 30 37 32 31 30 34 33 35 30 30 30 30 00 9F 35 01 22 9F 39 01 07 FF EE 01 04 DF 30 01 00 DF EE 26 01 41 6A 44

This is the unencrypted MSD:

36 32 37 39 32 35 37 37 34 39 31 33 32 33 34 33 5E 54 45 53 54 20 43 41 52 44 2F 56 49 56 4F 54 45 43 48 5E 31 30 31 32 38 31 33 30 30 37 32 31 30 34 33 35 30 30 30 30 25 36 32 37 39 32 35 37 37 34 39 31 33 32 33 34 33 3D 31 30 31 32 38 31 33 30 30 37 32 31 30 34 33 35 30 30 30 30 00 

Which translates from HEX-> ASCII to be:

6279257749132343^TEST CARD/VIVOTECH^10128130072104350000%6279257749132343=10128130072104350000.

 

To parse this out:

56 69 56 4F 74 65 63 68 32 00  // Header

03 // Command

00 // Command Status Code

00 76 // Total Length, 76 is least significant byte, we can expect 76 → 118 hex nibbles)

39 // Length of Track 1 (39 hex → 57 decimal characters)

42 // Start sentinel  ('B')

36 32 37 39 32 35 37 37 34 39

31 33 32 33 34 33 5E 54 45 53

54 20 43 41 52 44 2F 56 49 56

4F 54 45 43 48 5E 31 30 31 32

38 31 33 30 30 37 32 31 30 34

33 35 30 30 30 30 // Track 1 data

 

25 // Length of Track 2 (25 hex → 37 decimal characters)

 

36 32 37 39 32 35 37 37 34 39

31 33 32 33 34 33 3D 31 30 31

32 38 31 33 30 30 37 32 31 30

34 33 35 30 30 30 30 // Track 2 data

 

00 // End sentinel of track data ('.')

 

9F 35 01 22 // Value for 9F35 indicates the terminal type is 22. 

9F 39 01 07 // Value for 9F 39 indicates that this was a tap. 07 = tap, 90 indicates a swipe. 

FF EE 01 04 // Proprietary tag

DF 30 01 00 // Proprietary tag

DF EE 26 01 41 // Encryption status (no encryption)

6A 44 // Calculated CRC

 

This is also documented in the NEO IDG. Look for section 16.0 (Sample Scenarios and Frame Flow) for the 'Contactless MagStripe Transactions in Auto Poll Mode', example #4 for an overview of how this works.

NOTE: 03-00 is a legacy command, applicable to non-encrypted transactions only.When EMV encryption ON or MSR/MSD encryption ON, if Data encryption Key is loaded, 03-00 will be disabled. 03-40 is a unified command for both non-encrypted and encrypted transaction.