Este capítulo descreve a interface de programação fornecida pela biblioteca de integração para a
aplicação de Automação Comercial.

As funções da API podem ser divididas em três grupos distintos, conforme capítulos a seguir.

5.1 Gerenciamento do terminal

Estas funções administrativas permitem que a Automação Comercial:

  • Inicialize e encerre o uso da biblioteca de integração;

  • Verifique e altere o estado (on-line ou offline) dos terminais de pagamento.

910

PTI_Init

Esta função configura a biblioteca de integração e deve ser a primeira a ser chamada pela Automação
Comercial. A biblioteca de integração somente aceitará conexões do terminal de pagamento após
sua chamada.

👍

void PTI_Init

( LPCSTR pszPOS_Company, LPCSTR pszPOS_Version, LPCSTR
pszPOS_Capabilities, LPCSTR pszDataFolder, UINT16 uiTCP_Port,
UINT16 uiMaxTerminals, LPCSTR pszWaitMsg, UINT16 uiAutoDiscSec,
PINT16 piRet)

Entrada:

pszPOS_Company

Nome da empresa de Automação Comercial (final-nulo, até 40 caracteres e
sem acentuação). Por exemplo, "KND SISTEMAS LTDA.".

pszPOS_Version

Nome e versão da aplicação de Automação Comercial (final-nulo, até 40
caracteres e sem acentuação). Por exemplo, “SUPERVENDAS v1.01”.

pszPOS_Capabilities

Capacidades da Automação (soma dos valores abaixo):

1: funcionalidade de troco/saque;
2: funcionalidade de desconto;
4: valor fixo, sempre incluir;
8: impressão das vias diferenciadas do comprovante para
Cliente/Estabelecimento;
16: impressão do cupom reduzido.
32: utilização de saldo total do voucher para abatimento do valor da compra.

pszDataFolder

Caminho completo do diretório para armazenar dados e logs da biblioteca de
integração.

Observação: O usuário do sistema operacional onde é executada a aplicação
de Automação Comercial deve ter permissão de gravação nesse diretório.

uiTCP_Port

Porta TCP à qual todos os terminais irão conectar.

Observação: esta porta deve estar habilitada para o recebimento de
conexões através de qualquer firewall que estiver no caminho entre a
aplicação de Automação Comercial e o terminal de POS.

uiMaxTerminals

Número máximo de conexões simultâneas de terminais.

pszWaitMsg

Mensagem a ser apresentada na tela de qualquer terminal imediatamente
após se conectar. Veja PTI_Display para informações de formatação.

uiAutoDiscSec

Tempo de ociosidade em segundos após o qual o terminal deve se
desconectar da Automação Comercial quando opera sem alimentação
externa, ou zero para nunca desconectar. Veja PTI_Disconnect para
informações adicionais.

Saída:

nenhuma

Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida.
PTIRET_INVPARAM.................Parâmetro inválido informado à função.
PTIRET_SOCKETERR ................Erro ao iniciar a escuta da porta TCP informada.
PTIRET_WRITEERR ..................Erro no uso do diretório informado.

PTI_End

Esta função deve ser a última função chamada pela Automação Comercial, quando finalizada ou
antes de descarregar a biblioteca de integração.

Neste momento, a biblioteca de integração libera todos recursos alocados (portas TCP, processos,
memória, etc.).

👍

void PTI_End (void)

Entrada:

nenhuma

Saída:

nenhuma

Retorno:

nenhum

PTI_ConnectionLoop

Esta função permite que a Automação Comercial verifique quando um novo terminal se conectou e,
se PTIRET_NEWCONN é retornado, recupere informações adicionais do equipamento.

👍

void PTI_ConnectionLoop

(LPSTR pszTerminalId, LPSTR pszModel, LPSTR pszMAC, LPSTR pszSerNo, PINT16 piRet)

Entrada:

nenhuma

Saída:

pszTerminalId ➝ Identificador único do terminal (final nulo, até 20 caracteres).
pszModel ➝ Modelo do terminal (final nulo, até 20 caracteres).
pszMAC ➝ Endereço MAC do terminal (final nulo, formato “XX:XX:XX:XX:XX:XX”).
pszSerNo ➝ Número serial do terminal (final nulo, até 25 caracteres).

Retorno (piRet):

PTIRET_NEWCONN.................Novo terminal conectado.
PTIRET_NONEWCONN............Sem novas conexões recebidas.

PTI_CheckStatus

Esta função permite que a Automação Comercial verifique o status (on-line ou offline) de
determinado terminal de pagamento e recupere informações adicionais do equipamento.

Cada terminal de pagamento recebe um único identificador lógico, que é configurado quando o
terminal é instalado. Se a Automação Comercial controla mais de um terminal, ela deve ter registro
de todos os identificadores e suas localizações, com a finalidade de poder enviar comandos para o
terminal desejado.

👍

void PTI_CheckStatus

( LPSTR pszTerminalId, PINT16 piStatus, LPSTR pszModel, LPSTR pszMAC, LPSTR pszSerNo, PINT16 piRet)

Entrada:

pszTerminalId

Identificador único do terminal (final nulo). Pode ser vazio se o número
máximo de terminais suportado (informado em PTI_Init) for 1.

Saída:

pszTerminalId ➝ Identificador único do terminal (final nulo, até 20 caracteres).
piStatus ➝ Status do terminal, como descrito abaixo.
pszModel ➝ Modelo do terminal (final nulo até 20 caracteres).
pszMAC ➝ Endereço MAC do terminal (final nulo, formato “XX:XX:XX:XX:XX:XX”)
pszSerNo ➝ Número de série do terminal (final nulo, até 25 caracteres).

Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida.

Lista de possíveis status:

NomeValorDescrição
PTISTAT_IDLE0Terminal está on-line e aguardando por comandos.
PTISTAT_BUSY1Terminal está on-line, porém ocupado processando um comando.
PTISTAT_NOCONN2Terminal está off-line.
PTISTAT_WAITRECON3Terminal está off-line. A transação continua sendo executada e
após sua finalização, o terminal tentará efetuar a reconexão
automaticamente.

PTI_Disconnect

Esta função permite que a Automação Comercial desconecte um terminal de pagamento e o coloque
em modo offline, seja imediatamente ou após algum tempo funcionando sem alimentação externa.

Para terminais móveis, permanecer on-line aumenta consideravelmente o consumo da bateria. Por
este motivo é recomendado que a Automação Comercial defina um valor diferente de zero para o
parâmetro uiAutoDiscSec de PTI_Init, ou chame essa função assim que o terminal conectar.

Após o terminal ficar offline, tão logo uma tecla é pressionada, este se conecta automaticamente
novamente à Automação Comercial.

👍

void PTI_Disconnect (LPCSTR pszTerminalId, UINT16 uiPwrDelay, PINT16 piRet)

Entrada:

pszTerminalId

Identificador único do terminal (final nulo).

uiPwrDelay

Se igual a zero, desconecta imediatamente o terminal, independentemente
de sua fonte de energia.
Se diferente de zero, representa o número máximo de segundos durante os
quais o terminal permanecerá on-line enquanto estiver operando sem alimentação externa. O terminal não ficará offline enquanto estiver conectado a uma fonte de alimentação externa. Este valor sobrescreve o parâmetro uiAutoDiscSec de PTI_Init para este terminal específico.

Saída:

nenhuma

➡Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.

5.2. Operação sob controle da Automação Comercial

Estas funções permitem à Automação Comercial utilizar a tela, o teclado e a impressora do terminal
de forma remota para interagir com o usuário antes e depois da realização da transação de
pagamento. O terminal deve previamente estar conectado ao servidor de Automação Comercial.

725

Nota: Caracteres acentuados não devem ser utilizados em tela ou impressora. Apenas caracteres na
faixa entre 32 (20h, espaço) e 122 (7Ah, ‘z’) da tabela ASCII devem ser utilizados.

PTI_Display

Esta função apresenta uma mensagem na tela do terminal e retorna imediatamente.

A mensagem é apresentada a partir do canto superior esquerdo da tela, sendo 20 caracteres por
linha, com quebra de linha identificada pelo caractere ‘\r’ (retorno ao início da linha, código
ASCII 13). Caracteres que ultrapassem as 20 colunas ou o número máximo de linhas são descartados.
O número máximo de linhas suportado pode variar dependendo do modelo do terminal, entretanto
o mínimo de quatro linhas é sempre suportado.

👍

void PTI_Display (LPCSTR pszTerminalId, LPCSTR pszMsg, PINT16 piRet)

➡Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

pszMsg
Mensagem a ser apresentada na tela do terminal (final nulo).

➡Saída:

nenhuma

➡Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida.
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.

PTI_WaitKey

Esta função aguarda o pressionar de uma tecla no terminal e apenas retorna após uma tecla ser
pressionada ou quando o tempo de espera se esgotar.

Importante: Esta função somente deve ser utilizada para captura isolada de teclas, não devendo ser
sucessivamente chamada para captura de dados de entrada. Para este propósito, PTI_GetData deve
ser utilizado.

👍

void PTI_WaitKey

(LPCSTR pszTerminalId, UINT16 uiTimeOutSec, PINT16 piKey, PINT16 piRet)

➡Entrada:

pszTerminalId

Identificador único do terminal (final nulo).

uiTimeOutSec

Tempo de espera do usuário, em segundos. Se igual a zero, a função retorna
imediatamente, somente informando que uma tecla foi pressiona caso tenha
sido feito antes da chamada à função. (Captura de tecla buferizada.)

➡Saída:

piKey

Identificador da tecla que foi pressionada, de acordo com a tabela abaixo
(somente se o retorno da função for PTIRET_OK).

➡Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida, uma tecla foi pressionada.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.
PTIRET_TIMEOUT....................Nenhuma tecla foi pressionada durante o período de tempo
especificado.

Definição de tecla:

NomeValor (dec.)Valor (hex.)Valor (ASCII)Tecla
PTIKEY_BACKSP808BS[LIMPA] (amarelo)
PTIKEY_OK130DCR[OK] (verde)
PTIKEY_CANCEL271BESC[CANCELA] (vermelho)
PTIKEY_HASH3523#Numeral
PTIKEY_003725%Zero duplo
PTIKEY_ALPHA3826&[ALFA]
PTIKEY_STAR422A*Asterisco
PTIKEY_DOT462E.Ponto
PTIKEY_048300Numérico [0]
PTIKEY_149311Numérico [1]
PTIKEY_250322Numérico [2]
PTIKEY_351333Numérico [3]
PTIKEY_452344Numérico [4]
PTIKEY_553355Numérico [5]
PTIKEY_654366Numérico [6]
PTIKEY_755377Numérico [7]
PTIKEY_856388Numérico [8]
PTIKEY_957399Numérico [9]
PTIKEY_FUNC09761aTecla de função
adicional
PTIKEY_FUNC19862bTecla de função
adicional
PTIKEY_FUNC29963cTecla de função
adicional
PTIKEY_FUNC310064dTecla de função
adicional
PTIKEY_FUNC410165eTecla de função
adicional
PTIKEY_FUNC510266fTecla de função
adicional
PTIKEY_FUNC610367gTecla de função
adicional
PTIKEY_FUNC710468hTecla de função
adicional
PTIKEY_FUNC810569iTecla de função
adicional
PTIKEY_FUNC91066AjTecla de função
adicional
PTIKEY_FUNC101076BkTecla de função
adicional
PTIKEY_TOUCH1267E~Toque na tela
touchscreen
...............

PTI_ClearKey

Esta função limpa o buffer de teclas pressionadas, para que a próxima chamada da função não
considere qualquer tecla previamente pressionada.

Esta função retorna imediatamente.

👍

void PTI_ClearKey

(LPCSTR pszTerminalId, PINT16 piRet)

➡Entrada:

pszTerminalId

Identificador único do terminal (final nulo)

➡Saída:

nenhuma

➡Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.

PTI_GetData

Esta função realiza a captura de um único dado em um terminal previamente conectado.
Esta função é blocante e somente retorna após a captura de dado ser bem-sucedida ou falhar.

👍

void PTI_GetData

(LPCSTR pszTerminalId, LPCSTR pszPrompt, LPCSTR pszFormat,
UINT16 uiLenMin, UINT16 uiLenMax, BOOL fFromLeft,
BOOL fAlpha, BOOL fMask, UINT16 uiTimeOutSec, LPSTR pszData,
UINT16 uiCaptureLine, PINT16 piRet)

➡Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

pszPrompt
Mensagem de texto com final nulo a ser apresentada ao usuário,
descrevendo a informação a ser solicitada. Utilize ‘\r’ (código ASCII 13) para
quebra de linha. Por exemplo: “VALOR DO SERVICO:”.

pszFormat
Máscara de formatação com final nulo. Utilize ‘@’ (arroba) para as posições
de caracteres editáveis. Por exemplo: “@@.@@@.@@@,@@” para um
valor em centavos. Deve ser nulo (NULL) ou vazio para captura direta sem
formatação.

uiLenMin
Número mínimo de caracteres.

uiLenMax
Número máximo de caracteres.

fFromLeft
TRUE (1) para iniciar a digitação da esquerda;
FALSE (0) para iniciar a digitação da direita.

fAlpha
TRUE (1) para habilitar a entrada de caracteres não numéricos;
FALSE (0) para permitir apenas caracteres numéricos.

Nota: como a digitação de caracteres não numéricos em muitos terminais
não é amigável, recomenda-se evitar o uso desse recurso sempre que
possível.

fMask
TRUE (1) para mascarar os caracteres digitados com asterisco (tipicamente,
para digitação de senha);
FALSE (0) para mostrar os caracteres digitados.

uiTimeOutSec
Tempo máximo entre cada tecla pressionada, em segundos.

pszData
Valor inicial para um dado a ser editado com final nulo.

uiCaptureLine
Índice da linha da tela (iniciando em 1) onde a informação digitada deve ser
apresentada. Caso a legenda da mensagem também for apresentada nessa
linha, a informação digitada será exibida logo após a legenda; senão, será
exibida iniciando na primeira coluna.

➡Saída:

pszData
Informação digitada com final nulo (somente caso a função retorne
PTIRET_OK).

➡Retorno (piRet):

PTIRET_OK ..............................Captura de dado bem-sucedida.
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.
PTIRET_TIMEOUT....................Nenhuma tecla foi pressionada no tempo especificado.
PTIRET_CANCEL ......................Usuário pressionou a tecla [CANCELA].
PTIRET_SECURITYERR .............A função foi rejeitada por questões de segurança.

PTI_StartMenu

Esta função inicia a construção de um menu de opção para seleção pelo usuário.

Esta função retorna imediatamente.

👍

void PTI_StartMenu

(LPCSTR pszTerminalId, PINT16 piRet)

➡ Entrada:

pszTerminalId

Identificador único do terminal (final nulo).

➡ Saída:

nenhuma

➡ Retorno (piRet):

PTIRET_OK ..............................Criação do menu iniciada.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.

PTI_AddMenuOption

Esta função adiciona uma opção ao menu que foi criado através de PTI_StartMenu.

Esta função retorna imediatamente.

👍

void PTI_AddMenuOption

(LPCSTR pszTerminalId, LPCSTR pszOption, PINT16 piRet)

➡ Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

pszOption
Mensagem de texto com final nulo que descreve a opção a ser exibida no
terminal (máximo: 18 caracteres).

➡ Saída:

nenhuma

Retorno (piRet):

PTIRET_OK ..............................A opção foi adicionada ao menu.
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.

PTI_ExecMenu

Esta função exibe o menu de opções que foi criado através de PTI_StartMenu e
PTI_AddMenuOption e identifica a seleção feita pelo usuário.

Esta função é blocante e somente retorna após a seleção de uma opção ou a ocorrência de um erro.

👍

void PTI_ExecMenu

( LPCSTR pszTerminalId, LPCSTR pszPrompt, UINT16 uiTimeOutSec,
PUINT16 puiSelection, PINT16 piRet)

➡ Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

pszPrompt
Mensagem de texto com final nulo a ser apresentada ao usuário no topo do
menu (máximo: 20 caracteres). Por exemplo: “SELECIONE UMA OPCAO:”.
Caso NULL ou vazio, o menu é exibido a partir da primeira linha da tela.

uiTimeOutSec
Tempo máximo entre duas teclas pressionadas, em segundos.

puiSelection
Índice (iniciado em zero) da opção que deve estar pré-selecionada quando o
menu for inicialmente exibido, fazendo com que esta opção seja selecionada
se o usuário simplesmente pressionar [OK]. Caso puiSelection não seja uma
opção válida, nenhuma é pré-selecionada.

➡Saída:

puiSelection
Índice (iniciado em zero) da opção que foi selecionada pelo usuário (somente
se a função retornar PGWRET_OK).

➡Retorno (piRet):

PTIRET_OK ..............................Seleção do menu bem-sucedida.
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.
PTIRET_TIMEOUT....................Nenhuma tecla foi pressionada durante o tempo especificado.
PTIRET_CANCEL ......................Usuário pressionou a tecla [CANCELA].

PTI_Beep

Esta função emite um aviso sonoro no terminal.

Esta função retorna imediatamente.

👍

void PTI_Beep

(LPCSTR pszTerminalId, INT16 iType, PINT16 piRet)

➡Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

iType
Tipo de aviso sonoro, de acordo com a tabela abaixo.

➡Saída:

nenhuma

➡Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida.
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando

Tipos de aviso sonoro:

NomeValorDescrição
PTIBEEP_OK0Sucesso
PTIBEEP_WARNING1Alerta
PTIBEEP_ERROR2Erro

PTI_Print

Esta função imprime uma ou mais linhas de texto na impressora do terminal e retorna
imediatamente.

Até 40 caracteres por linha podem ser impressos, com quebras de linha identificadas pelo caractere
‘\r’ (código ASCII 13). Caracteres além das 40 colunas serão descartados.

Um caractere de controle na primeira posição de uma linha indica a mudança da fonte do caractere
utilizada para o texto da linha inteira. Caso o primeiro caractere de uma linha não é um caractere de
controle, a fonte padrão é utilizada. Os caracteres de controle suportados são:

Caractere de controleCódigo ASCII do caractereEfeito
‘\v’11Dobra a largura da fonte, consequentemente o
número de colunas suportado é dividido por dois.

PTI_PrnFeed deve ser chamada após uma ou mais chamadas a PTI_Print

👍

void PTI_Print

(LPCSTR pszTerminalId, LPCSTR pszText, PINT16 piRet)

➡Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

pszText
Texto a ser impresso (final nulo).

➡Saída:

nenhuma

➡Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida.
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.
PTIRET_NOTSUPPORTED ........Função não suportada pelo terminal.

PTI_PrnFeed

Esta função avança algumas linhas do papel da impressora, para permitir que o usuário destaque o
recibo.

👍

void PTI_PrnFeed

(LPCSTR pszTerminalId, PINT16 piRet)

➡ Entrada:

pszTerminalId Identificador único do terminal (final nulo)

➡Saída:

nenhuma

Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida.
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.
PTIRET_PRINTERR...................Erro na impressora.
PTIRET_NOPAPER ...................Impressora sem papel.
PTIRET_NOTSUPPORTED ........Função não suportada pelo terminal.

PTI_PrnSymbolCode

Esta função imprime um código de barras ou QR code na impressora do terminal.

👍

void PTI_PrnSymbolCode

(LPCSTR pszTerminalId, LPCSTR pszMsg, INT16 iSymbology, PINT16 piRet);

➡Entradas:

pszTerminalId
Identificador único do terminal (final nulo).

pszMsg
Código a ser impresso.

iSymbology
Tipo de código, conforme tabela abaixo.

➡Saídas:

não há.

➡Retorno (piRet):

PTIRET_OK ..............................Operação bem sucedida.
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_INTERNALERR.............Erro interno da biblioteca de integração.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.

592

5.3. Pagamento

Estas funções permitem que a Automação Comercial realize um pagamento através do terminal, ou
qualquer outro tipo de transação suportado pelo terminal.

1009

Abaixo está o diagrama que ilustra a sequência inteira das chamadas para uma transação completa:

316

PTI_EFT_Start

A Automação Comercial deve chamar esta função para iniciar qualquer nova transação.
Esta função retorna imediatamente.

👍

void PTI_EFT_Start

(LPCSTR pszTerminalId, INT16 iOper, PINT16 piRet)

➡ Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

iOper
Tipo de transação, de acordo a tabela abaixo.

➡Saída:

nenhuma

➡ Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida.
PTIRET _INVPARAM................Parâmetro inválido passado à função.
PTIRET _NOCONN...................O terminal está offline.
PTIRET _BUSY..........................O terminal está ocupado processando outro comando.

Lista dos tipos de transações:

767

PTI_EFT_AddParam

A Automação Comercial deve chamar esta função iterativamente após PTI_EFT_Start para definir
todos os parâmetros disponíveis para a transação.

Esta função retorna imediatamente.

👍

void PTI_EFT_AddParam

(LPCSTR pszTerminalId, INT16 iParam, LPCSTR pszValue, PINT16 piRet)

➡ Entrada:
pszTerminalId
Identificador único do terminal (final nulo).

iParam
Identificador do parâmetro, de acordo com o capítulo “TAG’s de entrada e
saída”.

pszValue
Valor do parâmetro (final nulo).

➡ Saída:
nenhuma

➡ Retorno (piRet):

PTIRET _OK .............................Operação bem-sucedida.
PTIRET _INVPARAM................Parâmetro inválido passado à função.
PTIRET _NOCONN...................O terminal está offline.
PTIRET _BUSY..........................O terminal está ocupado processando outro comando.

PTI_EFT_Exec

Esta função efetua de fato a transação, utilizando os parâmetros que foram previamente definidos
através de PTI_EFT_AddParam.

Esta função é blocante, e somente retorna após a conclusão (ou falha) da transação.

👍

void PTI_EFT_Exec

(LPCSTR pszTerminalId, PINT16 piRet)

➡Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

➡ Saída:

nenhuma

➡ Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida (para venda, significa transação
aprovada).
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.
PTIRET_EFTERR.......................A transação foi realizada, entretanto falhou.

PTI_EFT_GetInfo

A Automação Comercial deve chamar esta função iterativamente para recuperar os dados relativos à
transação que foi realizada (com ou sem sucesso) pelo terminal.

Esta função retorna imediatamente.

👍

void PTI_EFT_GetInfo

( LPCSTR pszTerminalId, INT16 iInfo, UINT16 uiBufLen, LPSTR pszValue, PINT16 piRet)

➡ Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

iInfo
Identificador da informação a ser obtida, conforme o capítulo “TAG’s de
entrada e saída”.

uiBufLen
Tamanho (em bytes) do buffer referenciado pelo ponteiro pszValue.

➡ Saída:

pszValue
Informação recuperada (final nulo).

➡ Retorno (piRet):

PTIRET_OK ..............................Operação bem-sucedida, informação retornada.
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_BUFOVRFLW ..............O tamanho do dado é maior que uiBufLen.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.
PTIRET_NODATA.....................Informação não disponível.

PTI_EFT_PrintReceipt

Esta função faz com que o terminal imprima o comprovante da última transação realizada.

A Automação Comercial pode optar por:

  • Utilizar esta função para imprimir uma ou ambas as vias (estabelecimento e/ou portador do
    cartão) do comprovante de pagamento;

  • Recuperar o conteúdo do comprovante através de PTI_EFT_GetInfo e:

Imprimir uma ou ambas as vias em uma impressora dedicada;
Enviar a cópia do portador do cartão por e-mail ou outro tipo de mensageria.

Nota: a via do estabelecimento deve sempre ser impressa quando PWINFO_CHOLDVERIF
(recuperado através de PTI_EFT_GetInfo) indicar que a assinatura do portador do cartão é requerida

👍

void PTI_EFT_PrintReceipt

(LPCSTR pszTerminalId, INT16 iCopies, PINT16 piRet)

➡ Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

iCopies
Soma dos valores da tabela abaixo.

➡Saída:

pszValue
Informação recuperada (final nulo).

Retorno (piRet):
PTIRET_OK ..............................Bem-sucedida, impressão iniciada.
PTIRET_INVPARAM.................Parâmetro inválido passado à função.
PTIRET_NOCONN....................O terminal está offline.
PTIRET_BUSY...........................O terminal está ocupado processando outro comando.
PTIRET_NODATA.....................Não há recibo a ser impresso.
PTIRET_PRINTERR...................Erro na impressora.
PTIRET_NOPAPER ...................Impressora sem papel

Identificadores da cópia do recibo:

NomeValorDescrição
PTIPRN_MERCHANT1Via do estabelecimento
PTIPRN_CHOLDER2Via do portador do cartão

PTI_EFT_Confirm

Qualquer transação financeira bem-sucedida (PTI_EFT_Exec retorna PTIRET_OK) deve ser
confirmada pela Automação Comercial através desta função para assegurar a integridade da
transação entre todas as partes (Automação Comercial e registro fiscais, terminal, adquirente,
emissor e portador do cartão).

Múltiplas transações podem ser realizadas simultaneamente por diversos terminais, entretanto, para
cada terminal, a transação deve ser confirmada antes de outra ser iniciada. Em cada momento,
somente pode haver no máximo uma única transação pendente para cada terminal.

Para minimizar cenários de desfazimento, é recomendável que a Automação Comercial confirme a
transação tão logo seja possível. Caso PTI_EFT_Exec retorne PTIRET_OK e a Automação Comercial não confirmar a transação imediatamente, esta deve ser armazenada em memória não volátil (arquivo) com todas as informações necessárias para confirmar ou desfazer a transação em caso de queda de energia que ocorra após esse momento.

Eventos que podem levar a um desfazimento da transação são:

  • Falha na impressora (quando a assinatura do portador do cartão for requerida);
  • Mercadoria não pode ser entregue (mecanismo do dispensador falha ou equivalente);
  • Falta de energia (portador do cartão utilizou um método de pagamento alternativo antes da volta
    da energia).

👍

void PTI_EFT_Confirm

(LPCSTR pszTerminalId, INT16 iStatus, PINT16 piRet)

➡ Entrada:

pszTerminalId
Identificador único do terminal (final nulo).

Status
Status final da transação, conforme detalhado abaixo.

➡ Saída:

nenhuma

Lista de possíveis status final para a transação:

NomeValorDescrição
PTICNF_SUCCESS1Transação confirmada.
PTICNF_PRINTERR2Erro na impressora, desfazer a transação.
PTICNF_DISPFAIL3Erro com o mecanismo dispensador, desfazer a transação.
PTICNF_OTHERERR4Outro erro, desfazer a transação.

5.4. Códigos de retorno

A tabela a seguir define os códigos de retorno existentes para todas as funções.

NomeValorDescrição
PTIRET _OK0Operação bem-sucedida
PTIRET _INVPARAM-2001Parâmetro inválido informado à função.
PTIRET _NOCONN-2002O terminal está offline.
PTIRET_BUSY-2003O terminal está ocupado processando outro comando.
PTIRET_TIMEOUT-2004Usuário falhou ao pressionar uma tecla durante o tempo
especificado.
PTIRET_CANCEL-2005Usuário pressionou a tecla [CANCELA].
PTIRET_NODATA2006Informação requerida não disponível.
PTIRET_BUFOVRFLW-2007Dados maiores que o tamanho do buffer fornecido.
PTIRET_SOCKETERR-2008Impossibilitado de iniciar escuta das portas TCP especificadas.
PTIRET_WRITEERR-2009Impossibilitado de utilizar o diretório especificado
PTIRET_EFTERR-2010A operação financeira foi completada, porém falhou.
PTIRET_INTERNALERR-2011Erro interno da biblioteca de integração.
PTIRET_PROTOCOLERR-2012Erro de comunicação entre a biblioteca de integração e o
terminal.
PTIRET_SECURITYERR-2013A função falhou por questões de segurança.
PTIRET_PRINTERR-2014Erro na impressora.
PTIRET_NOPAPER-2015Impressora sem papel.
PTIRET_NEWCONN-2016Novo terminal conectado.
PTIRET_NONEWCONN-2017Sem recebimento de novas conexões.
PTIRET_NOTSUPPORTED-2057Função não suportada pelo terminal.
PTIRET_CRYPTERR-2058Erro na criptografia de dados (comunicação entre a biblioteca de integração e o terminal).

5.5. Redes adquirentes

A tabela a seguir define os códigos das redes adquirentes que devem ser utilizados pelas automações comercial.

CódigoDescrição
BINFirst Data
CIELOCielo
CONDUCTORConductor
CREDSYSTEMCredSystem
CTFCTF
DMCARDDM Card
FDCORBANFirst Data (Correspondente Bancário)
FILLIPFillip
GAXGax
GETNETGetnet / Santader
GLOBALGlobal Payments
INFOCARDSInfocards
REDERede
RVRV
STONEStone
TICKETLOGTicketLog
VCMAISVC+
VEROBanrisul / Vero

5.6. TAG’s de entrada e saída

A tabela a seguir define todas as tag’s de entrada e saída de integração

NomeValorTamanhoEntradaSaídaDescrição
PWINFO_OPERATION02hb1XTransação que foi realizada:
“00” – sem definição
“01” – Venda (pagamento)
“02” – Administrativa (geral)
“04” – Estorno de venda
PWINFO_MERCHCNPJCPF1Chans..14XXCNPJ (ou CPF) do
Estabelecimento / Ponto de captura
PWINFO_TOTAMNT25hn..12XXValor da transação, em
centavos.

Este parâmetro é mandatório
para transações de venda
(PTITRN_SALE) e de estorno
(PTITRN_SALEVOID).
PWINFO_CURRENCY26hb..2XXCódigo da moeda, conforme o
padrão internacional ISO4217
(986 para Real, 840 para Dólar
americano). Este parâmetro é
requerido sempre que
PWINFO_TOTAMNT for
informado.
PWINFO_FISCALREF28hans..12XXNúmero da fatura (final nulo).
Este parâmetro é opcional.
PWINFO_CARDTYPE29hn..3XXModalidade da transação do cartão:
1: crédito;
2: débito;
4: voucher;
8: private label;
16: frota;
128: outros.
PWINFO_PRODUCTNAME2Ahans..20XNome/tipo do produto
utilizado, na nomenclatura do
Provedor.
PWINFO_REQNUM32hn..10XIdentificador único da
transação (gerado pelo
terminal).
PWINFO_AUTHSYST35hans..20XXNome da
adquirente/processadora que a transação será/foi
processada.

Código da Rede Adquirente,
conforme descrito no item 5.5.

Caso este campo seja
preenchido, a transação será realizada diretamente na rede
adquirente especificada.
PWINFO_VIRTMERCH36hn..9XIdentificador da afiliação
utilizada para o sistema de gerenciamento do terminal.
PWINFO_AUTMERCHID38hans..50XIdentificador do
estabelecimento para a
adquirente.
PWINFO_FINTYPE3Bhn..3XXModalidade de financiamento
da transação:
1: à vista;
2: parcelado pelo Emissor;
4: parcelado pelo
Estabelecimento;
8: pré-datado;
16: crédito emissor;
32: Prédatado parcelado.
PWINFO_INSTALLMENTS3Chb4XXQuantidade de parcelas, para transações parceladas
PWINFO_INSTALLMDATE3Dh6XXData de vencimento do prédatado, ou da primeira
parcela.
Formato “DDMMAA”.
PWINFO_AUTRESPCODE47hans..3XCaso a transação chegue ao sistema autorizador, esse é o código de resposta do mesmo (bit39 da mensagem ISO8583).
PWINFO_RESULTMSG42hans..80XMensagem de texto que
descreve o resultado da
transação (sucesso ou falha).
PWINFO_AUTLOCREF44hans..50XIdentificador único da
transação (gerado pelo sistema de gerenciamento do
terminal).
PWINFO_AUTEXTREF45hans..50XIdentificador único da
transação (gerado pela
adquirente/processadora).
PWINFO_AUTHCODE46hans..6XCódigo de autorização (gerado
pelo emissor).
PWINFO_DISCOUNTAMT49hans..12XXValor do desconto concedido
pelo Provedor, considerando
PWINFO_CURREXP, já
deduzido em
PWINFO_TOTAMNT.
PWINFO_CASHBACKAMT4Ahans..12XXValor do saque/troco,
considerando
PWINFO_CURREXP, já incluído
em PWINFO_TOTAMNT.
PWINFO_CARDNAME4Bhans..12XNome do cartão ou emissor.
WINFO_BOARDINGTAX4Dhans..1XXValor da taxa de embarque,
considerando
PWINFO_CURREXP, já incluído
em PWINFO_TOTAMNT.
PWINFO_TIPAMOUNT4Ehans..12XXValor da taxa de serviço
(gorjeta), considerando
PWINFO_CURREXP, já incluído
em PWINFO_TOTAMNT.
PWINFO_RCPTMERCH53hans..32000XComprovante – via do
estabelecimento
PWINFO_RCPTCHOLDER54hans..32000Comprovante – via do
portador
PWINFO_RCPTFULL52hans..32000XComprovante – via completa
PWINFO_RCPTCHSHORT55hans..32000XComprovante – via reduzida
PWINFO_TRNORIGDATE57hn6XData da transação original.
Este campo é utilizado para
transações de cancelamento.
Formato DDMMAA.
PWINFO_TRNORIGNSU58hans..50XNúmero de referência da
transação original (atribuído
pela
adquirente/processadora).

Este parâmetro é mandatório
para transações de estorno
(PTITRN_SALEVOID).
PWINFO_TRNORIGAUTH62hans..6XCódigo de autorização da
transação original. Este campo
é utilizado para transações de
cancelamento.
PWINFO_LANGUAGE6Ch1XIdioma a ser utilizado para a interface com o cliente:

0: Português
1: Inglês
2: Espanhol
PWINFO_DATETIME31hn14XHorário do servidor PGWEB.
PWINFO_TRNORIGTIME73hn6XHorário da transação original.
Este campo é utilizado para
transações de cancelamento.
Formato HHMMSS.
PWINFO_CARDENTMODEC0hb4XModo de entrada do cartão:
1: número do cartão digitado
2: tarja magnética
4: chip com contato EMV
16: fallback para tarja
magnética
32: chip sem contato
simulando tarja magnética
64: chip sem contato EMV
128: indica que a transação
atual é oriunda de um fallback
(flag enviado do servidor para
o ponto de captura).
256: fallback de tarja para
digitado
PWINFO_CARDPARCPANC8hans..19XNúmero do cartão mascarado
PWINFO_CHOLDVERIFCFhb1XVerificação do portador do
cartão, soma de:
1: assinatura
2: verificação offline da senha
4: senha offline bloqueada
durante a transação
8: verificação on-line da senha
PWINFO_MERCHADDDATA1F0hans..127XNúmero de referência da
transação atribuído pela
Automação Comercial.
Caso fornecido, este número será incluído no histórico de dados da transação e
encaminhado à
adquirente/processadora, se suportado.
Este parâmetro é opcional.
PWINFO_MERCHADDDATA2F1hans..127XDados adicionais específicos do
negócio. Caso fornecido, será
incluso no histórico de dados
da transação, por exemplo
para referências cruzadas.
Este parâmetro é opcional.
PWINFO_MERCHADDDATA3F2hans..127XDados adicionais específicos do
negócio. Caso fornecido, será
incluso no histórico de dados
da transação, por exemplo
para referências cruzadas.
Este parâmetro é opcional.
PWINFO_MERCHADDDATA4F3hans..127XDados adicionais específicos do
negócio. Caso fornecido, será
incluso no histórico de dados
da transação, por exemplo
para referências cruzadas.
Este parâmetro é opcional.
PWINFO_PNDAUTHSYST7F05hans..20XNome do provedor para o qual
existe uma transação
pendente.
PWINFO_PNDVIRTMERCH7F06hn..9XIdentificador do
Estabelecimento para o qual
existe uma transação
pendente.
PWINFO_PNDAUTLOCREF7F08hn..50XReferência para a
infraestrutura Erro! Nome de
propriedade do documento
desconhecido. da transação
que está pendente.
PWINFO_PNDAUTEXTREF7F09hans..50XReferência para o Provedor da
transação que está pendente.
PWINFO_DUEAMNTBF06hans..12XValor devido pelo usuário,
considerando
PWINFO_CURREXP, já
deduzido em
PWINFO_TOTAMNT.
PWINFO_READJUSTEDAMNTBF09hans..12XValor total da transação
reajustado, este campo será
utilizado caso o autorizador,
por alguma regra de negócio
específica dele, resolva alterar
o valor total que foi solicitado
para a transação.