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.
Related articles