Introdução

Este documento destina-se a especificar o processo de integração entre um terminal de pagamento Cielo (“POS”) e um sistema de checkout, de forma a se poder cumprir exigências legais de alguns estados brasileiros.

Por “checkout” entende-se um conjunto de hardware e software responsável por gerir o processo de venda de bens ou serviços em um estabelecimento através de um sistema de Automação Comercial, incluindo os processos de registro fiscal exigidos pelo governo (por exemplo, impressão de comprovante em uma impressora fiscal ou geração de Nota Fiscal Eletrônica).

Esta especificação define uma forma de trabalho diferenciada para o POS Cielo denominada “Modo Integrado”, de forma a cumprir as seguintes premissas:

Os capítulos a seguir descrevem de forma detalhada como o Modo Integrado funciona e quais são as informações trocadas entre os dois sistemas.

Alternativamente, sistemas de checkout que têm implementado o processo de troca de arquivos definido para o antigo “Gerenciador Padrão TEF Discado” podem utilizar uma aplicação MS/Windows distribuída pela Cielo conforme descrito no Capítulo 4, dispensando a implementação especificada neste documento.

Alternativamente, sistemas de checkout que têm implementado o processo de troca de arquivos definido para o antigo “Gerenciador Padrão TEF Discado” podem utilizar uma aplicação MS/Windows distribuída pela Cielo conforme descrito no Capítulo 4, dispensando a implementação especificada neste documento.

Referências

Formatos usados neste documento

Este documento menciona diversos dados em funções e tabelas, sendo que estes dados, por suas características, devem respeitar diferentes regras de codificação.

A representação de um formato segue a seguinte regra: “[Caractere de Formato][..][Tamanho]”

[Caractere de Formato] = Letra maiúscula que define o formato.

[..] = Opcional, indica que o dado é de tamanho variável, podendo ter de zero a [Tamanho] bytes. [Tamanho] = De um a quatro dígitos numéricos representando a quantidade de bytes utilizada pela informação, ou “var” para indicar tamanho indefinido.

Exemplos:

A tabela seguir detalha os formatos adotados neste documento:

Formato Descrição
A Alfanumérico codificado segundo tabela ASCII, podendo conter bytes de 20h (espaço) a 7Eh (~). Quando a informação for menor do que o campo definido, ela deverá ser alinhada à esquerda com espaços (20h) à direita.Exemplo: Se um campo de formato “A6” contém a informação “TEXTO”, ele é codificado como: 54h 45h 58h 54h 4Fh 20h.
N Numérico decimal codificado segundo a tabela ASCII, podendo conter somente bytes de 30h (“0”) a 39h (“9”). Quando a informação for menor do que o campo definido, ela deverá ser alinhada à direita com zeros (30h) à esquerda.Exemplo: Se um campo de formato “N8” contém a informação numérica 1234, ele é codificado como: 30h 30h 30h 30h 31h 32h 33h 34h.

Visão Geral

Escopo

A solução definida neste documento se aplica a estabelecimentos com poucos checkouts. Paraestabelecimentos com muitos checkouts (um grande supermercado, por exemplo) recomenda-se o uso de soluções TEF com pinpads.

São premissas desta solução:

O diagrama a seguir ilustra o exemplo de um estabelecimento com dois checkouts e três POS Cielo, sendo que os POS #1 e #2 operam com o checkout A, enquanto o POS #3 opera com o checkout B.

Fluxo simplificado

O diagrama a seguir ilustra, de forma simplificada, o fluxo de comunicação entre o POS e o checkout.

O Modo Integrado pressupõe que o POS e o checkout estejam em uma mesma rede local, sendo que o POS usa conexão via Wi-Fi.

A operação de pagamento segue o seguinte fluxo:

  1. O checkout inicia um processo de pagamento via cartão (1), aguardando a conexão de um terminal POS da CIELO via Wi-Fi (TCP/IP).
  2. O lojista usa um POS da CIELO e inicia o pagamento via menu ou cartão (2), da mesma forma como é operado um POS autônomo. Este POS deve estar previamente configurado para comunicar com o checkout em questão (ver seção 2.3).
  3. Ao chegar na tela de captura do valor, o POS se conecta ao checkout (3) para receber essa informação que não poderá ser editada.
  4. Ao concluir a operação, o POS não imprime o comprovante e devolve os dados para o checkout (4), indicando sucesso ou fracasso, fornecendo também as informações para os procedimentos fiscais (ECF ou sistema de Nota Fiscal Eletrônica).
  5. O checkout efetua os procedimentos fiscais, imprimindo comprovante na ECF (5), por exemplo.
  6. Ao final, o checkout devolve uma confirmação para o POS (6), indicando se tudo correu bem ou se houve algum problema nos procedimentos fiscais ou outro erro fatal que implique na anulação da transação.

Alterações no POS

No “Modo Integrado”, o POS efetua todas as operações não financeiras da mesma forma que o POS convencional (inicialização, consultas, pré-autorização, reimpressão, relatórios, etc). Somente as transações financeiras (de pagamento) são afetadas neste modo.

O cadastro do POS na Cielo indica se ele opera em “Modo Integrado” ou de forma “convencional” (autônomo), sendo que isso não pode ser modificado manualmente no equipamento.

A aplicação do POS Cielo conta com as seguintes modificações quando opera em “Modo Integrado”:

A aplicação do POS Cielo conta com as seguintes modificações quando opera em “Modo Integrado”:

Comunicação

Este capítulo apresenta em detalhes como é feita a comunicação entre o POS e o checkout.

Fluxo detalhado

O fluxo a seguir ilustra os processos envolvidos na comunicação entre as partes:

  1. Ao finalizar o registro dos produtos sendo vendidos, o operador seleciona a opção “Pagamento em Cartão” no checkout. Neste momento, o checkout abre uma tela indicando “Aguardando POS Cielo…” e entra em modo de espera por uma conexão socket TCP/IP (“listen”).
  2. O operador inicia uma transação de pagamento no POS. Ao invés de solicitar o valor, o POS efetua uma conexão socket TCP com o checkout (“connect”).
  3. O POS envia ao checkout uma mensagem de “início de sessão” e este devolve algumas informações úteis, como o valor a ser pago.
  4. O POS poderá desconectar o socket TCP para liberar recursos (“closesocket”). O checkout apresenta uma mensagem de “Aguardando autorização…” e volta a ficar em modo “listen”, aguardando nova conexão socket TCP.
  5. O POS se conecta à Cielo para efetuar a autorização financeira.
  6. Independentemente do resultado da autorização (sucesso ou falha), o POS efetua uma nova conexão socket TCP com o checkout (“connect”), se necessário, e envia o resultado da autorização em uma mensagem de “fim de sessão”.
  7. Se a transação financeira for aprovada, o checkout efetua os procedimentos fiscais exigidos pelo governo e devolve uma resposta ao POS indicando se estes foram bem-sucedidos.
  8. O POS desconecta o socket TCP para liberar recursos (“closesocket”). Se a transação foi aprovada na Cielo, mas o checkout indicou falha nos procedimentos fiscais, o POS marca

Observações:

Formato das mensagens

As mensagens trocadas entre o POS e checkout utilizam o formato JSON. Além disso, para evitar fragmentação por conta da rede TCP/IP, as mensagens devem ser encabeçadas por dois bytes que indicam o tamanho.

Ao receber uma mensagem via socket, o receptor deve conferir os bytes de tamanho e, se estes indicarem uma quantidade de bytes maior do que foi recebido, isso indica que houve fragmentação. Neste caso, deve-se buscar mais bytes na camada TCP/IP até que a mensagem esteja completa.

O tempo máximo de espera por um fragmento de mensagem é de 1 (um) segundo.

Corpo da mensagem (JSON):

{
  "msg_id": "CmdInitSession",
  "pos_id": "91746241",
  "seq_pos": "00018725"
}

Bytes trafegados

00 49 7B 93 6D 73 67 5F 69 64 94 3A 20 93 43 6D 64 49 6E 69 74 53 65 73 73 69 6F 6E 94 2C 20 93 70 6F 73 5F 69 64 94 3A 20 93 39 31 37 34 36 32 34 31 94 2C 20 93 73 65 71 5F 70 6F 73 94 3A 20 93 30 30 30 31 38 37 32 35 94 7D

Comandos e Respostas

Esta seção define o formato das mensagens trocadas entre o POS e o checkout.

Observações

Início de sessão

Este comando é enviado pelo POS ao checkout para iniciar um processo de pagamento. Neste momento, o operador já deve ter selecionado a opção de “pagamento com cartão” no checkout, que fica em estado de espera para iniciar a sessão.

Na resposta a este comando, o checkout devolve o valor que será usado na transação, sendo que ele não poderá ser editado pelo operador do POS.

Comando

Campo Tipo Formato Presença Descrição
msg_id string A..20 M Identificação do comando: “CmdInitSession”.
pos_id string A8 M Código do POS na rede Cielo.
seq_pos string N8 M Número sequencial da sessão gerado pelo POS.

Observações

Campo Tipo Formato Presença Descrição
msg_id string A..20 M Identificação da resposta: RspInitSession.
pos_id string A8 M Código do POS na rede Cielo.
seq_pos string N8 M Número sequencial da sessão gerado pelo POS.
status number N..2 M 0 → O checkout iniciou a sessão com sucesso;
1 → Parâmetro passado é inválido;
2 → Parâmetro mandatório não foi recebido;
3 → Operação cancelada pelo operador;
10 → Processo de pagamento não foi iniciado no checkout pelo operador;
11 → O checkout está ocupado atendendo outro terminal;
99 → Outro erro.
seq_ac string N8 O Número sequencial da sessão gerado pelo checkout (só é devolvido em caso de sucesso).
transaction object O Parâmetros da transação a ser efetuada no POS (só é devolvido em caso de sucesso).
transaction.amount string N..12 O Valor da transação, inteiro em centavos.
last_endsession object O Dados da última resposta RspEndSession devolvida para este POS em uma sessão anterior.
Se for a primeira sessão deste POS com este checkout, este objeto não é devolvido.
.seq_pos string N8 MO Número sequencial gerado pelo POS para a sessão referida.
.seq_ac string N8 MO Número sequencial gerado pelo checkout para a sessão referida.
.status number N..2 MO Status devolvido pelo checkout ao finalizar a sessão referida.
         

Observações:

Exemplo:

O POS envia um comando para iniciar uma sessão.

POS ➡️

{
    "msg_id": "CmdInitSession",
    "pos_id": "91746241",
    "seq_pos": "00018725"
}

O checkout aceita a conexão e informa o valor de R$ 125,80:

AC ➡️

{
    "msg_id": "RspInitSession",
    "pos_id": "91746241",
    "seq_pos": "00018725",
    "status": 0,
    "seq_ac": "00000098",
    "transaction": {
        "amount": "12580"
    },
    "last_endsession": {
        "seq_pos": "00018724",
        "seq_ac": "00000097",
        "status": 0
    }
}

Finalização de sessão

Este comando é enviado pelo POS ao checkout para indicar a conclusão do processo de pagamento, seja este bem ou malsucedido.

Em caso de sucesso, o POS envia uma série de informações referentes à transação efetuada, bem como imagens dos comprovantes que podem ser impressos pelo checkout.

Comando

Campo Tipo Formato Presença Descrição
msg_id string A..20 M Identificação do comando: CmdEndSession.
pos_id string A8 M Código do POS na rede Cielo.
seq_pos string N8 M Número sequencial da sessão gerado pelo POS.
seq_ac string N8 M Número sequencial da sessão gerado pelo checkout, devolvido em RspInitSession.
status number N..2 M 0 → Transação aprovada; 1 → Parâmetro passado é inválido; 2 → Parâmetro mandatório não foi recebido; 3 → Operação cancelada pelo operador; 20 → Problema de comunicação entre o POS e a rede Cielo; 21 → Transação negada pela rede Cielo; 99 → Outro erro.
message string A..64 O Mensagem opcional gerada pelo POS, seja de sucesso ou de falha.
pos_sn string A..32 M Número de série do terminal.
transaction object O Dados da transação financeira autorizada pelo POS (este objeto só é devolvido se a transação for aprovada).
.amount string N..12 MO Valor aprovado da transação, inteiro em centavos. IMPORTANTE: Este valor pode ser menor do que o solicitado pelo checkout no caso de aprovação parcial.
.prod_pri number N..4 MO Código do produto matriz (tabela Cielo).
.prod_sec number N..4 MO Código do produto secundário (tabela Cielo).
.installments number N..2 O Número de parcelas, para o caso de transação parcelada.
.nsu string N6 MO Número único gerado pelo POS para identificar a transação na rede Cielo.
.aut string N6 O Código de autorização gerado pela rede Cielo (se cartão crédito/débito).
.timestamp string A19 MO Data e hora da transação, no formato aaaa-mm-ddThh:mm:ss.
.id_pix string A32 O Identificador único da transação no Banco Central (somente para Pix).
.receipt_gen string array A..32 MO Conjunto de strings correspondente ao comprovante da transação, via genérica que vale tanto para cliente quanto para o lojista (cada string representa uma linha).

Os códigos do produto (matriz e secundário) identificam o tipo de transação efetuada (por exemplo: cartão de crédito à vista, parcelado, cartão de débito, Pix, voucher, etc.) e não estão aqui especificados por serem dinâmicos e configuráveis nas tabelas do POS Cielo. Estas informações devem ser fornecidas pela Cielo em um documento à parte.

Campo Tipo Formato Presença Descrição
.receipt_cli string array A..32 MO Conjunto de strings correspondente ao comprovante da transação, via do cliente (cada string representa uma linha do comprovante).
.receipt_cli_sm string array A..32 MO Conjunto de strings correspondente ao comprovante da transação, via do cliente - comprovante reduzido (cada string representa uma linha do comprovante).
.receipt_mch string array A..32 MO Conjunto de strings correspondente ao comprovante da transação, via do lojista (cada string representa uma linha do comprovante).

Observações:

Resposta

Campo Tipo Formato Presença Descrição
msg_id string A..20 M Identificação do comando: RspEndSession.
pos_id string A8 M Código do POS na rede Cielo.
seq_pos string N8 M Número sequencial da sessão gerado pelo POS.
seq_ac string N8 M Número sequencial da sessão gerado pelo checkout, mesmo valor devolvido em RspInitSession.
status number N..2 M 0 → Sessão finalizada (procedimentos fiscais efetuados com sucesso no caso de transação autorizada);
1 → Parâmetro passado é inválido;
2 → Parâmetro mandatório não foi recebido;
3 → Operação cancelada pelo operador;
4 → Inconsistência em seq_ac;
12 → Erro ao efetuar os procedimentos fiscais (impressão de comprovante no ECF, por exemplo);
99 → Outro erro.
OBS: Se o status fornecido pelo POS em CmdEndSession for diferente de 0, o checkout deve replicar aqui o mesmo valor.

Observações:

Exemplo

O POS envia um comando para finalizar a sessão, indicando sucesso na transação de pagamento.

POS ➡️

{
    "msg_id": "CmdEndSession",
    "pos_id": "91746241",
    "seq_pos": "00018725",
    "seq_ac": "00000098",
    "status": 0,
    "pos_sn": "987264BY3463-23",
    "transaction": {
        "amount": "12580",
        "prod_pri": 1003,
        "prod_sec": 14,
        "nsu": "987654",
        "aut": "901782",
        "installments": 3,
        "timestamp": "2023-11-29T15:02:18",
        "receipt_gen": [
            " CIELO",
            "29/11/2023 23:14:56",
            "",
            "LOJAS DA CHINA",
            "RUA 25 DE MARCO, 123",
            "SAO PAULO - SP",
            "EC:000237236782351 POS:91746241",
            "",
            "VALOR: 125,80",
            "",
            "************6254 ONL-C",
            "DOC:987654 AUT:901782",
            "",
            " AUTORIZADA COM SENHA",
            " 446353-6254",
            "A0000000031010-6FA837C30903A7D6",
            " CREDITO VISA"
        ],
        "receipt_cli": [
            " CIELO – VIA CLIENTE",
            "29/11/2023 23:14:56",
            "",
            "LOJAS DA CHINA",
            "RUA 25 DE MARCO, 123",
            "SAO PAULO - SP",
            "EC:000237236782351 POS:91746241",
            "",
            "VALOR: 125,80",
            "",
            "************6254 CREDITO VISA",
            "DOC:987654 AUT:901782"
        ],
        "receipt_cli_sm": [
            "CIELO 29/11/2023 23:14:56",
            "POS:91746241 ETB:000237236782351",
            "VLR: 125,80 CREDITO VISA ***6254",
            "DOC:987654 AUT:901782"
        ],
        "receipt_mch": [
            " CIELO – VIA LOJA",
            "29/11/2023 23:14:56",
            "",
            "LOJAS DA CHINA",
            "RUA 25 DE MARCO, 123",
            "SAO PAULO - SP",
            "EC:000237236782351 POS:91746241",
            "",
            "VALOR: 125,80",
            "",
            "************6254 ONL-C",
            "DOC:987654 AUT:901782",
            "",
            " AUTORIZADA COM SENHA",
            " 446353-6254",
            "A0000000031010-6FA837C30903A7D6",
            " CREDITO VISA"
        ]
    }
}

O checkout recebe os dados da transação, efetua os procedimentos fiscais e retorna indicação de sucesso para o POS.

AC ➡️

{
    "msg_id": "RspEndSession",
    "pos_id": "91746241",
    "seq_pos": "00018725",
    "seq_ac": "00000098",
    "status": 0
}

Fluxo de comunicação no checkout

Esta sessão detalha como o checkout deve tratar a comunicação TCP/IP com o POS, contemplando eventuais situações de erro.

O checkout adota as seguintes premissas para trocar mensagens com o POS:

O fluxograma a seguir detalha o processo de comunicação a ser efetuado pelo checkout imediatamente após o operador solicitar pagamento usando a Cielo:

Situações de exceção

Esta sessão ilustra o comportamento esperado dos sistemas POS e checkout em situações de exceção.

Transação negada

O diagrama a seguir mostra a situação em que a transação financeira não é aprovada na rede Cielo.

A Cielo nega a transação (1). O POS envia um comando para finalizar a sessão, indicando que a transação foi negada (2) com a mensagem “SALDO INSUFICIENTE”.

Exemplo de Fluxo

  1. A Cielo nega a transação.

  2. O POS envia um comando para finalizar a sessão, indicando que a transação foi negada com a mensagem “SALDO INSUFICIENTE”:

POS ➡️

{
  "msg_id": "CmdEndSession",
  "pos_id": "91746241",
  "seq_pos": "00018725",
  "seq_ac": "00000098",
  "status": 21,
  "pos_sn": "987264BY3463-23",
  "message": "SALDO INSUFICIENTE"
}

O checkout recebe a informação de negação e fecha a sessão com sucesso:

AC ➡️

{
    "msg_id": "RspEndSession",
    "pos_id": "91746241",
    "seq_pos": "00018725",
    "seq_ac": "00000098",
    "status": 21
}

Checkout ocupado

O diagrama a seguir mostra uma situação em que o checkout está ocupada atendendo um outro POS.

O POS envia um comando para iniciar uma sessão:

POS ➡️

{
    "msg_id": "CmdInitSession",
    "pos_id": "91746241",
    "seq_pos": "43567484"
}

O checkout não aceita a conexão, informando que está com uma sessão aberta com outro terminal.

AC ➡️

{
    "msg_id": "RspInitSession",
    "pos_id": "91746241",
    "seq_pos": "43567484",
    "status": 11
}

Não foi possível conectar o checkout

O diagrama a seguir ilustra a situação em que a transação é efetuada com sucesso na rede Cielo, maso POS não consegue a conexão socket para finalizar a sessão com o checkout. Esta situação pode ocorrer com facilidade se o operador cancelar o processo.

Se o POS não conseguir conexão socket com o checkout em 5 (cinco) segundos, ele deve desfazer a transação com a rede Cielo.

Erro no procedimento fiscal

O diagrama a seguir mostra a situação em que a transação financeira é aprovada na rede Cielo, mas o checkout não consegue efetuar os procedimentos fiscais e decide cancelar o pagamento.

A rede Cielo aprova a transação (1) e o POS envia um comando para finalizar a sessão, indicando sucesso (2).

POS ➡️

{
    "msg_id": "CmdEndSession",
    "pos_id": "91746241",
    "seq_pos": "00018725",
    "seq_ac": "00000098",
    "status": 0,
    "pos_sn": "987264BY3463-23",
    "transaction": {
        "amount": "12580",
        "prod_pri": 3,
        "prod_sec": 14,
        "nsu": "987654",
        "aut": "901782",
        "installments": 3,
        "timestamp": "2023-11-29T15:02:18",
        "receipt_gen": [
            // Conjunto de strings correspondente ao comprovante genérico
        ],
        "receipt_cli": [
            // Conjunto de strings correspondente ao comprovante do cliente
        ],
        "receipt_cli_sm": [
            // Conjunto de strings correspondente ao comprovante reduzido do cliente
        ],
        "receipt_mch": [
            // Conjunto de strings correspondente ao comprovante do lojista
        ]
    }
}

O checkout recebe os dados da transação, mas não consegue efetuar os procedimentos fiscais e retorna indicação de erro para o POS (3).

AC ➡️

{
    "msg_id": "RspEndSession",
    "pos_id": "91746241",
    "seq_pos": "00018725",
    "seq_ac": "00000098",
    "status": 12
}

O POS desfaz a transação na rede Cielo (4).

Implementação Alternativa (SIMBIOSE)

Existe um padrão antigo de mercado para comunicação entre sistemas de checkout e sistemas de pagamento usando troca de arquivos especificado pelo documento TEF_DIAL. Apesar de ser um padrão bem antigo, ele ainda é suportado por diversos sistemas de checkout do mercado brasileiro.

Para facilitar a integração com esses sistemas existentes, a Cielo fornece uma aplicação denominada “SIMBIOSE” capaz de emular essa troca de arquivos e implementar a comunicação com o POS usando o protocolo JSON especificado neste documento.

Este formato organiza a informação de forma clara e acessível, destacando a aplicação SIMBIOSE

O “SIMBIOSE” implementa o esquema especificado no documento TEF_DIAL com as seguintes diferenças:

Somente os seguintes tipos de operação estão implementados:

Operação Descrição
“ATV” Verifica se o SIMBIOSE está ativo.
“CRT” Pedido de autorização para transação por meio de cartão.
“CNF” Confirmação da venda e realização dos processos fiscais.
“NCN” Não confirmação da venda e/ou realização dos processos fiscais.

Os seguintes campos foram criados para implementar os diferentes tipos e vias de comprovante:

Campo Descrição
028-000 Quantidade de linhas do comprovante genérico (“.receipt_gen”).
029-xxx Cada uma das linhas do comprovante genérico (“.receipt_gen”), sendo xxx >= “001”.
710-000 Quantidade de linhas do comprovante reduzido (“.receipt_cli_sm”).
711-xxx Cada uma das linhas do comprovante reduzido (“.receipt_cli_sm”), sendo xxx >= “001”.
712-000 Quantidade de linhas da via do cliente (“.receipt_cli”).
713-xxx Cada uma das linhas da via do cliente (“.receipt_cli”), sendo xxx >= “001”.
714-000 Quantidade de linhas da via do estabelecimento (“.receipt_mch”).
715-xxx Cada uma das linhas da via do estabelecimento (“.receipt_mch”), sendo xxx >= “001”.