Objetivo
Facilitar operações de alto volume de transações Pix, de forma escalável e auto-gerenciável para evitar intervenções manuais em caso de instabilidades na Atar, Parceiro liquidante ou arranjo Pix.
Demanda
A demanda consiste em criar uma API e interface para criação, execução, gerenciamento e acompanhamento de lotes Pix. O cliente deve conseguir consumir a funcionalidade via uma interface WEB, ou via integração de API.
Procedimento Existente
Atualmente o gerenciamento de lote fica a cargo do cliente que está integrando, onde ele executa cada operação individualmente. Em lotes com o volume alto de transações, podem existir gargalos e inconsistências na Atar e no Liquidante, gerando erros inesperados e transações presas, afetando a integridade do sistema.
Requisitos
Como requisito será necessário criar:
- Um novo micro serviço para operações de Pix em lote, onde o usuário poderá criar lotes, executar lote, acompanhar execução do lote e consultar comprovantes;
- Uma interface WEB que permita o usuário criar lotes manualmente, executar lote, acompanhar execução do lote e baixar comprovantes.
Todo o processamento do lote deverá ocorrer de forma assíncrona, utilizando a chave de idempotência para reprocessar a transação em caso de falha de comunicação ou instabilidade.
Em caso de chargeback da transação por instabilidade no arranjo, a transação deve ser reprocessada.
Em caso de transações que não sofreram atualização por parte do Liquidante após algum tempo, o sistema deve buscar um estímulo, ou caso necessário, enviar alertas de transações pendentes para o suporte.
Instruções
1.Criação
1.1 Criação do lote(Batch):
Para iniciar o processo de envio do lote, é necessário a criação do mesmo, no exemplo abaixo, detalhamos o que ocorre em cada etapa da requisição.
Endpoint
- POST /pix/batch
Campos de entrada:
{
"name": "string" # nome do lote
}
Exemplo cURL:
curl --location --request POST '{URI}/pix/batch' \
--header 'Atar-ApiKey: 00be0083-8c8d-4d09-9f8f-***********' \ # Api key de acesso
--header 'Authorization: Bearer eyJhbGciOiJIUzI1**********' \ # token
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Brenno Test"
}' # payload
Exemplo de resposta:
{
"status": "pending", # status do lote
"name": "Brenno Test", # nome do lote
"quantityItems": 0, # quantidade de itens dentro do lote
"timestamp": 1662650197, # timestamp da criação do lote
"type": "pix", # tipo de transação
"id": "ag5zfndlYXJhdGFyLWRldnIdCxIQVHJhbnNhY3Rpb25CYXRjaBiAgMC87_29CgyiAQNwYXk" # identificador do lote
}
1.2 Inserindo Itens no lote(batch):
Para inserir itens no lote, o primeiro passo é consultar a chave pix da qual deseja inserir no item, utiliza-se o endpoint GET /pix/keys/{key}, obtendo os detalhes da chave, poderá inserir no campo To do item, a seguir o exemplo de detalhes retornados.
{
"accountType": "checkingAccount", # Tipo da conta
"branch": "37**", # Agencia
"key": "5511*********", # Chave pix informada
"accountNumber": "12345678",# Numero da conta
"institutionName": "Atar", # Nome da instituicao da conta
"document": "12345678912", # Documento do portador da chave
"type": "phone",# Tipo de chave
"institution": "********", # Indentificador da instituicao da conta
"name": "Brenno Camilo Maia" # Nome do portador da chave
}
Insere itens no lote:
Endpoint
Deve ser informado o id do lote e as informações do pagamento e pagador;
-POST /pix/batch/{batchId}/items
Exemplo de cURL:
curl --location --request POST '{URI}/pix/batch/{BatchID}/items' \
--header 'Atar-ApiKey: 00be0083-8c8d-**********' \
--header 'Authorization: Bearer eyJhbGc**********' \
--header 'Content-Type: application/json' \
--data-raw '[
{
"amount": 10, # valor
"identifier": "02fb7933-6996-44cc-aaef-2b7683a130f6", # identificador
"description": "Pagamento", # descrição do item
"to": {
"accountType": "checkingAccount", # dados que serão utilizados para envio do pix, é possível pegar no -GET /pix/keys/{key}
"branch": "string",
"key": "string",
"accountNumber": "string",
"institutionName": "string",
"document": "string",
"type": "string",
"institution": "string",
"name": "string"
}
}
]'
Exemplo de resposta:
{
"data": [
{
"itemId": "ag5zfndlYXJhdGFyLWRldnIhCxIUVHJhbnNhY3Rpb25CYXRjaEl0ZW0YgIDAgunWwwoMogEDcGF5", # id do item
"status": "waiting", # status do item
"description": "Pagamento", # descrição
"to": { # dados que serão utilizados para a transação.
"accountType": "checkingAccount", # tipo de conta
"accountNumber": "string", # numero da conta
"institutionName": "string", # instituição
"key": "string", # key do pix
"branch": "string", # agencia
"document": "string", # documento
"type": "string", # tipo da chave pix
"institution": "string", # numero instituição
"name": "string" nome
},
"amount": 10, # valor
"identifier": "02fb7933-6996-44cc-aaef-2b7683a130f6" # identificador
}
]
}
2. Edição
2.1 Edição do lote:
Para editar um lote estão disponíveis as seguintes ações, deletar um item do lote, seja um item indesejado ou para alterar um dado do item. A rota utilizada não permite o método PUT, então é necessário deletar um ou mais itens e adiciona-los novamente. Também é possível deletar um lote cadastro se o mesmo ainda em estado de aguardando o processamento(pending).
Endpoint
Consultando os lotes já cadastrados, é possível identificar o lote desejado para edição, conforme o detalhamento descrito em Visualização(logo abaixo).
Deve ser informado o BatchId e o ItemId e as informações do pagamento e pagador;
- DELETE /pix/batch/{batchId}/items/{itemId}
Exemplo de cURL:
curl --location --request DELETE 'https://{URI}/pix/batch/{batchId}/items/{itemId}' \
--header 'Atar-ApiKey: 00be0083-8c8d***********' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI***************'
Exemplo de resposta:
202 Accepted
2.2 Remover um lote
Deve ser informado o BatchId para remoção do mesmo.
Endpoint:
- DELETE /pix/batch/{BatchId}
Exemplo de cURL:
curl --location --request DELETE 'https://{URI}/pix/batch/{BatchId}' \
--header 'Atar-ApiKey: 00be0083-8c8**********' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1*********'
Exemplo de resposta:
202 Accepted
3. Execução
3.1 Start do processo
Neste momento inicia o processo de envio dos lotes para pagamento
Endpoint
Deve ser informado o id do lote e as informações do pagamento e pagador;
-POST /pix/batch/{BatchId/start-process
Exemplo de cURL:
curl --location --request POST 'https://{URI}/pix/batch/{BatchID}/start-process' \
--header 'Atar-ApiKey: 00be0083-8c*******' \
--header 'Authorization: Bearer eyJhbGciOiJI*******'
Exemplo de resposta:
{
"status": "processing", # status
"timestamp": 1662650197, # timestamp
"id": "ag5zfndlYXJhdGFyLWRl", # identificador
"name": "Brenno Test" # nome do lote
}
4. Visualização
Consultar os dados de um Batch ou itens, também é possível acompanhar o processamento do lote.
4.1 Consultando os lotes cadastrados;
Neste momento é possível exibir todos os lotes criados.
Endpoint:
- GET /pix/batch
Exemplo cURL:
curl --location --request GET '{URI}/pix/batch' \
--header 'Atar-ApiKey: 00be0083-8c8d-4d09-9f8f-***********' \ # Api key de acesso
--header 'Authorization: Bearer eyJhbGciOiJIUzI1**********' \ token
--header 'Content-Type: application/json'
Exemplo de resposta:
A estrutura de retorno é a mesma de quando o lote cadastrado, contendo os mesmos campos: status, name, quantityItems, timestamp, type, id, exceto o cursor, falarei sobre ele a seguir;
{
"cursor": null,
"data": [
{
"status": "pending",
"name": "Brenno Test",
"quantityItems": 0,
"timestamp": 1662650197,
"type": "pix",
"id": "ag5zfndlYXJhdGFyLWRldnIdCxIQVHJhbnNhY3Rpb25CYXRjaBiAgMC87_29CgyiAQNwYXk"
},
{
"status": "pending",
"name": "Felipe",
"quantityItems": 4,
"timestamp": 1661526634,
"type": "pix",
"id": "ag5zfndlYXJhdGFyLWRldnIdCxIQVHJhbnNhY3Rpb25CYXRjaBiAgMCsxfyUCQyiAQNwYXk"# s"
}
Pontos de atenção:
Cursor: este campo faz o papel de uma paginação, quando este campo é diferente de null, isso significa que existe mais informações em uma outra pagina, para ter acesso a mesma deve executar o endpoint passando o cursor retornado:
- GET /pix/batch/{cursor}
Note: a estrutura de retorno será a mesma do ' -GET pix/batch '.
4.2 Consultando Itens do lote
Consultar o item do batch é necessário para saber os status e detalhes de cada item que foi ou será processado.
Exemplo cURL:
curl --location --request GET 'https://{URI}/pix/batch/{BatchID}/items' \
--header 'Atar-ApiKey: 00be0083-8c8d-**********' \
--header 'Authorization: Bearer eyJhbGciOi*************'
Exemplo de resposta:
{
"cursor": null,
"data": [
{
"itemId": "ag5zfndlYXJhdGFyLWRldnIhCxIUVHJhbnNhY3Rpb25CYXRjaEl0ZW0YgIDAgunWwwoMogEDcGF5",
"status": "waiting",
"description": "Pagamento",
"to": {
"accountType": "checkingAccount",
"accountNumber": "5685206537207808",
"institutionName": "Atar",
"key": "5547991271901",
"branch": "0001",
"document": "08959924938",
"type": "phone",
"institution": "19581142",
"name": "Theo Victor Schlegel"
},
"amount": 10,
"identifier": "02fb7933-6996-44cc-aaef-2b7683a130f6"
}
]
}
Pontos de atenção:
Cursor: este campo faz o papel de uma paginação, quando este campo é diferente de null, isso significa que existe mais informações em uma outra pagina, para ter acesso a mesma deve executar o endpoint passando o cursor retornado:
- GET /pix/batch/{batchId}/items/{cursor}
Note: a estrutura de retorno será a mesma do '-GET /pix/batch/{batchId}/items' .
5. Comprovante
Utiliza-se o endpoint /pix/{pixId}/receipt para extrair o pdf dos pagamentos efetuados.
Com auxilio do eventos dos pagamentos recebidos pelo webhook, pode-se validar os detalhes de um pagamento e obter o id do pix(dado necessário efetuar a requisição no endpoint pix/{pixId}/receipt).
Exemplo do evento:
{
"atarId": 5645421468712960,
"payload": {
"subtitle": "R$ 0,10",
"delayNotify": null,
"eventTimestamp": "1662733190",
"id": "ag5zfndlYXJhdGFyLWRldnIQCxIDUGl4GICAwPyMvdUIDKIBA3BheQ",
"eventId": "ag5zfndlYXJhdGFyLWRldnISCxIFRXZlbnQYgIDA_Iy9lQsMogEDcGF5",
"fee": 0,
"from": {
"key": null,
"name": "Theo Victor Schlegel",
"accountNumber": "5645421468712960",
"institutionName": "Atar",
"branch": "0001",
"document": "08959924938",
"institution": "19581142"
},
"title": "Pix para Mateus Tl Tres",
"to": {
"key": "11935610007",
"accountType": "checkingAccount",
"branch": "0001",
"accountNumber": "118669929",
"document": "11935610007",
"institutionName": "Portoseg S.A. CFI",
"institution": "04862600",
"name": "Mateus Tl Tres"
},
"deviceType": null,
"type": "output",
"transactionStatus": "approved",
"category": "pix_out",
"description": "Pagamento",
"transactionAccepted": true,
"timestamp": "1662733153",
"txId": null,
"reason": null,
"isRefund": false,
"balanceAfter": 5196760,
"atarId": 5645421468712960,
"identifier": "02fb7933-6996-44cc-aaef-2b7683a130f6",
"extraInfo": null,
"endToEndId": "E195811422022090914180nHXhGiQCNI",
"amount": 10,
"transactionId": "4766293522644992",
"transactionType": "debit"
}
}
Endpoint
- GET /pix/{pixId}/receipt
Exemplo cURL:
curl --location --request GET '{URI}/pix/{pixId}/receipt' \
--header 'Atar-ApiKey: DB98D76A-4B12-********' \
--header 'Authorization: Bearer eyJhbGciOiJIU**********'
Exemplo de resposta:
{
"base64": "string" # comprovante em base64
"name": "receipt.pdf",
"description": "PDF de recebimento via PIX"
}
Cadastre um serviço Webhook para receber todas as notificações de eventos das transações, de forma prática e eficaz.
6. Suporte
Central de ajuda Atar: Servide desk
Email: [email protected]
7. Fluxograma
Note a numeração na frente da ação a ser realizada, o mesmo contém a identificação para localizar as informações no documento de integração.
Utilize a visualização para consultar o status do item ou do lote.
Note que pode ser utilizada de forma isolada.