Escolar Documentos
Profissional Documentos
Cultura Documentos
Especificação Detalhada
Versão 1.08a (15/Abr/2013)
1. Introdução...................................................................................................................................... 7
2. Arquitetura .................................................................................................................................... 8
2.1. A Biblioteca de Pinpad ........................................................................................................................... 8
2.2. Aplicações internas ao pinpad .............................................................................................................10
3. A Biblioteca de Pinpad .................................................................................................................. 11
3.1. Considerações Gerais...........................................................................................................................11
3.1.1. Formato das funções .............................................................................................................................. 11
3.1.2. Códigos de retorno ................................................................................................................................. 11
3.1.3. Mensagens de erro ................................................................................................................................. 14
3.1.4. Funções “blocantes” ............................................................................................................................... 17
3.2. Funções de Controle ............................................................................................................................18
PP_Open .................................................................................................................................................................. 19
PP_Close................................................................................................................................................................... 20
PP_Abort .................................................................................................................................................................. 21
3.3. Funções Básicas de Pinpad ..................................................................................................................22
PP_GetInfo ............................................................................................................................................................... 23
PP_DefineWKPAN .................................................................................................................................................... 25
PP_Display ................................................................................................................................................................ 27
PP_DisplayEx ............................................................................................................................................................ 28
PP_StartGetKey ........................................................................................................................................................ 29
PP_GetKey................................................................................................................................................................ 30
PP_StartGetPIN ........................................................................................................................................................ 31
PP_GetPIN ................................................................................................................................................................ 33
PP_StartCheckEvent ................................................................................................................................................. 35
PP_CheckEvent ........................................................................................................................................................ 36
PP_EncryptBuffer ..................................................................................................................................................... 38
PP_GetDUKPT .......................................................................................................................................................... 40
PP_StartChipDirect................................................................................................................................................... 41
PP_ChipDirect .......................................................................................................................................................... 43
PP_StartRemoveCard ............................................................................................................................................... 45
PP_RemoveCard ....................................................................................................................................................... 46
PP_StartGenericCmd ................................................................................................................................................ 47
PP_GenericCmd ....................................................................................................................................................... 48
3.4. Funções de processamento de cartão .................................................................................................49
PP_StartGetCard ...................................................................................................................................................... 50
PP_GetCard .............................................................................................................................................................. 52
PP_ResumeGetCard ................................................................................................................................................. 56
PP_ChangeParameter .............................................................................................................................................. 57
PP_StartGoOnChip ................................................................................................................................................... 58
PP_GoOnChip ........................................................................................................................................................... 61
PP_FinishChip ........................................................................................................................................................... 64
3.5. Funções para Manutenção das Tabelas ..............................................................................................67
PP_TableLoadInit ..................................................................................................................................................... 68
PP_TableLoadRec ..................................................................................................................................................... 69
PP_TableLoadEnd..................................................................................................................................................... 70
PP_GetTimeStamp ................................................................................................................................................... 71
4. Tratamentos internos à Biblioteca/Pinpad .................................................................................... 72
4.1. Função PP_StartGetCard / PP_GetCard...............................................................................................72
4.1.1. Cartão magnético ................................................................................................................................... 73
4.1.2. Cartão com chip com contato................................................................................................................. 73
4.1.3. Cartão com chip sem contato ................................................................................................................. 76
4.2. Função PP_StartGoOnChip / PP_GoOnChip ........................................................................................79
4.2.1. Aplicação de Crédito/Débito EMV com contato ..................................................................................... 79
4.2.2. Aplicação Visa Cash sobre TIBC v1 ou v3 ................................................................................................ 80
4.2.3. Aplicação Easy-Entry sobre TIBC v1 ........................................................................................................ 81
4.2.4. Aplicação de Crédito/Débito EMV sem contato ..................................................................................... 81
4.3. Função PP_FinishChip ..........................................................................................................................82
4.3.1. Aplicação de Crédito/Débito EMV com contato ..................................................................................... 82
4.3.2. Aplicação Visa Cash sobre TIBC v1 ou v3 ................................................................................................ 84
4.3.3. Aplicação Easy-Entry sobre TIBC v1 ........................................................................................................ 84
4.3.4. Aplicação de Crédito/Débito EMV sem contato ..................................................................................... 84
4.4. Comunicação Segura ...........................................................................................................................86
4.4.1. Formato de criptografia de PAN ............................................................................................................. 87
4.4.2. Exemplos ................................................................................................................................................ 88
4.4.3. Decodificação das trilhas pelo “checkout” ............................................................................................. 90
4.4.4. Uso de certificado RSA ........................................................................................................................... 90
5. A Biblioteca de Acesso TEF ............................................................................................................ 91
6. Fluxos de operação no “checkout” ................................................................................................ 92
6.1. Transação com cartão magnético ou sem contato simulando tarja (sem senha) ...............................94
6.2. Transação com cartão magnético ou sem contato simulando tarja (com senha) ..............................95
6.3. Tentativa de transação com cartão magnético que possui chip .........................................................96
6.4. Transação com cartão com chip ..........................................................................................................97
6.5. Transação negada pelo cartão com chip .............................................................................................98
6.6. Transação negada pelo cartão com chip após aprovação do Host .....................................................99
6.7. Transação com chip aprovada offline ................................................................................................100
6.8. Fallback de cartão com chip ..............................................................................................................101
7. Tabelas de Parâmetros ............................................................................................................... 102
7.1. Tabela de Parâmetros x AID ..............................................................................................................103
7.1.1. Parâmetros para aplicações padrão EMV............................................................................................. 104
7.1.2. Parâmetros para aplicações padrão Easy-Entry sobre TIBC v1 ............................................................ 106
7.1.3. Parâmetros para aplicações padrão Visa Cash sobre TIBC v1 ou v3 .................................................... 106
7.2. Tabela de Chaves Públicas .................................................................................................................107
7.3. Tabela de Certificados Revogados .....................................................................................................109
8. Protocolo Serial .......................................................................................................................... 110
8.1. Nível de Enlace...................................................................................................................................111
8.2. Nível de Aplicação..............................................................................................................................113
8.2.1. Mensagens de Notificação ................................................................................................................... 114
8.3. Exemplos:...........................................................................................................................................115
9. Funcionalidades Adicionais ......................................................................................................... 117
9.1. Consulta de versões ...........................................................................................................................117
10. Convenções para a plataforma Win32 .................................................................................. 118
10.1. Formato da Biblioteca .......................................................................................................................118
10.2. Arquivo de Configuração ...................................................................................................................118
Apêndice A - Formatos usados no documento..................................................................................... 119
Biblioteca Compartilhada para Pinpad - Especificação Detalhada 1.08a (15/Abr/2013)
1. Introdução
Os sistemas de automação comercial contam com aplicações de “checkout” que são hoje
responsáveis, entre outras coisas, pela aceitação de cartões de pagamento.
Os cartões de pagamento em meio magnético não apresentam complexidade significativa no ponto
de aceitação e são de total domínio técnico dos fornecedores das aplicações “checkout”. Dessa
maneira, a integração de soluções e suas certificações não têm apresentado grandes problemas.
Com o advento dos cartões com chip no Brasil (principalmente no que diz respeito ao padrão EMV), o
processamento de transações de pagamento tornou-se muitas vezes mais complexo do que o feito
com o conhecido cartão magnético, tornando impeditivo o seu desenvolvimento direto pelo
fornecedor de aplicações de “checkout”. Além do alto investimento desse trabalho e do necessário
desvio do foco dessas empresas, a certificação de inúmeras soluções diferentes se tornaria inviável.
Uma solução para esse impasse reside na criação de núcleos de software e hardware capazes de
efetuar todos os complexos tratamentos dos diferentes cartões de pagamento, isentando dessa
responsabilidade os desenvolvedores de aplicações de “checkout” e viabilizando as certificações das
soluções finais.
Este documento destina-se a descrever um núcleo de software capaz de cumprir essa finalidade em
conjunto com um equipamento do tipo “pinpad” para o tratamento, entre outras coisas, dos
seguintes cartões em aplicações de “checkout”:
Cartão magnético convencional;
Cartão com chip EMV com contato; e
Cartão com chip sem contato (Visa, MasterCard e American Express).
Observações:
2. Arquitetura
Este capítulo destina-se a descrever a arquitetura de software a ser adotada para a Biblioteca de
Pinpad e para as aplicações internas ao pinpad.
PDV (Intel/PC)
Aplicativo de “checkout”
Outros
funções aplicativos e/ou
padronizadas bibliotecas
Biblioteca
de PIN-pad
Dessa maneira, o aplicativo de “checkout” acessa somente funções padronizadas de alto nível dessa
biblioteca, não tendo que conhecer os comandos de cada modelo de pinpad bem como tratar todo o
complexo fluxo necessário para o processamento de cartões com chip.
Aplicativo de “checkout”
PP_StartGetCard PP_StartGoOnChip
PP_Open PP_FinishChip PP_Close
PP_GetCard PP_GoOnChip
Servidor TEF
AIDs aceitos
Conjunto
Funções Biblioteca + PIN-pad
Chaves Públicas
Uma vez que a forma como as funcionalidades descritas neste documento é implementada
depende exclusivamente das características técnicas do pinpad, não é possível estipular o que
deve ser processado internamente ao pinpad e o que deve ser processado pela sua biblioteca.
Assim sendo, todas as funcionalidades aqui descritas serão sempre atribuídas ao conjunto
“Biblioteca + pinpad”.
O conjunto “Biblioteca + pinpad” deve ser capaz de gerenciar tabelas de parâmetros necessárias
para o processamento de cartões com chip. Estas tabelas estão descritas no Capítulo 7. O local
onde as tabelas são armazenadas depende das características técnicas do pinpad.
O conjunto “Biblioteca + pinpad” deve ser capaz de armazenar e atualizar um “time-stamp” que
indica a versão das tabelas. Deve-se gerenciar um “time-stamp” único para todas as tabelas e
um “time-stamp” para cada rede adquirente.
Biblioteca de PIN-pad
PIN-pad “multi-aplicação”
Apesar desta especificação prever a convivência de diversas redes adquirentes em uma única
aplicação, a arquitetura acima é recomendada para casos em que se requer total independência dos
módulos, mesmo que estes sejam inicialmente idênticos e regidos por esta mesma especificação.
3. A Biblioteca de Pinpad
Este capítulo destina-se a descrever detalhadamente a Biblioteca de Pinpad, enfocando sua interface
de acesso.
51 - ERRO PINPAD
PP_StartFunc
Erro
OK
Fim
PP_NOTIFY Mostra
PP_Func mensagem
Erro no “checkout”
Fim OK
2 PP_PROCESSING Operador
deseja
finalizar? Não
Sim
PP_Abort
Quando a função retorna PP_NOTIFY, ela informa uma mensagem a ser apresentada no “checkout”.
O processo pode ser finalizado através da função PP_Abort ( ) sempre que PP_Func ( ) retornar
PP_PROCESSING ou PP_NOTIFY.
Função Descrição
PP_Open Aloca os recursos de hardware e software para utilização do pinpad.
PP_Close Libera os recursos de hardware e software alocados ao pinpad.
PP_Abort Aborta uma operação em andamento no pinpad
Início
PP_Open
PP_Func
PP_Close
Fim
PP_Open
Esta função aloca os recursos de hardware e software necessários ao funcionamento do conjunto
bibliotecas/pinpad.
A chamada bem sucedida desta função é pré-requisito para todas as outras da biblioteca.
Entradas:
psCom Porta serial onde se encontra conectado o pinpad (2 dígitos, de “01” a “99”).
Saídas:
não há.
Retorno:
PP_OK ...........................Biblioteca inicializada e recursos atribuídos com sucesso.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_ALREADYOPEN ........Função PP_Open já havia sido chamada.
Exemplo:
char sCom[2];
int iStat;
PP_Close
Esta função libera os recursos de hardware e software alocados ao pinpad. A chamada a esta função
é imprescindível após o uso das funções da biblioteca.
Outras atribuições de PP_Close:
Desligar a alimentação do cartão com chip, caso ativa.
Desabilitar o modo “Comunicação Segura”, caso tenha sido usada a função PP_DefineWKPAN.
Entradas:
psIdleMsg Mensagem de 32 caracteres (2 linhas x 16 colunas) a ser deixada no display
do pinpad após o fechamento.
Saídas:
não há.
Retorno:
PP_OK ...........................Biblioteca finalizada e recursos liberados com sucesso.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
Exemplo:
int iStat;
/* Finaliza a Biblioteca */
/* ------> 32 posições:
“12345678901234567890123456789012” */
PP_Close (“SUPERMERCADOS•••ALEGRIA••••••••”);
SUPERMERCADOS
ALEGRIA
PP_Abort
Esta função finaliza um processo em andamento, iniciado por uma função do tipo PP_StartFunc. Ela
deve ser chamada caso o operador do “checkout” decida “abortar” a operação enquanto a função
complementar PP_Func estiver retornando PP_PROCESSING (ver item 3.1.4 - Funções “blocantes”).
Entradas:
não há.
Saídas:
não há.
Retorno:
PP_OK ...........................Esta função retorna sempre OK.
Função Descrição
PP_GetInfo Obtém informações básicas sobre o pinpad
PP_DefineWKPAN Define a chave de criptografia para o número do cartão
PP_Display Envia uma mensagem ao display do pinpad.
PP_DisplayEx Envia uma mensagem ao display do pinpad, com formato livre.
PP_StartGetKey Aguarda o pressionamento de uma tecla no pinpad.
PP_GetKey
PP_StartGetPIN Captura a senha do portador do cartão dentro dos padrões
PP_GetPIN criptográficos exigidos pelas redes adquirentes.
PP_StartCheckEvent Aguarda um evento no pinpad, como pressionamento de tecla,
PP_CheckEvent passagem de cartão com tarja, inserção e remoção de cartão com
chip.
PP_EncryptBuffer Criptografa um bloco de dados utilizando uma Master Key do
pinpad.
PP_GetDUKPT Obtém os dados correntes de um registro DUKPT
PP_StartChipDirect Efetua operação direta com o cartão com chip
PP_ChipDirect
PP_StartRemoveCard Aguarda a remoção do cartão com chip inserido.
PP_RemoveCard
PP_StartGenericCmd Executa um comando genérico proprietário de uma das redes
PP_GenericCmd adquirentes.
PP_GetInfo
Esta função obtém informações sobre o pinpad e suas aplicações. Caso uma informação não exista
ou não se aplique para o modelo de pinpad, ela deverá ser fornecida em branco (espaços).
Entradas:
psInput String ASCII de 2 caracteres indicando o tipo de informação sendo
requisitada:
Posição Formato Descrição
001-002 N2 “00” para informações gerais;
“01” para info. sobre a aplicação Rede Amex;
“02” para info. sobre a aplicação Redecard; e
“03” para info. sobre a aplicação Cielo.
Saídas:
psOutput Informações requisitadas, cujo layout depende do parâmetro psInput.
Se psInput igual a “00” (informações gerais):
Posição Formato Descrição
001-020 A20 Nome do fabricante do pinpad
021-039 A19 Modelo / versão do hardware, no formato
“xxx...xxx;mmm”, onde “xxxx” é o nome do
equipamento e “mmm” a capacidade de
memória (“512KB”, “1MB”, “2MB”, ...).
040 A1 Se o pinpad suporta cartão com chip sem
contato, este campo deve conter a letra “C”,
caso contrário um espaço em branco.
041-060 A20 Versão do software básico/firmware (formato
livre)
061-064 A4 Versão da especificação, no formato “V.VV”
(neste caso, fixo “1.08”)
065-080 A16 Versão da aplicação básica, no formato
“VVV.VV AAMMDD” (com 3 espaços à direita).
081-100 A20 Número de série do pinpad (com espaços à
direita)
Se psInput diferente de “00” (informações sobre a aplicação da Rede
Adquirente):
Posição Formato Descrição
001-020 A20 Nome da Rede Adquirente (com espaços à
direita)
Retorno:
PP_OK ...........................Operação bem sucedida- os resultados estão em psOutput.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_DefineWKPAN
A função PP_DefineWKPAN permite que o “checkout” habilite a criptografia de número de cartão,
evitando que este dado circule em claro pelo protocolo serial do pinpad, conforme processo
detalhado no item 4.4. Além disso, esta função define a chave (WKPAN) a ser utilizada no processo.
Esta função pode ser chamada a qualquer momento depois da função PP_Open. A partir desse
instante o pinpad passa a trabalhar em modo aqui denominado “Comunicação Segura”, até que seja
chamada a função PP_Close.
Entradas:
psInput O formato da entrada depende da modalidade de criptografia a ser utilizada:
Modalidade 1: Uso de WKPAN externa, criptografada por uma “Master Key”
String ASCII de 36 caracteres no seguinte formato:
Posição Formato Descrição
001 N1 Modalidade:
“1” = WKPAN externa criptografada por Master
Key
002 N1 Modo de criptografia:
“0” - Master Key / Working DES (8 bytes)
“1” - Master Key / Working 3DES (16 bytes)
003-004 N2 Índice da Master Key a ser utilizada.
005-036 H32(B16) WKPAN criptografada pela Master Key (se modo =
“0”, somente os 8 primeiros bytes são utilizados).
Saídas:
psInput O formato da saída depende da modalidade de criptografia a ser utilizada:
Na Modalidade 1, não há dados de saída.
Retorno:
PP_OK ...........................Operação bem sucedida.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVPARM ................Parâmetro inválido passado à função.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_ERRPIN ....................A Master Key referenciada não existe.
PP_Display
Esta função envia uma mensagem ao display do pinpad. Devido à diversidade de formatos de display,
esta biblioteca convenciona que as mensagens devam ter 2 linhas por 16 colunas.
Entradas:
psMsg Mensagem de 32 caracteres (2 linhas x 16 colunas) a ser apresentada no
display do pinpad.
Saídas:
não há.
Retorno:
PP_OK ...........................Mensagem apresentada com sucesso.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
Exemplo:
/* --------> 32 posições:
“12345678901234567890123456789012” */
PP_Display (“••••OPERACAO••••••••REALIZADA•••”);
OPERACAO
REALIZADA
PP_DisplayEx
Esta função envia uma mensagem ao display do pinpad, de formato livre, permitindo o uso de todos
os recursos do display do equipamento.
Entradas:
psInput String ASCII de caracteres com o seguinte formato:
Posição Formato Descrição
001-003 N3 Tamanho da mensagem a seguir (xxx).
004-??? Axxx Mensagem a ser apresentada, podendo conter
caracteres de controle aceitos pelo display do
pinpad, tal como o CR (0Dh) para quebra de
linha.
Saídas:
não há.
Retorno:
PP_OK ...........................Mensagem apresentada com sucesso.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
Exemplo:
FIM!
ESTA OPERACAO FO
REALIZADA COM SU
PP_StartGetKey
O conjunto PP_StartGetKey / PP_GetKey (conforme descrito no item 3.1.4 - Funções “blocantes”)
captura uma tecla pressionada no pinpad.
Entradas:
não há.
Saídas:
não há.
Retorno:
PP_OK ...........................Processo iniciado com sucesso. PP_GetKey deve ser chamado para se
obter os resultados.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_GetKey
Esta função finaliza o processo iniciado por PP_StartGetKey (conforme descrito no item 3.1.4 -
Funções “blocantes”), devendo ser chamada constantemente enquanto retornar PP_PROCESSING.
Enquanto nessa situação, o processo pode ser cancelado pelo “checkout” através da função
PP_Abort.
Entradas:
não há.
Saídas:
não há.
Retorno:
PP_OK ...........................Pressionada tecla de confirmação (OK ou ENTER)
PP_CANCEL ...................Pressionada tecla de cancelamento.
PP_BACKSP ...................Pressionada tecla de limpeza (backspace).
PP_F1 a PP_F4 ..............Pressionada tecla de função.
PP_PROCESSING ...........Em processamento - deve-se chamar PP_GetKey novamente ou
PP_Abort para finalizar.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
Exemplo:
/* Função para aguardar tecla no pinpad. Supõe-se a existência de
uma função “TestaCancelamento” que verifica o cancelamento pelo
checkout */
do {
iStat = PP_GetKey ();
if (iStat == PP_PROCESSING && TestaCancelamento () == TRUE) {
PP_Abort ();
return APP_CANCEL;
}
} while (iStat == PP_PROCESSING);
return iStat;
}
PP_StartGetPIN
O conjunto PP_StartGetPIN / PP_GetPIN (conforme descrito no item 3.1.4 - Funções “blocantes”)
captura a senha do usuário (PIN) ou dados de identificação positiva e retorna um bloco de dados
criptografados segundo o método Master Key / Working Key (DES ou 3DES) ou DUKPT (DES ou 3DES).
Conforme colocado, além da captura de PIN convencional, as funções prevêem a entrada de uma
seqüência de mais de um dado, de maneira a ser fazer “identificação positiva”.
Para a criptografia de PIN, deve-se considerar somente um único dado a ser capturado.
Para a identificação positiva, pode-se considerar mais de um dado a ser capturado, sendo que
estes são concatenados para a geração do PIN-block. Caso o resultado tenha menos do que 4
dígitos, este é completado com zeros à esquerda. Caso tenha mais do que 12, os dígitos à direita
devem ser ignorados.
Durante a digitação no pinpad, a mensagem de 2x16 fornecida não deve ser alterada ou sobreposta,
sendo que os dados digitados devem aparecer na forma de asteriscos abaixo da mensagem.
<linha 1 da msg>
<linha 2 da msg>
****
Entradas:
psInput String ASCII de caracteres com o seguinte formato:
Posição Formato Descrição
001 N1 Modo de criptografia:
“0” - Master Key / Working DES (8 bytes)
“1” - Master Key / Working 3DES (16 bytes)
“2” - DUKPT DES
“3” - DUKPT 3DES
002-003 N2 Índice da Master Key ou do registro de
tratamento DUKPT.
004-035 H32(B16) Para os modos “0” e “1”, é a Working Key
(criptografada pela Master Key).
No modo “0”, somente os 8 primeiros bytes são
utilizados.
Nos modos “2” e “3” este campo é ignorado.
036-037 N2 Tamanho do PAN (de “13” a “19”). Caso o PAN
tenha menos de 13 dígitos, ele deverá ser
completado com zeros à esquerda.
038-056 A19 PAN, alinhado à esquerda (espaços à direita).
Se o pinpad estiver em modo “Comunicação
Segura”, o PAN deve ser codificado usando-se
DES/3DES Reverso com a chave WKPAN (ver item
4.4)
057 N1 Quantidade de dados a serem capturados (n)
Saídas:
não há.
Retorno:
PP_OK ...........................Processo iniciado com sucesso. PP_GetPIN deve ser chamado para se
obter os resultados.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVPARM ................Parâmetro inválido passado à função.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_GetPIN
Esta função finaliza o processo iniciado por PP_StartGetPIN (conforme descrito no item 3.1.4 -
Funções “blocantes”), devendo ser chamada constantemente enquanto retornar PP_PROCESSING ou
PP_NOTIFY. Enquanto nessa situação, o processo pode ser cancelado pelo “checkout” através da
função PP_Abort.
Durante o processamento são enviadas mensagens de notificação contendo as próprias descrições
dos dados sendo requeridos (que são parâmetros de entrada de PP_StartGetPIN), a partir da captura
do segundo dado. Portanto não há mensagem de notificação quando somente um dado é requerido,
como no caso de captura simples de PIN. Isso é feito para avisar o operador do checkout, de maneira
a auxiliar o portador do cartão na entrada dos dados de identificação positiva.
IMPORTANTE: O pinpad sempre apaga o display após a captura de PIN, seja esta bem ou mal
sucedida.
Entradas:
não há.
Saídas:
psOutput String ASCII de 36 caracteres com o seguinte formato:
Posição Formato Descrição
001-016 H16(B8) PIN criptografado
017-036 H20(B10) Número de série da chave (Key Serial Number),
somente no caso de DUKPT. Para
Master/Working Key, este campo é ignorado.
psMsgNotify Mensagem de 32 caracteres a ser apresentada no “checkout” caso a função
retorne PP_NOTIFY.
Retorno:
PP_OK ...........................PIN digitado e criptografado com sucesso - os resultados estão em
psOutput.
PP_INVCALL ..................Função PP_StartGetPIN não foi previamente chamada.
PP_PROCESSING ...........Em processamento - deve-se chamar PP_GetPIN novamente ou
PP_Abort para finalizar.
PP_NOTIFY ....................Em processamento - deve-se apresentar no “checkout” a mensagem
psMsgNotify e depois chamar PP_GetPIN novamente ou PP_Abort para
finalizar.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_CANCEL ...................Operação cancelada.
PP_ERRPIN ....................Master Key ou DUKPT não está presente no pinpad (IMPORTANTE: não
deve ser feita captura de PIN caso a chave não exista, sendo que este
erro deve retornar imediatamente!).
Exemplo:
int iStat;
char sInput[93], sOutput[36], sMsgNotify[32];
do {
iStat = PP_GetPIN (sOutput, sMsgNotify);
if (iStat == PP_NOTIFY)
MostraMsgCheckout (sMsgNotify);
if (iStat == PP_PROCESSING && TestaCancelamento () == TRUE) {
PP_Abort ();
return APP_CANCEL;
}
} while (iStat == PP_PROCESSING || iStat == PP_NOTIFY);
PP_StartCheckEvent
O conjunto PP_StartCheckEvent / PP_CheckEvent (conforme descrito no item 3.1.4 - Funções
“blocantes”) aguarda a ocorrência de um determinado evento no pinpad. Os seguintes eventos
podem ser verificados:
Pressionamento de uma tecla;
Passagem de um cartão magnético;
Inserção de um cartão com chip; e
Remoção de um cartão com chip.
Entradas:
psInput String ASCII de caracteres com o seguinte formato:
Posição Formato Descrição
001 N1 Controla evento de pressionamento de tecla.
Se =”0”, ignora teclas.
Se =”1”, verifica pressionamento de tecla.
002 N1 Controla evento de passagem de cartão
magnético.
Se =”0”, ignora cartão magnético.
Se =”1”, verifica passagem de cartão magnético.
003 N1 Controla evento de inserção/remoção de cartão
com chip.
Se =”0”, ignora cartão com chip.
Se =”1”, verifica inserção de cartão com chip.
Se =”2”, verifica remoção de cartão com chip.
004 N1 Controla evento de aproximação de cartão com
chip sem contato.
Se =”0”, não ativa a antena.
Se = “1”, ativa a antena e verifica a presença de
um cartão sem contato.
Saídas:
não há.
Retorno:
PP_OK ...........................Processo iniciado com sucesso. PP_CheckEvent deve ser chamado para
se obter os resultados.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_CheckEvent
Esta função finaliza o processo iniciado por PP_StartCheckEvent (conforme descrito no item 3.1.4 -
Funções “blocantes”), devendo ser chamada constantemente enquanto retornar PP_PROCESSING.
Enquanto nessa situação, o processo pode ser cancelado pelo “checkout” através da função
PP_Abort.
IMPORTANTE:
Esta função não deve mudar o estado do cartão com chip, ligando-o ou desligando-o. Caso o
cartão com chip seja selecionado para geração de evento, somente o seu sensor de presença
deve ser verificado.
Caso a detecção de cartão sem contato tenha sido requerida em PP_StartCheckEvent, a antena
sempre deve ser desligada ao final de PP_CheckEvent (mesmo que o evento detectado seja
outro).
Entradas:
não há.
Saídas:
psOutput String ASCII, cujo formato depende do evento gerado:
Evento de teclado:
Posição Formato Descrição
001 N1 Identificação do evento ocorrido: “0”
002-003 N2 Código da tecla pressionada:
”00” - OK ou ENTER ”07” - F4
”04” - F1 ”08” - BACKSPACE
”05” - F2 ”13” - CANCEL
”06” - F3
Evento de cartão magnético:
Posição Formato Descrição
001 N1 Identificação do evento ocorrido: “1”
002-003 N2 Tamanho da trilha 1
004-079 A76 Trilha 1 (sem os sentinelas e com o byte de
formato - primeiro caractere alfanumérico),
alinhada à esquerda com espaços à direita (*)
080-081 N2 Tamanho da trilha 2
082-118 A37 Trilha 2 (sem os sentinelas), alinhada à esquerda
com espaços à direita (*)
119-121 N3 Tamanho da trilha 3 (**)
122-225 A104 Trilha 3 (sem os sentinelas), alinhada à esquerda
com espaços à direita (*)
(*)
Se o pinpad estiver em modo “Comunicação Segura”, o PAN das trilhas
vem codificado pela chave WKPAN (ver item 4.4).
(**)
Se o pinpad estiver em modo “Comunicação Segura”, o campo de
“Tamanho da trilha 3” não deve ser preenchido, pois a Trilha 2 pode atingir
40 caracteres (ver explicação no item 4.4)!!
Evento de cartão com chip:
Posição Formato Descrição
001 N1 Identificação do evento ocorrido: “2”
002 N1 Presença do cartão com chip:
“0” - Cartão com chip ausente.
”1” - Cartão com chip presente.
Evento de cartão com chip sem contato:
Posição Formato Descrição
001 N1 Identificação do evento ocorrido: “3”
002 N1 Presença do cartão com chip sem contato:
“0” - Cartão com chip sem contato não foi
detectado em 2 (dois) minutos.
”1” - Cartão com chip sem contato foi detectado.
Retorno:
PP_OK ...........................Evento ocorrido.
PP_INVCALL ..................Função PP_StartCheckEvent não foi previamente chamada.
PP_PROCESSING ...........Em processamento - deve-se chamar PP_CheckEvent novamente ou
PP_Abort para finalizar.
PP_MCDATAERR ...........Detectado evento de cartão magnético, porém houve erro de leitura
(nenhuma trilha pôde ser lida).
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_EncryptBuffer
Esta função criptografa um bloco de dados de 8 bytes utilizando uma Master Key e uma Working Key,
seguindo o mesmo algoritmo utilizado pela captura de PIN.
Entradas:
psInput String ASCII de 51 caracteres com o seguinte formato:
Posição Formato Descrição
001 N1 Modo de criptografia:
“0” - Master Key / Working DES (8 bytes)
“1” - Master Key / Working 3DES (16 bytes)
002-003 N2 Índice da Master Key
004-035 H32(B16) Working Key (criptografada pela Master Key),
sendo que no modo “0”, somente os 8 primeiros
bytes são utilizados.
036-051 H16(B8) Dados a serem criptografados.
No modo “Comunicação Segura”, estes dados
vêm codificados usando-se DES/3DES Reverso
com a chave WKPAN (ver item 4.4)
Saídas:
psOutput String ASCII de 16 caracteres com o seguinte formato:
Posição Formato Descrição
001-016 H16(B8) Dados criptografados.
Retorno:
PP_OK ...........................Processo finalizado com sucesso.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVPARM ................Parâmetro inválido passado à função.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_ERRPIN ....................Master Key não está presente no pinpad.
PP_INVPARM ................Índice de Master Key fornecido está fora da faixa usada pelo pinpad (ou
outro parâmetro inválido foi fornecido em psInput).
Exemplo:
int iStat;
char sOutput[16];
PP_GetDUKPT
Esta função obtém o KSN (Key Serial Number) corrente de um registro de tratamento DUKPT.
Entradas:
psInput String ASCII de 3 caracteres com o seguinte formato:
Posição Formato Descrição
001 N1 Modo de criptografia:
“2” - DUKPT DES
”3” - DUKPT 3DES
002-003 N2 Índice do registro de tratamento DUKPT.
Saídas:
psOutput String ASCII de 20 caracteres com o seguinte formato:
Posição Formato Descrição
001-020 H20(B10) KSN (Key Serial Number)
Retorno:
PP_OK ...........................Dados obtidos com sucesso.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_INVMODEL ..............Esta funcionalidade não é suportada pelo pinpad.
PP_ERRPIN ....................Não há dados carregados para o índice fornecido.
PP_INVPARM ................Índice fornecido está fora da faixa usada pelo pinpad.
PP_StartChipDirect
O conjunto PP_StartChipDirect / PP_ChipDirect (conforme descrito no item 3.1.4 - Funções
“blocantes”), permite o acesso direto aos cartões com chip (principal ou SAM).
Adicionalmente, este comando possibilita a captura de um PIN para verificação direta no chip.
Entradas:
psInput String ASCII de tamanho variável (até 527 caracteres), com o seguinte
formato:
Posição Formato Descrição
001 N1 Cartão com chip a ser usado:
“0” - Cartão do acoplador principal
“1” - SAM #1
...
“8” - SAM #8
“9” - Cartão sem contato.
002 N1 Operação a ser executada:
“0” - Desligar o cartão (para cartão sem contato,
desativa-se a antena).
“1” - Ligar o cartão (para cartão sem contato,
ativa-se a antena e, depois, o cartão).
“2” - Trocar comando com o cartão
“3” - Verificar PIN diretamente no cartão
003-005 N3 Tamanho do comando a seguir, em bytes.
Para operação “0” ou “1”, o tamanho é zerado.
006-??? Hxx(Byy) Comando a ser enviado ao cartão.
Se operação = “2”, aceitam-se seguintes
formatos:
CLA INS P1 P2
CLA INS P1 P2 Le
CLA INS P1 P2 Lc XX XX ... XX
CLA INS P1 P2 Lc XX XX ... XX Le
Se operação = “3”, deve-se fornecer somente os
quatro primeiros bytes do comando a ser
enviado ao cartão (CLA INS P1 P2), pois o resto é
montado automaticamente conforme formato
do “pinblock”.
??? N1 Formato do “pinblock” (somente se operação =
“3”):
“0” = 0T PP PP ... FF (8 bytes, PIN 4 a 12 dígitos)
“1” = 2T PP PP ... FF (8 bytes, PIN 4 a 12 dígitos)
“2” = PP PP PP ... FF (8 bytes, PIN 4 a 12 dígitos)
Saídas:
não há.
Retorno:
PP_OK ...........................Processo iniciado com sucesso. PP_GetPIN deve ser chamado para se
obter os resultados.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVPARM ................Parâmetro inválido passado à função.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_ChipDirect
Esta função finaliza o processo iniciado por PP_StartChipDirect (conforme descrito no item 3.1.4 -
Funções “blocantes”), devendo ser chamada constantemente enquanto retornar PP_PROCESSING.
Enquanto nessa situação, o processo pode ser cancelado pelo “checkout” através da função
PP_Abort.
Entradas:
não há.
Saídas:
psOutput String ASCII de tamanho variável (até 519 caracteres) com o seguinte
formato:
Posição Formato Descrição
001-003 N3 Tamanho da resposta do cartão a seguir, em
bytes..
004-??? Hxx(Byy) Resposta do cartão:
Se operação = “0”, não há.
Se operação = “1”, é o ATR completo do cartão.
Se operação = “2” ou “3”, é a resposta ao
comando enviado, seguida obrigatoriamente
pelos bytes SW1 e SW2.
Retorno:
PP_OK ...........................Operação bem sucedida.
PP_PROCESSING ...........Em processamento - deve-se chamar PP_ChipDirect novamente ou
PP_Abort para finalizar.
PP_INVCALL ..................Função PP_StartChipDirect não foi previamente chamada.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_INVMODEL ..............Esta funcionalidade não é suportada pelo pinpad.
PP_NOCARD ..................Não há cartão com chip presente no acoplador (ou antena).
PP_DUMBCARD ............Cartão não responde (“mudo”) ou chip não presente (não se aplica a
cartões sem contato).
PP_ERRCARD.................Erro de comunicação do pinpad com o cartão com chip.
Observações:
Dependendo da implementação do pinpad, ele poderá ou não tratar internamente os status de
retorno “61 xx” e “6C xx” dos cartões T=0. Dessa forma, a aplicação de “checkout” terá que estar
preparada para tratar externamente esses dois casos, caso o pinpad já não o faça.
Para cartões sem contato, a antena deve ser automaticamente desativada no caso dos erros
PP_NOCARD e PP_ERRCARD.
O “checkout” deve sempre desativar a antena após o uso de cartão sem contato. Caso isto não
seja feito, o fabricante do pinpad pode estabelecer um “timeout” de ociosidade (sugestão 2
minutos) e desligar a antena automaticamente.
PP_StartRemoveCard
O conjunto PP_StartRemoveCard / PP_RemoveCard (conforme descrito no item 3.1.4 - Funções
“blocantes”) aguarda a remoção do cartão com chip. Ele possui dois comportamentos diferentes, de
acordo com a presença ou não de um cartão no acoplador de “cartão usuário” com chip.
Cartão presente:
Desliga a alimentação do cartão com chip e apresenta a mensagem definida por psMsg,
alternada com uma mensagem de “RETIRE O CARTAO”, permanecendo neste estado até a
retirada do cartão.
Cartão ausente:
Apresenta a mensagem definida por psMsg e retorna imediatamente.
Em ambos os casos, a mensagem definida por psMsg é deixada ao final no display.
Aconselha-se sempre o uso desta função ao final do fluxo de operação, seja ele bem ou mal
sucedido.
Entradas:
psMsg Mensagem de 32 caracteres (2 linhas x 16 colunas) a ser apresentada no
display do pinpad.
Saídas:
não há.
Retorno:
PP_OK ...........................Processo iniciado com sucesso. PP_RemoveCard deve ser chamado para
se obter os resultados.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVPARM ................Parâmetro inválido passado à função.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_RemoveCard
Esta função finaliza o processo iniciado por PP_StartRemoveCard (conforme descrito no item 3.1.4 -
Funções “blocantes”), devendo ser chamada constantemente enquanto retornar PP_PROCESSING ou
PP_NOTIFY. Enquanto nessa situação, o processo pode ser cancelado pelo “checkout” através da
função PP_Abort.
Caso um cartão com chip esteja inserido, a mensagem de notificação “RETIRE O CARTAO” deve ser
enviada uma única vez ao “checkout”.
Entradas:
não há.
Saídas:
psMsgNotify Mensagem de 32 caracteres a ser apresentada no “checkout” caso a função
retorne PP_NOTIFY.
Retorno:
PP_OK ...........................Cartão foi retirado (ou já não estava presente).
PP_PROCESSING ...........Em processamento - deve-se chamar PP_RemoveCard novamente ou
PP_Abort para finalizar.
PP_NOTIFY ....................Em processamento - deve-se apresentar no “checkout” a mensagem
psMsgNotify e depois chamar PP_RemoveCard novamente ou PP_Abort
para finalizar.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVCALL ..................Função PP_StartRemoveCard não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_StartGenericCmd
O conjunto PP_StartGenericCmd / PP_GenericCmd (conforme descrito no item 3.1.4 - Funções
“blocantes”) executa um comando proprietário de uma das redes adquirentes.
O detalhamento dos possíveis comandos proprietários existentes não é objeto desta especificação,
sendo definidos em documentação à parte fornecida pela rede adquirente. Esta especificação
fornece apenas o formato genérico para a montagem desses comandos.
Entradas:
psInput String ASCII de tamanho variável com o seguinte formato:
Posição Formato Descrição
001-002 N2 Identificador da Rede Adquirente, conforme
Tabela de Parâmetros x AID.
003-005 N3 Tamanho dos dados a seguir, em caracteres.
006-??? A??? Dados proprietários cujo formato é especificado
pela rede adquirente em questão.
Saídas:
não há.
Retorno:
PP_OK ...........................Processo iniciado com sucesso. PP_GenericCmd deve ser chamado para
se obter os resultados.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVPARM ................Parâmetro inválido passado à função.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_GenericCmd
Esta função finaliza o processo iniciado por PP_StartGenericCmd (conforme descrito no item 3.1.4 -
Funções “blocantes”), devendo ser chamada constantemente enquanto retornar PP_PROCESSING ou
PP_NOTIFY. Enquanto nessa situação, o processo pode ser cancelado pelo “checkout” através da
função PP_Abort.
Entradas:
não há.
Saídas:
psOutput String ASCII de tamanho variável com o seguinte formato:
Posição Formato Descrição
001-003 N3 Tamanho dos dados a seguir, em caracteres.
004-??? A??? Dados proprietários de resposta cujo formato é
especificado pela rede adquirente em questão.
psMsgNotify Mensagem de 32 caracteres a ser apresentada no “checkout” caso a função
retorne PP_NOTIFY.
Retorno:
PP_OK ...........................Operação finalizada com sucesso.
PP_PROCESSING ...........Em processamento - deve-se chamar PP_GenericCmd novamente ou
PP_Abort para finalizar.
PP_NOTIFY ....................Em processamento - deve-se apresentar no “checkout” a mensagem
psMsgNotify e depois chamar PP_GenericCmd novamente ou PP_Abort
para finalizar.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVCALL ..................Função PP_StartGenericCmd não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
Outros retornos ............Demais retornos específicos do processamento no módulo da rede
adquirente não podem ser previstos por esta especificação.
Função Descrição
PP_StartGetCard Inicia o processo de aceitação de um cartão, seja ele magnético ou
PP_GetCard com chip.
PP_ResumeGetCard Continua o processo de aceitação de um cartão com chip após a
manutenção de tabelas de parâmetros (seja ela bem ou mal
sucedida).
PP_ChangeParameter Altera temporariamente o valor de um dos parâmetros EMV das
tabelas usadas no processamento do cartão.
PP_StartGoOnChip Continua o processo de aceitação de um cartão, caso seja um cartão
PP_GoOnChip com chip.
PP_FinishChip Finaliza o processo de aceitação de um cartão com chip caso a
transação tenho requerido autorização online.
Início
PP_StartGetCard
PP_GetCard
PP_ResumeGetCard
...
magnético chip
Tipo cartão?
PP_StartGoOnChip
PP_GoOnChip
...
aprovar offline ou
pedir autorização online
decisão?
negada
PP_FinishChip
PP_StartGetCard
O conjunto PP_StartGetCard / PP_GetCard (conforme descrito no item 3.1.4 - Funções “blocantes”)
inicia o processo de pagamento com cartão, seja ele magnético ou com chip.
Entradas:
psInput String ASCII de tamanho variável com o seguinte formato:
Posição Formato Descrição
001-002 N2 Identificador da Rede Adquirente, conforme
Tabela de Parâmetros x AID. Para abranger
todas as redes, deve-se usar o valor “00”.
003-004 N2 Tipo de aplicação desejada, conforme Tabela de
Parâmetros x AID. Para qualquer aplicação, usar
“99”. Para uma lista de específica de aplicações,
usar “00”.
005-016 N12 Valor inicial da transação em centavos (Amount,
authorized), podendo ser 0 (zero) caso este dado
não esteja disponível no início da transação.
017-022 N6 Data da transação (“AAMMDD”)
023-028 N6 Hora da transação (“HHMMSS”)
029-038 N10 “Time-stamp” das tabelas de parâmetros,
formado por dia, mês, ano e um número
seqüencial (“DDMMAAAASS”) - ver Capítulo 4.
Caso seja definida uma Rede Adquirente, este
“time-stamp” refere-se somente às tabelas
relativas a ela.
039-040 N2 Quantidade de entradas da lista a seguir, se tipo
de aplicação desejada for “00”
IMPORTANTE: Este campo não é opcional,
devendo receber o valor “00” caso não haja lista
a seguir.
041-??? N4 Identificador da rede + índice para Tabela de
Parâmetros x AID.
... ...
???-??? N4 Identificador da rede + índice para Tabela de
Parâmetros x AID.
Saídas:
não há
Retorno:
PP_OK ...........................Processo iniciado com sucesso. PP_GetCard deve ser chamado para se
obter os resultados.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVPARM ................Parâmetro inválido passado à função.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_GetCard
Esta função finaliza o processo iniciado por PP_StartGetCard (conforme descrito no item 3.1.4 -
Funções “blocantes”), devendo ser chamada diversas vezes enquanto retornar PP_PROCESSING ou
PP_NOTIFY. Enquanto nessa situação, o processo pode ser cancelado pelo “checkout” através da
função PP_Abort.
Entradas:
não há
Saídas:
psOutput String ASCII de tamanho variável com o seguinte formato:
Posição Formato Descrição
001-002 N2 Tipo de cartão lido:
“00” - Magnético
“01” - Moedeiro VISA Cash sobre TIBC v1
“02” - Moedeiro VISA Cash sobre TIBC v3
“03” - EMV com contato
“04” - Easy-Entry sobre TIBC v1
“05” - Chip sem contato simulando tarja
“06” - EMV sem contato
003 N1 Status da última leitura de cartão com chip. Este
dado é usado pelo Servidor TEF quando o tipo de
cartão lido for “0” (magnético) e este tem
indicação da presença de chip, de modo a recusá-
lo ou não.
“0” - Bem sucedida (ou outro status que não
implica em fallback). Nesse caso o cartão
magnético com indicação da presença de chip
não deve ser aceito.
“1” - Erro passível de fallback. Nesse caso o
Servidor TEF pode solicitar aprovação de
transação com cartão magnético, mesmo que
este tenha indicação da presença de chip
(depende das definições da rede adquirente).
“2” - Aplicação requerida não suportada. Nesse
caso o Servidor TEF pode solicitar aprovação de
transação com cartão magnético, mesmo que
este tenha indicação da presença de chip
(depende das definições da rede adquirente).
004-005 N2 Tipo de aplicação selecionada, conforme Tabela
de Parâmetros x AID (posição 043-044).
006-007 N2 Identificador da rede adquirente, conforme
Tabela de Parâmetros x AID (posição 005-006).
Retorno:
Esta função, devido a sua complexidade, admite a maioria dos códigos de retorno possíveis,
destacando-se:
PP_OK ...........................Operação finalizada com sucesso.
PP_INVCALL ..................Função PP_StartGetCard não foi previamente chamada.
PP_MCDATAERR ...........Erro de leitura de cartão magnético (esta situação não deve “limpar” o
“status da última leitura do cartão com chip”).
PP_PROCESSING ...........Em processamento - deve-se chamar PP_GetCard novamente ou
PP_Abort para finalizar.
PP_NOTIFY ....................Em processamento - deve-se apresentar no “checkout” a mensagem
psMsgNotify e depois chamar PP_GetCard novamente ou PP_Abort
para finalizar.
PP_TABEXP ...................Tabelas do pinpad estão expiradas e não há Biblioteca TEF configurada
(ver referências para este caso em PP_ResumeGetCard, no Item 3.5).
Observações:
Um sistema que suporta cartões sem contato deve desabilitar essa interface nos seguintes
casos:
Quando o PP_GetCard retornar os erros PP_CTLSSPROBLEMS, PP_CTLSSAPPNAV,
PP_CTLSSAPPNAUT ou PP_CTLSSINVALIDAT.
Quando PP_GetCard retornar o erro PP_CTLSSCOMMERR pela segunda vez consecutiva.
Início
PP_StartGetCard PP_StartGetCard
Habilita cartão sem Habilita cartão sem
contato = “1” (Sim) contato = “0” (Não)
PP_NOTIFY
PP_PROCESSING PP_CTLSSPROBLEMS, PP_CTLSAPPNAV,
PP_CTLSSAPPNAUT ou PP_CTLSSINVALIDAT
Continua...
Exemplo:
int iStat;
char sInput[40], sOutput[350], sMsgNotify[32];
do {
iStat = PP_GetCard (sOutput, sMsgNotify);
if (iStat == PP_PROCESSING && TestaCancelamento () == TRUE) {
PP_Abort ();
return APP_CANCEL;
}
if (iSt == PP_MCDATAERR)
PP_Display (“ERRO•DE•LEITURA•TENTE•NOVAMENTE•”);
if (iStat == PP_NOTIFY)
MostraMsgCheckout (sMsgNotify);
} while (iStat == PP_PROCESSING || iStat == PP_MCDATAERR
|| iStat == PP_NOTIFY);
“00000000074B5390702278480569^MARTINS/WILSON FAZZIO•••^0207101987”
“600000000000530000000••375390702278480569=0207101000098765300000”
“0•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••”
“•••••••••••••••••••••••••••••••••••••••••00•••••••••••••••••••00”
“••••••••••••••••000••••••••••••••••••••••••••00000000•••••••••••”
“••••••••00000000000000”
*/
“03001010500•••••••••••••••••••••••••••••••••••••••••••••••••••••”
“•••••••••••••••••••••••29376436871651006=0305000523966••••••••00”
“0•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••”
“•••••••••••••••••••••••••••••••••••••••••15376436871651006••••01”
“AMEX•GREEN••••••246SERGIO SANTOS•••••••••••••05013100•••••••••••”
“••••••••00000000076000”
*/
PP_ResumeGetCard
Caso PP_GetCard retorne PP_TABEXP, isso indica que o “time-stamp” das tabelas difere. Nesse caso,
o “checkout” deverá tentar atualizá-las através das funções descritas no item 3.5.
Independentemente do resultado dessa operação, o processo deverá continuar através da função
PP_ResumeGetCard.
Esta função comporta-se como se fosse uma nova chamada a PP_StartGetCard, considerando-se os
mesmos parâmetros passados anteriormente, de maneira a retomar o processo sem a verificação do
“time-stamp”.
Entradas:
não há
Saídas:
não há
Retorno:
PP_OK ...........................Processo retomado com sucesso. PP_GetCard deve ser chamado para se
obter os resultados.
PP_INVCALL ..................Chamada inválida, PP_GetCard não retornou PP_TABEXP.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVPARM ................Parâmetro inválido passado à função.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
Exemplo:
do {
iStat = PP_GetCard (sOutput, sMsgNotify);
if (iStat == PP_PROCESSING && TestaCancelamento () == TRUE) {
PP_Abort ();
return APP_CANCEL;
}
if (iStat == PP_NOTIFY)
MostraMsgCheckout (sMsgNotify);
if (iStat == PP_TABEXP) {
AtualizaTabelas ();
iStat = PP_ResumeGetCard ();
if (iStat == PP_OK) continue;
}
} while (iStat == PP_PROCESSING || iStat == PP_MCDATAERR
|| iStat == PP_NOTIFY);
PP_ChangeParameter
Este comando permite que o “checkout” altere temporariamente qualquer um dos parâmetros da
Tabela de Parâmetros x AID (ver item 7.1) correspondente à aplicação selecionada no cartão com
chip, sendo que ele somente pode ser utilizado após o comando PP_GetCard. O valor não é alterado
nas tabelas, sendo somente relevante para o cartão sendo processado no momento.
Ele é extremamente útil para resolver situações específicas não previstas pelas tabelas, como, por
exemplo, o caso de estabelecimentos que utilizam mais de uma moeda (ver exemplo).
Entradas:
psInput String ASCII de tamanho variável com o seguinte formato:
Posição Formato Descrição
001-002 N2 Tamanho dos dados a seguir, em bytes.
003-??? Hxxx(Byyy) Seqüência de parâmetros a alterar, no formato
TLV.
Saídas:
não há
Retorno:
PP_OK ...........................Comando executado com sucesso.
PP_INVCALL ..................Chamada inválida. A chamada anterior de PP_GetCard não processou
com sucesso um cartão com chip EMV.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVPARM ................Parâmetro inválido passado à função.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
Exemplo:
int iStat;
char sInput[40];
/* Após o PP_StartGetCard/PP_GetCard,
altera a moeda para dólar:
Transaction Currency Code = 840 -> 5F2A020840
Transaction Currency Exponent = 2 -> 5F360102
*/
PP_StartGoOnChip
O conjunto PP_StartGoOnChip / PP_GoOnChip (conforme descrito no item 3.1.4 - Funções
“blocantes”) continua o processo de tratamento de cartões com chip. Caso PP_GetCard tenha
reportado a passagem de um cartão magnético (ou chip sem contato simulando tarja), esta função
não deverá ser utilizada.
Entradas:
psInput String ASCII de tamanho variável com o seguinte formato:
Posição Formato Descrição
001-012 N12 Novo valor da transação (Amount, authorized) em
centavos, podendo incluir novos valores
apresentados ao “checkout” após
PP_StartGetCard (como por exemplo, taxa do
serviço, saque ou troco). Caso não existam
acréscimos ao valor, ele deverá ser aqui mantido
idêntico ao passado em PP_StartGetCard.
013-024 N12 Parcela do valor da transação referente a saque
ou troco - cashback (Amount, other) em centavos.
Caso esse valor não exista, este campo deve ser
preenchido com zeros.
025 N1 Resultado da consulta à Lista Negra (só para EMV
com contato):
“0” - PAN não consta na Lista Negra.
”1” - PAN consta na Lista Negra.
026 N1 Obrigatoriedade de conexão (só para EMV com
contato):
“0” - Transação pode ser efetuada offline.
“1” - Transação somente pode ser efetuada
online.
027 N1 Requerimento de PIN nas tabelas do Servidor TEF
(para uso no caso de cartões Easy-Entry TIBC v1):
“0” - Não é exigida a verificação de um PIN; ou
“1” - É exigida a verificação de um PIN.
028 N1 Modo de criptografia:
“0” - Master Key / Working DES (8 bytes)
“1” - Master Key / Working 3DES (16 bytes)
“2” - DUKPT DES
”3” - DUKPT 3DES
029-030 N2 Índice da Master Key ou do registro de
tratamento DUKPT.
Saídas:
não há
Retorno:
PP_OK ...........................Processo iniciado com sucesso. PP_GoOnChip deve ser chamado para se
obter os resultados.
PP_GoOnChip
Esta função finaliza o processo iniciado por PP_StartGoOnChip (conforme descrito no item 3.1.4 -
Funções “blocantes”), devendo ser chamada diversas vezes enquanto retornar PP_PROCESSING ou
PP_NOTIFY. Enquanto nessa situação, o processo pode ser cancelado pelo “checkout” através da
função PP_Abort.
Entradas:
não há
Saídas:
psOutput String ASCII de tamanho variável com o seguinte formato:
Posição Formato Descrição
001 N1 Decisão tomada:
“0” - Transação aprovada offline.
“1” - Transação negada.
“2” - Transação requer autorização online.
002 N1 Assinatura em papel deve ser obtida (“0”-não /
“1”-sim).
003 N1 PIN foi verificado offline (“0”-não / “1”-sim).
004 N1 Número de apresentações inválidas de PIN
offline (retornar ‘9’ caso este valor seja 10).
005 N1 PIN offline foi bloqueado na última apresentação
inválida (“0”-não / “1”-sim).
006 N1 PIN capturado para verificação online (“0”-não /
“1”-sim). Se este campo estiver com “0”, os dois
campos seguintes não devem ser considerados.
007-022 H16(B8) PIN criptografado
023-042 H20(B10) Número de série da chave (Key Serial Number),
somente no caso de DUKPT. Para
Master/Working Key, este campo é ignorado.
043-045 N3 Tamanho em bytes dos dados para envio no
campo 55 da mensagem ISO8583 (de “000” a
“yyy”).
046-??? Hxxx(Byyy) Dados para envio no campo 55 da mensagem
ISO8583, no formato TLV (alinhados à esquerda,
primeiro os mandatórios depois os opcionais).
Campos com tags não encontradas simplesmente
não são enviados aqui.
???-??? N3 Tamanho dos dados a seguir, em caracteres
Retorno:
Esta função, devido a sua complexidade, admite a maioria dos códigos de retorno possíveis,
destacando-se:
PP_OK ...........................Operação finalizada com sucesso.
PP_INVCALL ..................Função PP_StartGoOnChip não foi previamente chamada.
PP_PROCESSING ...........Em processamento - deve-se chamar PP_GoOnChip novamente ou
PP_Abort para finalizar.
PP_NOTIFY ....................Em processamento - deve-se apresentar no “checkout” a mensagem
psMsgNotify e depois chamar PP_GoOnChip novamente ou PP_Abort
para finalizar.
Exemplo:
int iStat;
char sInput[86], sOutput[500], sMsgNotify[32];
do {
iStat = PP_GoOnChip (sOutput, sMsgNotify);
if (iStat == PP_NOTIFY)
MostraMsgCheckout (sMsgNotify);
if (iStat == PP_PROCESSING && TestaCancelamento () == TRUE) {
PP_Abort ();
return APP_CANCEL;
}
} while (iStat == PP_PROCESSING || iStat == PP_NOTIFY);
“2000018D540BCF3001577AFFFF9876543210E0000C047”
“9F2701809F260804CA8F1428AB5901950580000100009B02E800”
“9F34030201009F100706011A039000005F28020076000”
PP_FinishChip
Este comando finaliza o processamento de cartão com chip, caso PP_GoOnChip tenha requerido
aprovação online ou caso a transação já tenha sido aprovada offline. Uma transação negada em
PP_GoOnChip (decisão “1”) não requer uma chamada a PP_FinishChip.
Entradas:
psInput String ASCII de tamanho variável com o seguinte formato:
Posição Formato Descrição
001 N1 Status da comunicação com o Host:
“0” - OK, comunicação bem sucedida.
“1” - Não foi possível comunicar com o Host.
Nesse caso, os demais campos deste parâmetro
não são tratados, devendo ser passados zerados.
002 N1 Tipo de Emissor:
“0” - EMV ‘Full Grade’.
“1” - EMV ‘Partial Grade’.
003-004 A2 Authorization Response Code (Código de
autorização recebido do Host)
005-007 N3 Tamanho em bytes dos dados recebidos no
campo 55 da mensagem ISO8583 (de “000” a
“yyy”)
008-??? Hxxx(Byyy) Dados em formato TLV recebidos no campo 55
da mensagem ISO8583
???-??? N3 Tamanho dos dados a seguir, em caracteres
???-??? A??? Parâmetros de entrada específicos da rede
adquirente selecionada (uso futuro)
psTags String ASCII de tamanho variável com o seguinte formato:
Posição Formato Descrição
001-003 N3 Tamanho em bytes da lista de tags a seguir
(“000” a “yyy”).
004-??? Hxxx(Byyy) Lista de tags para montagem de conjunto de
dados finais requeridos.
Saídas:
psOutput String ASCII de tamanho variável com o seguinte formato:
Posição Formato Descrição
001 N1 Decisão tomada:
“0” - Transação aprovada.
“1” - Transação negada pelo cartão.
“2” - Transação negada pelo Host.
002-004 N3 Tamanho em bytes dos dados finais requeridos
(de “000” a “yyy”).
005-??? Hxxx(Byyy) Dados finais requeridos, no formato TLV. Campos
com tags não encontradas simplesmente não são
enviados aqui.
???-??? N2 Tamanho em bytes do Issuer Script Results
(de “00” a “yy”).
???-??? Hxx(Byy) Issuer Script Results
???-??? N3 Tamanho dos dados a seguir, em caracteres
???-??? A??? Dados de retorno específicos da rede adquirente
selecionada (uso futuro)
Retorno:
Esta função, devido a sua complexidade, admite a maioria dos códigos de retorno possíveis,
destacando-se:
PP_OK ...........................Processo finalizado com sucesso.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVCALL ..................Função PP_GoOnChip não foi previamente chamada.
PP_INVPARM ................Parâmetro inválido passado à função.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
Exemplo:
int iStat;
char sInput[500], sOutput[500];
“00159F2701409F260819C5D08A4419BBD900000”
- Transação aprovada
- 15 bytes em formato TLV
- 0 bytes de Issuer Script Results
*/
Função Descrição
PP_TableLoadInit Inicia o processo de carga de tabelas
PP_TableLoadRec Carrega um ou mais registros das tabelas
PP_TableLoadEnd Finaliza o processo de carga de tabelas
PP_GetTimeStamp Obtém o “time-stamp” das tabelas.
IMPORTANTE: O pinpad gerencia tabelas separadas para cada rede adquirente. Desta forma:
Quando os comandos acima referenciam uma das redes (identificador da rede ≥ “01”),
somente as tabelas desta rede são alteradas, preservando-se as outras. O “time-stamp”,
neste caso, refere-se somente às tabelas desta rede, podendo ser diferente dos “time-
stamps” das tabelas das outras redes.
Quando os comandos acima referenciam todas as redes (identificador da rede = “00”), todas
as tabelas são alteradas, sendo que todas as redes passam a ter tabelas com o mesmo “time-
stamp”.
PP_TableLoadInit
Esta função inicia o processo de carga (ou atualização) de tabelas. Caso ela retorne PP_OK ou
PP_TABEXP, o processo pode continuar através das funções PP_TableLoadRec e PP_TableLoadEnd.
IMPORTANTE: Esta função não faz críticas quanto ao conteúdo do “time-stamp”, apenas retorna
status diferenciado por uma questão informativa. Ela deve sempre iniciar o processo de carga de
tabelas, acatando incondicionalmente a demanda do “checkout”.
Entradas:
psInput String ASCII de 12 caracteres contendo:
Posição Formato Descrição
001-002 N2 Identificador da Rede Adquirente cujas tabelas
serão atualizadas, conforme Tabela de
Parâmetros x AID. Para abranger todas as redes,
deve-se usar o valor “00”.
003-012 N10 “Time-stamp” das tabelas de parâmetros,
formado por dia, mês, ano e um número
seqüencial (“DDMMAAAASS”).
Caso seja definida uma Rede Adquirente, este
“time-stamp” refere-se somente às tabelas
relativas a ela.
Saídas:
não há.
Retorno:
PP_OK ...........................Tabelas já estão atualizadas (“time-stamp” é o mesmo).
PP_TABEXP ...................Tabelas estão desatualizadas (“time-stamp” é diferente).
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_TableLoadRec
Esta função carrega um ou mais registros das tabelas, armazenando-os de forma temporária. Isso é
importante para preservar as tabelas atuais em caso de erro na operação de atualização.
Entradas:
psInput String ASCII contendo um ou mais registros de tabelas concatenados,
conforme layout descrito no Capítulo 7. Considerando-se que cada registro é
iniciado pelo seu tamanho
Posição Formato Descrição
001-002 N2 Quantidade de registros a seguir
003-??? Um ou mais registros concatenados, cada um
iniciado pela informação de tamanho, conforme
descrito no Capítulo 7.
Saídas:
não há.
Retorno:
PP_OK ...........................Operação bem sucedida.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVCALL ..................Função PP_TableLoadInit não foi previamente chamada com retorno
PP_OK ou PP_TABEXP.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_TABERR ...................Erro ao tentar armazenar registros.
PP_TableLoadEnd
Esta função finaliza o processo de carga (ou atualização) de tabelas, fazendo com que os registros
fornecidos através de PP_TableLoadRec sejam armazenados de forma definitiva, substituindo as
tabelas anteriores (caso existentes). Nesse momento, o “time-stamp” fornecido através de
PP_TableLoadInit passa a vigorar para as novas tabelas.
Entradas:
não há.
Saídas:
não há.
Retorno:
PP_OK ...........................Operação bem sucedida.
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_INVCALL ..................Função PP_TableLoadInit não foi previamente chamada com retorno
PP_OK ou PP_TABEXP.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
PP_TABERR ...................Erro ao tentar armazenar tabelas.
PP_GetTimeStamp
Esta função obtém o “time-stamp” das tabelas, para uso caso o “checkout” necessite dessa
informação.
Entradas:
psInput String ASCII de 2 caracteres contendo:
Posição Formato Descrição
001-002 N2 Identificador da Rede Adquirente cujas tabelas
serão atualizadas, conforme Tabela de
Parâmetros x AID. Deve-se usar o valor “00”
quando utiliza-se um “time-stamp” único para
todas as redes (isso só faz sentido se as tabelas
foram carregadas usando-se também “00” na
função PP_TableLoadInit).
Saídas:
psOutput String ASCII de 10 caracteres contendo:
Posição Formato Descrição
001-010 N10 “Time-stamp” das tabelas de parâmetros,
formado por dia, mês, ano e um número
seqüencial (“DDMMAAAASS”).
Caso seja definida uma Rede Adquirente, este
“time-stamp” refere-se somente às tabelas
relativas a ela.
Caso não exista tabela carregada para a rede
informada, o “time-stamp” será “0000000000”.
Retorno:
PP_OK ...........................Operação executada com sucesso
PP_NOTOPEN................Função PP_Open não foi previamente chamada.
PP_PORTERR .................Erro de comunicação: porta serial do pinpad provavelmente ocupada.
PP_COMMERR ..............Erro de comunicação: pinpad provavelmente desconectado ou
problemas com a interface serial.
4. Tratamentos internos à
Biblioteca/Pinpad
INSIRA OU
PASSE O CARTAO
Caso o pinpad suporte cartão sem contato e todas as condições abaixo sejam válidas, a seguinte
mensagem deve ser mostrada (sempre enfatizando a aproximação de um cartão sem contato) e a
antena deve ser ativada:
APROXIME, INSIRA
OU PASSE CARTAO
Caso o parâmetro de habilitação da interface sem contato exista em PP_StartGetCard, ele deve
indicar “Sim”.
Ao menos um dos registros da Tabela de Parâmetros x AID envolvidos na seleção indique essa
tecnologia (posição 167 “0”);
Se o valor fornecido estiver zerado, ao menos um desses registros da Tabela de Parâmetros x
AID indique a possibilidade de processamento online nesse caso (posição 166 “0”); e
Ao menos um desses registros da Tabela de Parâmetros x AID possua o parâmetro
Terminal/Reader Contactless Transaction Limit (posição 168-175) com valor superior ao valor
fornecido para a transação.
IMPORTANTE:
Caso já exista um cartão inserido no leitor de chip, a mensagem acima não deve ser mostrada,
sendo que a interface sem contato não necessita ser ativada.
Após a inserção do cartão, a mensagem deve ser imediatamente apagada do display.
O conjunto “PP_StartGetCard / PP_GetCard” pode ser chamado pelo “checkout” mais de uma
vez, independentemente do acionamento de outras funções (“PP_StartGoOnChip”,
psOutput:
PROCESSANDO...
Essa ocorrência é então armazenada de maneira volátil pela Biblioteca de Pinpad para ser reportada
no parâmetro de retorno “Status da última leitura de cartão com chip” na próxima chamada às
funções PP_StartGetCard / PP_GetCard. Essa ocorrência não é preservada após uma chamada a
PP_Close.
Caso seja selecionada uma aplicação de crédito ou débito, ela segue a norma EMV e, assim, deve-se
continuar com os seguintes processamentos estipulados pela norma EMV:
Obtenção das opções de processamento (Get Processing Options); e
Leitura dos dados da aplicação (Read Application Data).
OBS: Caso o cartão reporte no Get Processing Options um status (SW1/SW2) cujo comportamento
não é regido pela norma EMV, esta situação deve ser considerada como um erro passível de fallback.
Assim, a função PP_GetCard deverá retornar erro PP_ERRFALLBACK.
1
IMPORTANTE: De forma global, o Kernel EMV do equipamento deve suportar até 100 AIDs simultâneos no processo
de seleção, provenientes de uma ou mais tabelas de diferentes redes adquirentes.
psOutput:
OBSERVAÇÕES:
Esta especificação não prevê que o Transaction Sequence Counter (Tag ‘9F41’) seja enviado pelo
checkout, portanto ele deve ser gerido internamente pelo pinpad. Dessa maneira, esse contador
deve ser iniciado em 1 (o valor zero não deve ser usado, segundo a norma) e incrementado no
sempre que detectada a inserção de um cartão EMV. Devem-se manter contadores separados
para cada rede adquirente.
Caso seja selecionada uma aplicação de moedeiro VISA Cash, os procedimentos a serem efetuados
são proprietários da VISA e sua descrição encontra-se em documento anexo fornecido pela Cielo.
APROXIME O
CARTAO NOVAMENTE
Identificada a aplicação a ser usada, deve-se verificar o valor da posição 167 na Tabela de
Parâmetros x AID, de forma a efetuar os processamentos:
Pelas características dos cartões sem contato, todo o processamento é feito já na função
PP_StartGetCard / PP_GetCard, independentemente do modelo/padrão acima. Caso a transação
requeira verificação do portador (PIN Online), isso deverá ser feito em PP_StartGoOnChip /
PP_GoOnChip.
Caso ocorra qualquer erro de processamento do cartão sem contato, a seguinte mensagem deve ser
apresentada
psOutput:
psOutput:
O parâmetro “Obrigatoriedade de conexão”, caso ativo, deve fazer com que o resultado do Terminal
Action Analysis nunca gere TC (aprovado offline).
O parâmetro “Resultado da consulta à Lista Negra” deve ativar o bit do TVR Card appears on
terminal exception file
Caso seja necessária a captura do PIN do usuário, os seguintes pontos devem ser levados em
consideração:
Na captura do PIN, a seguinte mensagem deve ser utilizada no pinpad, incluindo a informação
de valor total da transação (campo “novo valor da transação”):
VALOR:nnn.nnn,nn n.nnn.nnn.nnn,nn
senha: ou senha:
**** ****
Antes de pedir o PIN ao usuário, a mensagem “SOLICITE A SENHA” deverá ser enviada ao
“checkout” através do recurso PP_NOTIFY.
Mensagens de erro de verificação e/ou bloqueio de PIN também devem ser enviadas ao
“checkout” através do recurso PP_NOTIFY. As seguintes mensagens estão previstas: "SENHA
psOutput:
psOutput:
OBS: Deve-se tem em mente que o processamento de cartões sem contato, tanto VISA como
MasterCard, é uma simplificação do EMV com contato e, desta forma, alguns dados do campo 55
podem não existir, como o Cryptogram Information Data (tag ‘9F27) no caso do qVSDC.
psOutput:
psOutput:
psOutput:
Os seguintes parâmetros de entrada de PP_FinishChip devem ser inseridos no banco de dados EMV
para uso no processamento:
psOutput:
psOutput:
Modalidade 1:
Se uma Master Key (DES ou 3DES) do pinpad for conhecida, a WKPAN poderá ser gerada
externamente e fornecida ao pinpad criptografada por esta Master Key. O tamanho da chave
WKPAN deverá respeitar o tamanho da Master Key conhecida (8 bytes para DES, 16 bytes para
3DES).
“Checkout” “Pinpad”
MK WKPAN MK
Alg-1
Alg WKPAN
WKPAN
WKPAN
Modalidade 2:
Uma chave WKPAN aleatória, sempre 3DES, poderá ser gerada internamente no pinpad e
fornecida ao “checkout” através de um certificado RSA, conforme descrito no item 4.4.4.
“Checkout” “Pinpad”
Kpub Kpub
Kpriv
WKPAN
RSA WKPAN
RSA
WKPAN
A ativação da “Comunicação Segura”, assim como a definição da chave WKPAN, é feita através da
função PP_DefineWKPAN, sendo que as seguintes funções da Biblioteca são afetadas nessa
modalidade:
PP_CheckEvent;
PP_StartGetPIN;
PP_EncryptBuffer; e
PP_GetCard.
“Checkout” “Pinpad”
PAN
Alg-1 PAN
Alg
PAN
WKPAN WKPAN
PAN
Alg
Alg-1 PAN
PAN
“Tamanho da Trilha 3” nunca deve ser preenchido no modo de “Comunicação Segura”, mesmo
que a Trilha 3 tenha sido lida com sucesso (somente o campo “Trilha 3” é preenchido).
A informação de tamanho do PAN ou trilha contida nos parâmetros de entrada e saída das
funções deve respeitar o tamanho da informação enviada, incluindo a criptografia. A entidade
que receber o dado criptografado, seja o “checkout” ou o pinpad, deverá eliminar eventuais ‘F’s
ao final do PAN depois de decodificado e recalcular seu tamanho real.
4.4.2. Exemplos
Os exemplos a seguir consideram uma WKPAN tipo DES de valor ‘EB 52 8A 43 B1 27 53 FD’:
Exemplo 1: Trilha 1 enviada pelo pinpad, com PAN contendo espaços em branco.
Aberta (59 caracteres):
“B3764 361234 56006^NOME NOME NOME NOME NOME N^0905060640431”
PAN Identificado (17 caracteres):
“3764 361234 56006”
Codificação:
“764E361234E56006” => DES => “5716A983F0E4643B”
Criptografada (59 caracteres):
“B35716A983F0E4643B^NOME NOME NOME NOME NOME N^0905060640431”
Codificação:
“376436123456006F” => DES Reverso => “431E6D386E688B0B”
Criptografado (16 caracteres):
“431E6D386E688B0B”
Exemplo 6: Trilha 2 de 37 caracteres enviada pelo pinpad, porém com PAN de 13 dígitos, causando a
invasão do “Tamanho da Trilha 3” depois de criptografada.
Aberta (37 caracteres):
“3827418937101=09050606404312376450123”
PAN Identificado (13 caracteres):
“3827418937101”
Codificação:
“3827418937101FFF” => DES => “1CCE9197C5C6E3FF”
Criptografada (40 caracteres!!!):
“1CCE9197C5C6E3FF=09050606404312376450123”
Exemplo 8: Trilha 2 enviada pelo pinpad, sem separador. Neste caso, para manter coerência com a
regra definida, é como se a trilha inteira fosse o PAN.
Aberta (37 caracteres):
“9823746589273648956239486587923497851”
PAN Identificado (37 caracteres):
“9823746589273648956239486587923497851”
Codificação:
“9486587923497851” => DES => “2C05DF894573C7FA”
Criptografada (37 caracteres):
“9823746589273648956232C05DF894573C7FA”
A “Biblioteca de Acesso TEF” foi inicialmente concebida como sendo uma biblioteca adicional de
responsabilidade do fornecedor do Servidor TEF e teria a função de comunicar-se com ele para obter
as tabelas de parâmetros (descritas no Capítulo 7).
Dado que os sistemas nunca foram implementados desta forma, este conceito foi retirado da
especificação, sendo que este capítulo foi mantido apenas para preservar a indexação do
documento.
Os itens a seguir descrevem separadamente alguns fluxos considerando o diálogo entre o “checkout”
e o Servidor TEF e entre o “checkout” e o conjunto “bibliotecas + pinpad”. Os seguintes casos mais
comuns estão contemplados nos fluxos a seguir:
Transação com cartão magnético ou sem contato simulando tarja (sem senha);
Transação com cartão magnético ou sem contato simulando tarja (com senha);
Tentativa de transação com cartão magnético que possui chip;
Transação com cartão com chip (com ou sem contato);
Transação negada pelo cartão com chip (com ou sem contato);
Transação negada pelo cartão com chip (com contato) após aprovação do Host;
Transação com chip aprovada offline (com ou sem contato); e
Fallback de cartão com chip (com contato).
Bibliotecas+
Servidor TEF Checkout
PIN-pad
PP_StartGetCard
Um cartão é
apresentado
(mag. ou sem
PP_GetCard contato/tarja)
tipo de cartão: “00” ou “05”
Consulta trilha 2
tabela de BIN
Bibliotecas+
Servidor TEF Checkout
PIN-pad
PP_StartGetCard
Um cartão é
apresentado
(mag. ou sem
PP_GetCard contato/tarja)
tipo de cartão: “00” ou “05”
Consulta trilha 2
tabela de BIN
Bibliotecas+
Servidor TEF Checkout
PIN-pad
PP_StartGetCard
Um cartão
magnético é
PP_GetCard passado
tipo de cartão: “00”
Consulta -trilha 2
tabela de BIN -Status último chip: “0” (OK)
Deve-se apresentar no
checkout uma mensagem
solicitando o uso do chip
ao invés da tarja
magnética.
Bibliotecas+
Servidor TEF Checkout
PIN-pad
PP_StartGetCard
Um cartão
com chip é
PP_GetCard apresentado
- tipo de cartão: “03”, “04”, “06”
- Trilha 2
Consulta - código da rede adquirente
-- Código da rede adquirente
tabela de BIN
PP_StartGoOnChip
PP_GoOnChip
- decisão: aprovar online
autorização dados p/ autorização online, - dados para envio no campo 55
incluindo o campo 55
resposta da autorização,
incluindo o campo 55 PP_FinishChip
- response code: aprovada
- dados recebidos no campo 55
- decisão: aprovada
- Dados Finais
Imprime
comprovante
- Confirmação PP_RemoveCard
confirmação - Dados Finais
Bibliotecas+
Servidor TEF Checkout
PIN-pad
PP_StartGetCard
Um cartão
com chip é
PP_GetCard apresentado
- tipo de cartão: “03” ou “06”
- Trilha 2 (ou PAN)
Consulta - código da rede adquirente
-- Código da rede adquirente
tabela de BIN
PP_StartGoOnChip
PP_GoOnChip
- decisão: negada offline
Bibliotecas+
Servidor TEF Checkout
PIN-pad
PP_StartGetCard
Um cartão
com chip é
PP_GetCard inserido
- tipo de cartão: “03”
- Trilha 2
Consulta - código da rede adquirente
-- Código da rede adquirente
tabela de BIN
PP_StartGoOnChip
PP_GoOnChip
- decisão: aprovar online
autorização dados p/ autorização online - dados para envio no Bit55
resposta da autorização
PP_FinishChip
- response code: aprovada
- dados recebidos no Bit55
- decisão: negada
- desfazimento
- dados da transação negada,
desfaziment formatados como campo 55
o
PP_RemoveCard
Transação não
é aceita
Bibliotecas+
Servidor TEF Checkout
PIN-pad
PP_StartGetCard
Um cartão
com chip é
PP_GetCard apresentado
- tipo de cartão: “03” ou “06”
- Trilha 2
Consulta - código da rede adquirente
-- Código da rede adquirente
tabela de BIN
PP_StartGoOnChip
PP_GoOnChip
- decisão: aprovada offline
Armazena dados da transação, - dados para envio no campo 55
dados para formatados como campo 55
envio futuro
Se armazenamento OK,
transação é “autorizada” PP_FinishChip
- response code: aprovada
- decisão: aprovada
Imprime
comprovante
confirmação PP_RemoveCard
Bibliotecas+
Servidor TEF Checkout
PIN-pad
PP_StartGetCard
Um cartão é
inserido no
PP_GetCard leitor de chip
erro!!!
PP_RemoveCard O cartão é
retirado
PP_StartGetCard
Um cartão
magnético é
passado
PP_GetCard
tipo de cartão: magnético
Consulta -trilha 2 último status de chip: erro
tabela de BIN -Status último chip: “1” (fallback)
7. Tabelas de Parâmetros
Este item descreve as tabelas que devem estar contidas no conjunto Biblioteca + Pinpad de modo
que ele possa processar os cartões com chip EMV.
Estão contempladas as seguintes tabelas:
Tabela de Parâmetros x AID
Tabela de Chaves Públicas
Tabela de Certificados Revogados
Exemplo de registro:
3141020107A0000000041010000000000000000000
01MASTERCARD••••••030082008200820769862MERCH0000000001
1234TERM0001E0F0C06000B0F00021
C8000000000000000000C80000000000002710
R•••••••••••••••••••••••••••••••
9F02069F03060000000000000000000000000000
9F02069F03069F1A0295055F2A029A039C010000
Y1Z1Y3Z3
C8000000000000000000C800000000
Exemplo de registro:
61120305A00000000399001030000128AB79FCC9520896967E776E64444E5DCDD
6E13611874F3985722520425295EEA4BD0C2781DE7F31CD3D041F565F747306EE
D62954B17EDABA3A6C5B85A1DE1BEB9A34141AF38FCF8279C9DEA0D5A6710D08D
B4124F041945587E20359BAB47B7575AD94262D4B25F264AF33DEDCF28E09615E
937DE32EDC03C54445FE7E3827770000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000
0000000014ABFFD6B1C51212D05552E431C5B17007D2F5E6D0000000000000000
00000000000000000000000000
8. Protocolo Serial
Este capítulo define uma implementação de protocolo serial para o caso de pinpads que têm
capacidade para executar, internamente, todo o processamento das funções definidas no Capítulo 3.
A implementação deste protocolo é obrigatória (salvo exceções acordadas com as redes adquirentes)
pois traz as seguintes vantagens:
Uma Biblioteca implementada com o mesmo protocolo passa a ser genérica, podendo ser
utilizada com diversos pinpads; e
O desenvolvedor do checkout poderá, caso desejado, acessar diretamente o pinpad pela porta
serial, dispensando o uso de bibliotecas externas.
É importante que o pinpad preserve também o seu protocolo serial nativo para compatibilidade com
outros sistemas.
Após a recepção de uma mensagem, o pinpad confere o CRC e envia um ACK (06h) se os dados
estiverem corretos. Caso os valores não coincidam, envia um NAK (15h) e descarta a mensagem.
O “checkout” deve aguardar um ACK ou um NAK durante 2 segundos após o envio da mensagem. O
não recebimento de algum desses bytes aborta a comunicação. O checkout deve tentar o envio da
mensagem 3 vezes, abortando após o 3º NAK recebido.
Por outro lado, o “checkout” deve verificar o CRC de uma resposta recebida do pinpad e enviar um
NAK caso haja erro. Em caso de acerto, nada deverá ser enviado.
As figuras a seguir exemplificam algumas situações previstas pelo protocolo.
Checkout PIN-pad
CRC CRC ETB Dn ... D2 D1 SYN
CRC confere. Um ACK
é enviado e a
ACK mensagem é aceita.
Checkout PIN-pad
CRC CRC ETB Dn ... D2 D1 SYN CRC não confere. Um
NAK é enviado e a
NAK mensagem é
Um NAK é recebido! rejeitada.
A mensagem é
CRC CRC ETB Dn ... D2 D1 SYN
retransmitida. CRC confere. Um ACK
é enviado e a
ACK mensagem é aceita.
CRC confere. A
SYN D1 D2 ... Dn ETB CRC CRC
resposta é aceita e não
se deve enviar ACK...
No caso dos comandos “blocantes”, o “checkout” deverá esperar pela resposta indefinidamente.
Entretanto, este tipo de comando pode ser abortado a qualquer momento pelo “checkout” através
do envio de um caractere CAN (18h). Isso equivale ao comando PP_Abort.
Ao receber o caractere CAN, o pinpad deve abortar a operação em curso, enviar um caractere EOT
(04h) e voltar ao aguardo de um novo comando. Na verdade, o pinpad deve sempre responder EOT a
um CAN, independentemente do seu estado.
O “checkout” deve aguardar o EOT durante 2 segundos, de modo a obter confirmação do
cancelamento, tentando até 3 vezes o envio do CAN. Durante essa espera, o “checkout” deve ignorar
outros caracteres que venha a receber, pois, coincidentemente, pode haver uma resposta do pinpad
ou uma mensagem de notificação sendo devolvida no momento do cancelamento.
IMPORTANTE: Enquanto o pinpad estiver processando um comando “blocante”, somente o CAN o
fará parar a operação, sendo quaisquer outros bytes ignorados. Caso um comando seja enviado ao
pinpad durante este estado, ele é simplesmente rejeitado.
Os comandos “não blocantes” não podem ser interrompidos pelo checkout. Nesse caso, deve-se
adotar um timeout de 10 segundos para a espera da resposta. Excedido esse tempo, reporta-se o
erro PP_COMMTOUT.
Formato Descrição
A3 Código do comando: “CHP” = PP_ChipDirect
“CNG” = PP_ChangeParameter
“OPN” = PP_Open (*) “GIN” = PP_GetInfo
“CLO” = PP_Close “ENB” = PP_EncryptBuffer
“DSP” = PP_Display “TLI” = PP_TableLoadInit
”DEX” = PP_DisplayEx ”TLR” = PP_TableLoadRec
“GKY” = PP_StartGetKey/PP_GetKey ”TLE” = PP_TableLoadEnd
“GPN” = PP_StartGetPIN/PP_GetPIN “GDU” = PP_GetDUKPT
“RMC” = PP_StartRemoveCard/PP_RemoveCard “GTS” = PP_GetTimeStamp
“GEN” = PP_StartGenericCmd/PP_GenericCmd “DWK” = PP_DefineWKPAN
“CKE” = PP_StartCheckEvent/PP_CheckEvent
(***)
“GCR” = PP_StartGetCard/PP_GetCard/PP_ResumeGetCard
“GOC” = PP_StartGoOnChip/PP_GoOnChip
“FNC” = PP_FinishChip
N3 Tamanho em caracteres do primeiro parâmetro do tipo INPUT (se houver)
var Primeiro parâmetro do tipo INPUT (se houver)
N3 Tamanho em caracteres do segundo parâmetro do tipo INPUT (se houver)
var Segundo parâmetro do tipo INPUT (se houver)
... ...
(*)
O parâmetro psCom diz respeito somente à abertura da porta serial e, portanto, não deve ser
enviado ao pinpad através do protocolo.
(***)
A função PP_ResumeCard é acionada através do comando “GCR” sem parâmetros.
Formato Descrição
A3 Código da resposta (idêntico ao código do Comando)
N3 Status (código de retorno, conforme item 3.1.2)
N3 Tamanho em caracteres do primeiro parâmetro do tipo OUTPUT (se houver)
var Primeiro parâmetro do tipo OUTPUT (se houver)
N3 Tamanho em caracteres do segundo parâmetro do tipo OUTPUT (se houver)
var Segundo parâmetro do tipo OUTPUT (se houver)
... ...
Observações:
As funções “blocantes” (do tipo PP_StartFunc / PP_Func) deverão seguir a seguinte regra: A
função inicial (PP_StartFunc) simplesmente envia comando, retornando imediatamente após a
recepção do ACK. A função final (PP_Func) deve verificar a se uma resposta foi recebida, saindo
imediatamente com status PP_PROCESSING caso não haja nada no buffer de recepção serial. O
cancelamento pela função PP_Abort é feito conforme descrito no item 8.1.
Na função PP_Open é interessante que, após a abertura da porta, um CAN seja enviado ao
pinpad para cancelar qualquer eventual comando “blocante” que esteja em processamento.
Após esse procedimento, recebido o EOT, o comando “OPN” pode ser enviado normalmente ao
pinpad.
Formato Descrição
A3 “NTM”
N3 Status (sempre “000”)
N3 Tamanho em caracteres da mensagem de notificação (de “000” a “032”)
var Mensagem de notificação
Neste caso, a função sendo executada retorna o status PP_NOTIFY e a mensagem é devolvida no
parâmetro psMsgNotify.
8.3. Exemplos:
Os dados a seguir ilustram o mesmo exemplo apresentado na função PP_GoOnChip, porém
utilizando o protocolo de comunicação definido (para facilitar a visualização, as informações de
tamanho estão sublinhadas):
Checkout->Pinpad:
<SYN>GOC08600000002746500000000710000120700000000000000000000000000
0000001000027102000001388750000230109F279F26959B9F349F100110045F205
F28<ETB><CRC><CRC>
Pinpad->Checkout:
<ACK>
<SYN>NTM000016SOLICITE•A•SENHA<ETB><CRC><CRC>
<SYN>GOC0001422000018D540BCF3001577AFFFF9876543210E0000C0479F270180
9F260804CA8F1428AB5901950580000100009B02E8009F34030201009F100706011
A039000005F28020076000<ETB><CRC><CRC>
No exemplo anterior, o “checkout” pode cancelar a operação enviando um CAN, conforme exemplo
a seguir:
Checkout->Pinpad:
<SYN>GOC08600000002746500000000710000120700000000000000000000000000
0000001000027102000001388750000230109F279F26959B9F349F100110045F205
F28<ETB><CRC><CRC>
Pinpad->Checkout:
<ACK>
<SYN>NTM000016SOLICITE•A•SENHA<ETB><CRC><CRC>
Checkout->Pinpad:
<CAN>
Pinpad->Checkout:
<EOT>
Os dados a seguir ilustram a carga de tabelas no pinpad, usando os mesmos dados dos exemplos do
item 7.1:
Checkout->Pinpad:
<SYN>GCR0400099000000001500021024193845231020020100<ETB><CRC><CRC>
Pinpad->Checkout:
<ACK>
<SYN>GCR020<ETB><CRC><CRC>
Checkout->Pinpad:
<SYN>TLI002310200201<ETB><CRC><CRC>
Pinpad->Checkout:
<ACK>
<SYN>TLI020<ETB><CRC><CRC>
Checkout->Pinpad:
<SYN>TLR4570328410107A00000000410100000000000000000000201MASTERCARD
••••••030082008200820769862MERCH00000000011234TERM0001E0F0C06000B0F
00021C8000000000000000000C800000000••••••••••••••••••••••••••••••••
••••••••••••••••••••••••••••••••••••••••••••••••9F02069F03069F1A029
5055F2A029A039C010000Y1Z1Y3Z306210202101000000000000000000000000000
000302VISA•ELECTRON•••041091030652005060708000000000000000000000030
3VISA•CASH•••••••010000050000000000000000000015210198607612,.R$••1<
ETB><CRC><CRC>
Pinpad->Checkout:
<ACK>
<SYN>TLR000<ETB><CRC><CRC>
Checkout->Pinpad:
<SYN>TLE<ETB><CRC><CRC>
Pinpad->Checkout:
<ACK>
<SYN>TLE000<ETB><CRC><CRC>
Checkout->Pinpad:
<SYN>GCR<ETB><CRC><CRC>
Pinpad->Checkout:
<ACK>
<SYN>NTM000022SELECIONADO: AMEX GOLD<ETB><CRC><CRC>
<SYN>NTM000023SELECIONADO: AMEX GREEN<ETB><CRC><CRC>
<SYN>GCR00034203001010200••••••••••••••••••••••••••••••••••••••••••
••••••••••••••••••••••••••••••••••29376436871651006=0305000523966••
••••••000••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
••••••••••••••••••••••••••••••••••••••••••••••15376436871651006••••
01AMEX•GREEN••••••246JOAO•DA•SILVA•••••••••••••04123100••••••••••••
•••••••00000000076000<ETB><CRC><CRC>
9. Funcionalidades Adicionais
Pressionada a seqüência correta, o pinpad deve soar um “bip” e apresentar as seguintes telas,
contendo as mesmas informações devolvidas pelo comando PP_GetInfo:
A mensagem deve ser apresentada e deixada simplesmente no display, até que seja recebido um
comando que o altere.
OBS: Pinpads que já processam o teclado quando em estado ocioso (“bufferizando” ou enviando as
teclas pela serial) devem continuar a fazê-lo normalmente, porém atentando-se à seqüência sendo
digitada para mostrar corretamente a tela de informações de versão.
[Libs]
PPCOMP=<path> \ <nome da Biblioteca de Pinpad>
Para facilitar a integração dos módulos de software definidos neste documento com os diversos
sistemas de “checkout” e TEF existentes, optou-se pelas seguintes regras na formatação de todos os
dados envolvidos, sejam eles tabelas de configuração ou parâmetros de entrada e saída das
bibliotecas:
Sempre que possível, os dados possuem tamanhos fixos pré-definidos; e
Todos os dados são compostos de strings com caracteres ASCII de 20h (espaço) a 7Eh (~),
incluindo também o caractere CR (0Dh).
Numérico decimal (N): Permite somente caracteres de “0” a “9” representando um número
decimal.
Exemplo: N3 representa um número de “000” a “999”.
Numérico hexadecimal (H) ou bytes (B): Permite somente caracteres de “0” a “9” e “A” a “F”
representando um número hexadecimal ou um conjunto de bytes, sendo cada byte
representado por 2 desses caracteres.
Exemplo: H8(B4) representa um número de “00000000” a “FFFFFFFF” ou uma cadeia de 4 bytes.
Alfanumérico (A): Permite qualquer caractere de 20h (espaço) a 7Eh (~) e normalmente
representa um texto “visível” (nome, etiqueta, mensagem). Quando a informação for menor do
que o campo definido, ela deverá ser alinhada à esquerda com espaços à direita.
Exemplo: A5 pode conter uma mensagem de 5 caracteres como “TEXTO”.
Informações de tamanho variável são representadas sempre por dois campos, na seguinte ordem:
Um campo numérico (de N1 a N3) indicando o tamanho da informação em bytes (se esta
representar bytes) ou em caracteres (se esta for alfanumerica); e
Um campo para armazenar a informação. Caso este campo seja de tamanho fixo, a informação
virá alinhada sempre à esquerda, sendo o campo preenchido à direita com “FF” caso este seja
do tipo hexadecimal/bytes ou com “ ” (espaços) caso este seja do tipo alfanumérico.