PinPad Chip
PinPad Chip
PinPad Chip
MANUAL
DE
UTILIZAÇÃO
PINPAD
SEGURO
"Este documento possui informações e tecnologia de propriedade exclusiva da Software Express, não podendo, a
não ser quando de autorização previa e escrita fornecida unicamente pela Software Express, ser reproduzido,
utilizado ou divulgado por qualquer meio ou modo total ou parcialmente para outro fim que não seja o de servir de
interface entre um sistema de processamento de dados e o SiTef".
ÍNDICE
5. PINPADS DISPONÍVEIS...................................................................................................................................24
6. BIBLIOGRAFIA................................................................................................................................................24
O PINPAD Seguro é um dispositivo que aceita a entrada de senhas pessoais, que por motivo de
segurança criptografa os números digitados e os envia a um dispositivo conectado. O PIN serve como
uma assinatura eletrônica para as transações de débito.
A interface física entre o PINPAD e o módulo de controle é feita através de uma porta serial definida
pelo usuário.
Para facilitar o controle e obtenção de senhas criptografadas do PINPAD sob ambiente WINDOWS
uma interface foi desenvolvida, na forma de uma DLL (Dinamic Link Library) nomeada SITPIN quando
uso de executáveis 16 bits e SITPIN32 quando executáveis 32 bits.
O modulo SITPIN incorpora todas as funções básicas referentes a programação do PINPAD e sua
interface física (Conectores). Através do SITPIN o usuário poderá obter informações de senha
criptografada ou mesmo mostrar mensagens informativas ao usuário.
2.1 Entrypoints
2.1.1 SESolicitaSenhaDedicado
Solicita a digitação da senha ao usuário, podendo ser enviada também uma mensagem especifica.
2.1.2 SEObtemSenha
Obtém a senha criptografada digitada pelo usuário. Esta função deve ser chamada até que o
parâmetro status retorne ‘00’ ou um status de erro (Código diferente de ‘00’ e ‘99’). Quando o status
retornado for igual a ‘99’ indicada que senha ainda não foi digitada pelo usuário. Um controle de
timeout poderá ser realizado enquanto a função estiver retornando ‘99’.
2.1.3 SESolicitaConf
2.1.4 SEObtemConf
Obtém do usuário a confirmação. Esta função deve ser chamada até que o parâmetro status retorne
‘00’ ou um erro ocorra (Status diferente de ‘00’ e ‘99’). Se desejado um timeout poderá ser controlado
enquanto a função estiver retornando ‘99’.
2.1.5 SEMsgPadrao
Estabelece uma mensagem padrão para o display do PINPAD. Esta mensagem continuará a ser
mostrada quando o PINPAD não estiver sendo utilizado.
2.1.6 SESolicitaTrilha1_2
Solicita ao usuário a leitura da trilha1 e da trilha2 do cartão. Esta função não é permitida para novas
homologações.
2.1.7 SESolicitaTrilhas
Solicita ao usuário a leitura da trilha1 e da trilha2 do cartão. Esta função é obrigatória para as novas
homologações.
2.1.8 SEObtemTrilha1_2
Obtém a leitura realizada da trilha1 e da trilha2 do cartão. Esta função deve ser chamada até que o
parâmetro status retorne ‘00’ ou um erro ocorra (Status diferente de ‘00’ e ‘99’). Se desejado um timeout
poderá ser controlado enquanto a função estiver retornando ‘99’.
2.1.9 SEFinalizar
Libera as interrupções e porta de comunicação com o PINPAD. Esta função deverá ser utilizada
sempre que o sistema finalizar uma operação que solicitar uma intervenção do usuário. Sendo que, a não
finalização dos módulos de comunicação poderá causar danos ao sistema.
A configuração do PINPAD é obtida a partir de um arquivo tipo (.INI). Este arquivo deve residir no
diretório raiz do sistema operacional (Ex. \WINDOWS).
[General]
Driver32= path\(dll do fabricante do Pin)
BINFile=path\ppvisa.bin
[VFN]
Config = PortaSerialxxxxxxxxxx
[DIO]
Port=1
SAM=1
[SLB]
Port=2
SAM=1
Declarações
Public Declare Sub SEMsgPadrao Lib "c:\winnt\sitpin32.dll" (ByVal MsgEnv As String, ByVal
Status As String)
Sub le_cartao_magnetico()
Else
testa_retorno_pin
If status_cartao_mag = "00" Then
Exit Do
Else
Exit Sub
End If
End If
Loop
End Sub
Visando facilitar a programação da interface com o PINPAD no ambiente DOS, foi desenvolvida
uma TSR, que efetua o controle e a obtenção de senhas criptografadas. O nome da TSR é SITPIN.
O modulo SITPIN incorpora todas as funções básicas referentes a programação do PINPAD e sua
interface física (Conectores). Através do SITPIN o usuário poderá obter informações de senha
criptografada ou mesmo mostrar mensagens informativas ao usuário. A interface física entre o PINPAD e
o módulo de controle é feita através de porta serial definida pelo usuário.
3.1.1 CMD_SOLICITA_CONFIRMACAO
3.1.2 CMD_OBTEM_CONFIRMACAO
Obtém do usuário a confirmação de uma operação. Esta função deve ser chamada até que o
parâmetro status retorne ‘00’ ou um status de erro (status diferente de ‘00’ e ‘99’). Se desejado um
timeout poderá ser controlado enquanto a função estiver retornando ‘99’.
3.1.3 CMD_FINALIZA_SOLICITACAO
Esta função não necessita de parâmetros e existe apenas para manter compatibilidade com versões
anteriores.
3.1.4 CMD_SOLICITA_SENHA
3.1.5 CMD_OBTEM_SENHA
3.1.6 CMD_MSG_PADRAO
Estabelece uma mensagem padrão para o display do PINPAD. Esta mensagem continuará a ser
mostrada quando o PINPAD não estiver sendo utilizado.
3.1.7 CMD_Solicita_Trilha1_2
Solicita ao usuário a leitura da trilha1 e da trilha2 do cartão. Esta função não é permitida para novas
homologações.
3.1.8 CMD_Solicita_Trilhas
Solicita ao usuário a leitura da trilha1 e da trilha2 do cartão. Esta função é obrigatória para as novas
homologações.
3.1.9 CMD_Obtem_Trilha1_2
Obtém a leitura realizada da trilha1 e da trilha2 do cartão. Esta função deve ser chamada até que o
parâmetro status retorne ‘00’ ou um erro ocorra (Status diferente de ‘00’ e ‘99’). Se desejado um timeout
poderá ser controlado enquanto a função estiver retornando ‘99’.
Exemplo com o PinPad conectado a COM2, com versão para CHIP e tecla de cancelamento [F1]:
<scancode> = "scan code" de uma tecla a ser utilizada para cancelamento das funções blocantes.
Programa Teste.c
#include <stdlib.h>
#include <dos.h>
#include "trata.h"
int PinMsgPadrao ( );
int PinConfirmacao ( );
int PinSenha (char *pSenha, char *pWorkingKey );
ulong ReadTime();
void W_NSeconds (ulong l);
void W_NMilesecs (ulong l);
i = PinConfirmacao ( );
switch (i) {
case 0:
printf ("\n O usuario confirmou");
break;
case 9:
printf ("\n o usuario cancelou");
break;
default:
printf ("\n Erro na solicitacao %d ", i);
Especificação Técnica – Uso PinPad com CHIP - Versão 3.00 Página - 17
Ó 2001, Software Express Informática
Tel.: (011) 3024-5353 e_mail: [email protected] NOVEMBRO/2001
SiTef - “Solução inteligente para Transferência Eletrônica de Fundos”
int PinMsgPadrao ( )
{
DADOSAPI_MSG_PADRAO ApiMsgPadrao ;
int PinConfirmacao ( )
{
DADOSAPI_CONFIRMACAO ApiConfirmacao;
DADOSAPI_OBTEM_CONF ApiObtemConf;
int
i= 0
;
/*
* Inicializando os parametros da chamada
*/
/*
* Aguardando a Mensagem Por aproximadamente 30s
*/
Especificação Técnica – Uso PinPad com CHIP - Versão 3.00 Página - 18
Ó 2001, Software Express Informática
Tel.: (011) 3024-5353 e_mail: [email protected] NOVEMBRO/2001
SiTef - “Solução inteligente para Transferência Eletrônica de Fundos”
do {
/* retornos
* 00 -> confirmacao do usuario
* 09 -> Cancelamento
* 99 -> Contitua Pesquisa , nada foi retornado pelo pinpad
* xx -> Erro ver tabela de erros
*/
printf ("\nstatus eh ->%c%c", ApiObtemConf.Status[0], ApiObtemConf.Status[1]);
return ((ApiObtemConf.Status[0] - '0') + (ApiObtemConf.Status[1] - '0'));
}
DADOSAPI_SENHA ApiSenha;
DADOSAPI_OBTEM_SENHA ApiObtemSenha;
int
i= 0
;
/*
* Inicializando os parametros da chamada
*/
/*
* Aguardando a Mensagem Por aproximadamente 30s
*/
do {
Especificação Técnica – Uso PinPad com CHIP - Versão 3.00 Página - 19
Ó 2001, Software Express Informática
Tel.: (011) 3024-5353 e_mail: [email protected] NOVEMBRO/2001
SiTef - “Solução inteligente para Transferência Eletrônica de Fundos”
if (strncmp(ApiObtemSenha.Status, "00", 2) == 0)
memcpy (pSenha, ApiObtemSenha.Senha, TAM_SENHA);
else
memset (pSenha, '0', TAM_SENHA);
/* retornos
* 00 -> Usuario informou a senha
* 99 -> Contitua Pesquisa , nada foi retornado pelo pinpad
* xx -> Erro ver tabela de erros
*/
printf ("\nstatus eh ->%c%c", ApiObtemSenha.Status[0], ApiObtemSenha.Status[1]);
return ((ApiObtemSenha.Status[0] - '0') + (ApiObtemSenha.Status[1] - '0'));
}
lpParam = pDadosApi;
regs.x.bx = FP_OFF (lpParam);
sregs.es = FP_SEG (lpParam);
regs.x.ax = iCmd;
ulong ReadTime()
{
ulong milleseconds;
union REGS r;
r.h.ah = 0x2c;
int86 (0x21,&r,&r);
Especificação Técnica – Uso PinPad com CHIP - Versão 3.00 Página - 20
Ó 2001, Software Express Informática
Tel.: (011) 3024-5353 e_mail: [email protected] NOVEMBRO/2001
SiTef - “Solução inteligente para Transferência Eletrônica de Fundos”
Include Trata.h
#ifndef _TRATA_H
#define _TRATA_H
#define CMD_CONFIGURA 1
#define CMD_FINALIZA_SOLICITACAO 2
#define CMD_SOLICITA_SENHA 3
#define CMD_SOLICITA_CONFIRMACAO 4
#define CMD_SOLICITA_TRILHA1_2 6
#define CMD_SOLICITA_TRILHAS 7
#define CMD_OBTEM_SENHA 13
#define CMD_OBTEM_CONFIRMACAO 14
#define CMD_OBTEM_TRILHA1_2 16
#define CMD_MSG_PADRAO 20
/*
Especificação Técnica – Uso PinPad com CHIP - Versão 3.00 Página - 21
Ó 2001, Software Express Informática
Tel.: (011) 3024-5353 e_mail: [email protected] NOVEMBRO/2001
SiTef - “Solução inteligente para Transferência Eletrônica de Fundos”
typedef struct
{
char inMsg [TAM_MSG16];
char Status [TAM_STATUS];
} *LPDADOSAPI_MSG_PADRAO, DADOSAPI_MSG_PADRAO;
typedef struct
{
char Status [TAM_STATUS];
} *LPDADOSAPI_OBTEM_CONF, DADOSAPI_OBTEM_CONF;
typedef struct
{
char Senha [TAM_SENHA];
char Status [TAM_STATUS];
} *LPDADOSAPI_OBTEM_SENHA, DADOSAPI_OBTEM_SENHA;
typedef struct
{
char inMsg [TAM_MSG16];
char Status [TAM_STATUS];
} *LPDADOSAPI_CONFIRMACAO, DADOSAPI_CONFIRMACAO;
typedef struct
{
char inTrilha2 [TAM_TRILHA2];
char inMsg [TAM_MSG32];
char inWorkingKey[TAM_WORKINGKEY];
char Status [TAM_STATUS];
} *LPDADOSAPI_SENHA, DADOSAPI_SENHA;
typedef struct
Especificação Técnica – Uso PinPad com CHIP - Versão 3.00 Página - 22
Ó 2001, Software Express Informática
Tel.: (011) 3024-5353 e_mail: [email protected] NOVEMBRO/2001
SiTef - “Solução inteligente para Transferência Eletrônica de Fundos”
{
unsigned char inPorta ;
unsigned char tpPinPad;
char Status [TAM_STATUS];
} *LPDADOSAPI_CONFIG, DADOSAPI_CONFIG;
#endif
5. PINPADs disponíveis
Modelo Modelo
DIONE Solo 2005
SCHLUMBERGER Magic 1800
VERIFONE SC552
6. Bibliografia