I have some issues with the GET PROCESSING OPTIONS (GPO) command for a VISA card.
Following is my response to the SELECT command for the VISA application:
6F408407A0000000031010A535500A564953412044454249549F380C9F66049F02069F37049F1A025F2D02656EBF0C1242034761735F550255539F5A0511084008409000
I extracted the following PDOL from this: 9F66049F02069F37049F1A02
I'm not sure about tag 9F66
.
My GPO command then looks like this:
80a800000100000001000000001000823DDE7A12400
But I get a parser error as response:
6A80
Your GPO command seems to have quite a lot of issues:
80 A8 0000 01 00000001 000000001000 823DDE7A 1240 0
^^ ^^^^^ ^^^^^^^^ ^^^^ ^^
4. 1. 2. 3. 5.
First of all, your GPO command sends several data bytes without context. You need to wrap your data items into a PDOL related data object:
83 10 wwwwwwww xxxxxxxxxxxx yyyyyyyy zzzz
Your Terminal Transaction Qualifiers (
9F66
) have RFU bits set. Valid TTQ could look like this:B620C000
, withB6
:- Mag-stripe mode supported @bit 8
- EMV mode supported @bit 6
- EMV contact chip supported @bit 5
- online mode supported @bit 4
- online PIN supported @bit 3
- signature supported @bit 2
- other bits = RFU
20
:- no online cryptogram required @bit 8
- no CMV required @bit 7
- (contact chip) offline PIN supported @bit 6
- other bits = RFU
C0
:- issuer update processing supported @Bit 8
- consumer device CVM supported @Bit 7
- other bits = RFU
00
: RFU
Your Terminal Country Code is not valid. A terminal country code must be a 3-digit numeric value BCD-encoded into the two bytes. Assuming that you wanted to use "124" (Cananda), the correct country code would be
0124
(Austria:0040
, UK:0826
, USA:0840
).The Lc byte (set to
01
= one data byte) does not reflect the actual data length. In your case, the actual data length would be 16 bytes, so Lc should be set to10
. Considering that you also need to include the tag and length for the PDOL related data object, your Lc byte should be set to12
(18 bytes).The hexadecimal string that you presented as your GPO command is not aligned to bytes, so you are missing one nibble of the Le field. You Le field shoud be set to
Le
.
So your GPO command could look like this:
80 A8 0000 12 83 10 B620C000 000000001000 823DDE7A 0124 00
来源:https://stackoverflow.com/questions/23590256/getting-parser-error-on-request-for-gpo-command-for-emv-card