Importante

Pix na LIO ON

Viemos informar que uma nova versão do SDK está disponível no Portal do desenvolvedor. Para acessá-la, basta efetuar o login e realizar o download da versão mais recente.

Essa atualização foi projetada para aprimorar a experiência do cliente, incorporando o PIX, melhorias na contagem de linhas impressas nos comprovantes, o que resulta na oferta de bobinas gratuitas aos clientes. Estamos comprometidos em aprimorar constantemente a experiência do usuário final.

Para garantir a compatibilidade com a nova versão do SDK e oferecer uma melhor experiência aos usuários finais, solicitamos que você faça a atualização. Este processo é simples e pode ser realizado através do nosso Portal do Desenvolvedor.

Acesse o Portal do Desenvolvedor para iniciar a atualização dos seus aplicativos.

Agradecemos antecipadamente pela sua colaboração na atualização dos seus aplicativos. Esta iniciativa reflete nosso compromisso contínuo em fornecer soluções inovadoras e de alta qualidade para nossos usuários.

Pix Cielo LIO

Para saber mais clique na ABA PIX.

Documentação Cielo LIO

Nessa documentação você tem acesso a todas as informações sobre a plataforma Cielo LIO e boas práticas para o desenvolvimento e modelos de integração disponíveis para complementar o negócio de seu cliente.

O objetivo dessa documentação é facilitar o processo de desenvolvimento fornecendo os materiais necessários para realizar a integração com a Cielo LIO e todos os conceitos sobre a Cielo Store, a loja de aplicativos da Cielo disponível na Cielo LIO

Visão Geral da Plataforma

Cielo LIO

É uma plataforma aberta que fornece controle e gestão de negócios indo além de um sistema de pagamentos tradicional. Essa solução suporta aplicativos desenvolvidos para sistema Android, possibilitando que desenvolvedores parceiros possam criar aplicativos especializados para diversos segmentos e qualquer porte de cliente.

L300 - Positivo

NOVA LIO ON

DX8000 - Ingenico

DX8000

Caracteristicas dos terminais

A LIO ON possui algumas funcionalidades exclusivas como por exemplo:

Impressora térmica: o cliente poderá ter a 1ª e 2ª via impressa após o pagamento realizado. Além disso, as aplicações parceiras poderão utilizar os métodos disponíveis da impressora para imprimir dados importantes ou necessários para o negócio do cliente.

Especificação da Bobina: Papel Azul 48 gramas, Comprimento: 12 metros, Diâmetro máximo: 30 milímetros, Largura: 57 milímetros.

NFC: tecnologia presente permitindo o pagamento utilizando cartões com tecnologia contactless.

Arquitetura

Sobre

A plataforma Cielo LIO é baseada em Android que consiste em:

Modelos de integração com a plataforma Cielo LIO

Integração Remota | Cielo LIO Order Manager

Conjunto de APIs que permitem que o cliente continue utilizando sua solução de PDV / Automação Comercial com todas as funcionalidades. No momento de realizar o pagamento, ocorre a integração com o gerenciador de pedidos (Order Manager) da Cielo LIO, de forma rápida, simples e segura. Ir para integração remota

Integração Local | Cielo LIO Order Manager SDK

A Cielo disponibiliza um SDK com base na Cielo LIO Order Manager API que permite ao desenvolvedor e parceiro Cielo LIO integrar em sua aplicação as funcionalidades da Cielo LIO. Ir para integração local

Serviços periféricos

A Cielo LIO também se integra com os seguintes periféricos de hardware:

Impressoras Bluetooth

É possível conectar a Cielo com impressoras bluetooth para realizar a impressão de recibos e outras informações importantes.

Já existem parceiros que estão utilizando impressoras Bluetooth das marcas Zebra, Datex, Leopardo integradas com a Cielo LIO

Todos os protocolos de comunicação e pareamento ficam sob responsabilidade do aplicativo do parceiro.

Leitores de RFID

Já existem parceiros que estão utilizando leitores RFID em suas soluções.

Todos os protocolos de comunicação e pareamento ficam sob responsabilidade do aplicativo do parceiro.

Especificações técnicas do hardware da Cielo LIO

A plataforma Cielo LIO teve seu sistema operacional próprio baseado em Android para os terminais LIO V2 e V3. Para os novos terminais utilizamos o Android Security OS. Confira abaixo a tabela com as especificações técnicas da Cielo LIO:

  LIO V2 LIO V3 DX8000
Versão LIO V2 LIO V3 DX8000
Sistema operacional Android OS Cielo 6.0 (Marshmallow) Android 7.1 (Nougat) Android 10 Security OS
Memória 2GB RAM 1GB RAM 1GB RAM
Armazenamento 16 GB 8 GB 8 GB
Dual Chip - - Sim
Frequência 2.4 GHz 2.4GHz + 5.0 GHz 2.4GHz + 5.0 GHz
Tipo do SIM Card micro SIM (3FF) 1 SIM card (2FF) + ESIM 2 SIM card (2FF) + ESIM
Frequência GSM Mhz Quad-Band 850/900/1800/1900 Quad-Band Quad-Band
Tamanho em polegadas 5.5” 5” 5.5”
Tipo de tela AMOLED AMOLED AMOLED
Resolução da tela 720 x 1280 720 x 1280 720 x 1280
Densidade de pixels 267 ppi 267 ppi 1080p
Câmera 8 Mega Pixels 5 Mega Pixels 5 Mega Pixels
Resolução da câmera 4160 x 3120 pixels 4160 x 3120 pixels 4160 x 3120 pixels
Flash Flash LED Flash LED Flash LED
USB USB 2.0 Micro-B (Micro-USB) Somente Energia USB Tipo C USB Tipo C
Bluetooth Versão 4.0 com A2DP/LE Versão 4.2 Versão 4.2
WiFi 802.11 b/g/n (2.4GHz) 802.11a/b/g/n(2.4GH+5.0GHz) 802.11a/b/g/n(2.4GH+5.0GHz)
GPS A-GPS GPS + A-GPS, Glonass GPS + A-GPS, Glonass
Sensores Acelerômetro, Proximidade e Luminosidade Acelerômetro, Prox. e Lumin Acelerômetro, Prox. e Lumin
Saída de áudio Audio Jack 3.5mm Audio Jack 3.5mm -
Peso 507 g 417 g 450 g
Altura 46mm 70mm 198mm
Largura 81mm 82mm 83mm
Comprimento 228mm 205mm 62.5mm

Rotação de tela na Cielo LIO

Na LIO é possível controlar a orientação da tela. Por padrão, a orientação da tela exibida é livre e definida de acordo com o acelerômetro do equipamento.

Caso o desenvolvedor deseje controlar e usar de forma personalizada a orientação de tela da Cielo LIO, este deverá utilizar de acordo com a documentação do Android.

Acesse o item: android:screenOrientation para obter maiores informações.:

Atenção: Documentação Oficial do Android

Dados Móveis na Cielo LIO

A Cielo LIO já vem configurada com um SIM Card. A operadora do SIM Card é definida de acordo com o endereço de cadastro do estabelecimento comercial.

A Cielo envia o SIM Card da melhor operadora de acordo com o endereço de cadastro da LIO solicitada.

Esse SIM Card permite a conexão com a tecnologia 3G/4G da Cielo LIO e possui um pacote de dados ilimitado.

Dicas para desenvolvedores

O guia abaixo fornece as informações necessárias para ajudar os desenvolvedores a integrar ou desenvolver seus aplicativos na plataforma Cielo LIO da melhor maneira possível, de modo a oferecer uma experiência excelente para os estabelecimentos comerciais.

Recomenda-se a leitura detalhada na documentação da Cielo LIO presente no Portal de Desenvolvedores. Essa documentação reúne informações importantes para questões de simplicidade moderada.

Melhores práticas com a plataforma Cielo LIO

Segurança de dados e Privacidade

Rate Limiting

Código de Qualidade

Seu aplicativo deve estar em conformidade com as práticas de programação Java e Android convencionais de acordo com as diretrizes para desenvolvedores do Android.

Recursos de imagem

Utilização e Usabilidade

Desenvolva seu aplicativo para Cielo LIO

Introdução

Com a Cielo LIO é possível que empresas e parceiros tenham seu aplicativo rodando na plataforma da Cielo. Esses aplicativos podem ou não estar integrados com o pagamento, tudo vai depender da finalidade da empresa ou parceiro.

Abaixo, você encontra todas as informações necessárias para desenvolver um aplicativo para a Cielo LIO.

Ambiente de Desenvolvimento

A Cielo recomenda que seja utilizada a IDE do Android Studio (versão 2.2.2 ou superior), visando garantir o funcionamento do aplicativo na plataforma Cielo LIO.

Para mais detalhes sobre a instalação e configuração do Android Studio, clique aqui

Para a criação de um novo projeto no Android Studio, clique aqui

Linguagem de Programação

A Cielo LIO aceita aplicativos desenvolvidos em Java ou Kotlin, como linguagens oficiais. As demais linguagens são permitidas, porém é de responsabilidade do desenvolvedor.

Recomendamos que essas linguagens sejam utilizadas para garantir o funcionamento e facilidade de integração com a Cielo LIO.

Cielo OS

O sistema operacional da plataforma Cielo LIO foi personalizado e, com isso, surgiu o Cielo OS, que é baseado em Android.

Versão target da aplicação

Recomenda-se que o desenvolvedor utilize as versões de sdk mínima 24 e target 29, para garantir compatibilidade com os modelos e versões do Android da LIO. Se o target estiver menor do que a versão 29, não estará apto para ser distribuído para os nossos terminais.

Para que o seu aplicativo funcione corretamente em todos os terminais, deve-se garantir que o aplicativo esteja de acordo com as definições de uso do Android 10 (Ex: permissões, notificações, uso de serviço em foreground).

Bloqueando pagamento fora do Aplicativo

Você poderá configurar seu App na Cielo LIO como um aplicativo padrão, ou seja, você pode deixar o pagamento disponível apenas para o seu aplicativo, bloqueando pagamentos via interface da Cielo LIO. Para isso você deve abrir um ticket no portal do desenvolvedor informando o package name do aplicativo e solicitando que o mesmo seja definido como frente de caixa.

Após a aprovado/certificado, o App estará disponível para ser selecionado com App Padrão de venda e com isso você consegue deixar o pagamento disponível apenas pelo seu aplicativo

Intent para receber o valor da venda

A Intent informada ao submeter o App, deve ser a tela inicial de venda do seu App.

O parâmetro de valor citado no item anterior, serve para receber o valor da venda, caso o usuário inicie uma transação usando o App padrão da Cielo, ao invés de usar o App Padrão selecionado.

Esse valor é passado no formato de centavos, sem separação dos decimais. Por exemplo, o valor 152,25 é passado como 15225, ficando por conta do App fazer o tratamento e formatação.

Essa Intent será chamada em dois momentos:

Caso possua algúma dúvida na configuração desse recurso, você pode abrir um ticket em nosso suporte: Clique aqui

Recursos Indisponíveis

Ao personalizar o Android da Cielo LIO, foram removidos alguns recursos para garantir o desempenho e a segurança da plataforma.

Seguem abaixo os recursos removidos da Cielo LIO:

Google Play Services: Todos os serviços, APIs e apps do Google foram removidos do sistema operacional. Consequentemente, não será possível utilizar as bibliotecas que dependem desses recursos do Google.

Componente Webview: Este recurso visual foi removido com o objetivo de garantir a segurança na plataforma e evitar que, a partir dos aplicativos instalados na Cielo LIO, seja possível acessar links e conteúdos externos.

Atenção: A Cielo não permite que o aplicativo do cliente/parceiro seja desenvolvido utilizando o recurso WebView. Esse recurso visual deixa a plataforma da Cielo LIO vulnerável. Caso a aplicação esteja utilizando o WebView, esta não atenderá aos parâmetros de certificação e não será disponibilizada na Cielo Store.

Sugestões de substitutos

Push-Notifications

Recurso exclusivo do Google Services, portanto não está presente na Cielo LIO.

Alternativa: JobScheduler

Descrição: É uma API para agendar vários tipos de trabalhos contra a estrutura que será executada no próprio processo da sua aplicação. Permitindo a cada ciclo de tempo que o aplicativo realize uma busca em nossos serviços de Backend.

O JobScheduler é o mais indicado devido a performance em relação ao uso de bateria, fora as muitas outras opções que ele disponibiliza (Ex: Job rodar somente quando o smartphone estiver carregando).

Referência: Clique aqui

Serviços de Localização (GPS)

Recurso exclusivo do Google Services, portanto não está presente na Cielo LIO.

Alternativa: Location Manager

Descrição: Essa classe fornece acesso aos serviços de localização do sistema. Esses serviços permitem que os aplicativos obtenham atualizações periódicas da localização geográfica do dispositivo ou que iniciem uma Intenção especificada pela aplicação quando o dispositivo entra na proximidade de uma determinada localização geográfica.

Referência: Clique aqui

Serviços de Mapas

Recurso exclusivo do Google Services, portanto não está presente na Cielo LIO.

Alternativa: MapBox

Descrição: Uma plataforma de mapeamento de código aberto para mapas personalizados. Nossas APIs e SDKs são os blocos de construção para integrar a localização em qualquer aplicativo móvel ou web.

Referência: Clique aqui

APKs Removidas do Cielo OS

Abaixo, segue uma tabela com todas as APKs que foram removidas do Cielo OS e que, consequentemente, não estão disponíveis para a Cielo LIO:

     
BasicSmsReceiver FileManager PhaseBeam
Browser Galaxy4 QuickSearchBox
Calculator Gallery SoundRecorder
Calendar HoloSpiralWallpaper SpeechRecorder
CalendarProvider LiveWallpapers Todos
CBMessageWidget LiveWallpaperPicker Videos
Contacts MagicSmokeWallpapers VisualizationWallpapers
ContactsCommon MtkWeatherProvider VoiceCommand
DataTransfer Mms VoiceDialer
Dialer Music VoiceExtension
Email MusicFX VoiceUnlock
Exchange2 NlpService WallpaperCropper
FMRadio NoiseField  

Cielo Store Dev Console

Sobre a plataforma

A plataforma conhecida como Dev Console, é o ambiente exclusivo para o desenvolvedor realizar o upload e gestão dos aplicativos desenvolvidos para as maquininhas Cielo.

No Dev Console você consegue visualizar todos os seus aplicativos publicados sejam eles aplicativos privados ou públicos, realizar a gestão e distribuição dos aplicativos.

Todo aplicativo passa pela certificação de um time especializado antes de ser disponibilizado na Cielo Store (loja pública) ou distribuído para os estabelecimentos comerciais associados (loja privada).

Clique aqui para fazer seu cadastro no Dev Console.

Após cadastrar sua conta e fazer o login, exibirá um tutorial com os primeiros passos para integração do seu aplicativo. Esse tutorial irá te ajudar ao longo da sua jornada e está disponível para consulta a qualquer momento através do ícone (ajuda).

Solicitação de máquina e credenciamento

Para solicitar uma LIO, acesse o Portal de Desenvolvedores > Suporte > Cielo LIO > Envie sua pergunta > Solicitação LIO DEV / Credenciamento EC Cielo. Nessa mesma solicitação, será realizado o credenciamento EC Cielo. Esse credenciamento é necessário para: a solicitação da LIO; a publicação e distribuição do aplicativo em produção; e o recebimento de pagamentos referente aos aplicativos publicados em loja pública.

Loja Pública

Os aplicativos públicos ficam disponíveis na Cielo Store para download. Todos os clientes que utilizam a Cielo Store podem instalar o aplicativo.

Upload de novos aplicativos públicos

Para realizar o upload de um novo aplicativo público, siga os passos abaixo:

DevConsole 1

DevConsole 2

Preenchendo os formulários

Para o aplicativo seguir para etapa de Certificação, é necessário o preenchimento dos formulários. Assim que realizar o upload do arquivo do aplicativo, você será direcionado para o primeiro formulário. Caso não queira iniciar o preenchimento neste momento, basta clicar na seta “Voltar”.

Quando quiser retomar o preenchimento dos formulários, acesse a home Meus aplicativos, na aba Apps públicos, clique em “Ver detalhes” do aplicativo, e entre na aba Dados do App.

No formulário Sobre o aplicativo estão as informações que irá compor a vitrine do seu aplicativo na Cielo Store.

DevConsole 3

No formulário Modelo de Cobrança, você escolhe a modalidade de cobrança do seu aplicativo, o nome do plano e a descrição, são 3 tipos de modalidade:

DevConsole 4

No formulário Suporte, você informa os canais de comunicação que o cliente pode entrar em contato, e o termo de uso do seu aplicativo que deve ser disponibilizado.

DevConsole 5

No formulário Certificação, você informa os dados para o time especializado da Cielo realizar os testes do aplicativo, garantindo que o app esteja de acordo com as regras e critérios estabelecidos pela Cielo. Após o aplicativo ser aprovado e promovido para produção, o app ficará disponível na Cielo Store.

DevConsole 6

Nova versão de aplicativos públicos

Caso realize alguma alteração ou atualização no aplicativo público, você deverá fazer o upload de uma nova versão do aplicativo e utilizar a mesma assinatura da versão anterior. Para isso, acesse a home Meus aplicativos, na aba Apps públicos, clique em “Ver detalhes” do aplicativo e depois no botão “+ Nova versão” para fazer o upload de uma nova versão. É obrigatório:

Critérios de certificação de aplicativos da loja pública

O objetivo da certificação de aplicativos é garantir que todos os aplicativos presentes nas maquininhas Cielo sejam públicos ou privados, estejam de acordo com as regras e critérios estabelecidos pela Cielo.

Critérios para aprovação da certificação de aplicativo público:

O que o app não pode ter?

ATENÇÃO: Qualquer informação necessária que esteja faltando, resultará na reprovação automática do aplicativo. O SLA de certificação são de 48h úteis.

Após o aplicativo ser certificado. Quais são os próximos passos?

IMPORTANTE: Somente aplicativos de loja pública são disponibilizados na Cielo Store.

Compra de Aplicativo Públicos na Cielo LIO

Todos os aplicativos públicos certificados e promovidos para produção pelo desenvolvedor, ficam disponíveis no marketplace Cielo Store dentro das maquininhas Cielo.

Os estabelecimentos comerciais (lojistas) que desejam adquirir o aplicativo, precisam clicar no botão “Instalar” ou “Comprar” para baixar aplicativo escolhido na Cielo Store, em seguida, é necessário digitar as credenciais utilizadas no site Cielo para autenticação e débito do valor do aplicativo. Após a conclusão da compra, o app estará disponível para ser utilizado nas maquininhas Cielo.

A desinstalação do app deverá ser realizada também através da Cielo Store, e após a desinstalação será realizado o cancelamento da cobrança, caso o aplicativo seja pago e tiver ultrapassado o mês de gratuidade.

IMPORTANTE: Todos os aplicativos são gratuitos por um mês na primeira compra.

Download de aplicativo públicos nas maquininhas Cielo

Para realizar o download de aplicativos públicos na Cielo LIO, clique na aba Apps, entre no app Cielo Store e escolha o aplicativo que deseja, clique no botão “Instalar” ou “Comprar” para baixar aplicativo escolhido.

Para consultar os pagamentos referente aos aplicativos publicados em loja pública (Cielo Store), crie uma conta no site Cielo. Para fazer o cadastro, clique em “Acessar minha conta”, depois em “Primeiro acesso” e informe os dados requisitados.

Importante: É necessário realizar o credenciamento EC Cielo antes de criar o cadastro no site Cielo. Veja o passo a passo na seção Solicitação de máquina e credenciamento deste manual.

Loja Privada

Os aplicativos privados são indicados para desenvolvedores que querem permitir a distribuição de soluções personalizadas para um cliente específico e de acesso restrito. Pode ter um sistema ERP (Sistema de Gestão Empresarial) conectado.

Se você optou pela loja privada, é necessário criar uma loja para o envio do app. Para isso, acesse a plataforma Dev Console, clique em Lojas privadas, depois no botão + Criar loja privada, digite o nome da loja e clique em Concluir.

Sem loja criada:

LojaPrivada1

Com loja criada:

LojaPrivada2

Imagem3

Com a loja privada criada, você poderá publicar seu aplicativo no Dev Console selecionando sua loja, esta ação é essencial para realizar a distribuição de aplicativos privados.

Upload de novos Aplicativos Privados

Para realizar o upload de um novo aplicativo privado, siga os passos a seguir:

NovoAPPNovaLoja

NovoAPPNovaLoja2

NovoAPPNovaLoja3

Preenchendo os formulários

Assim como na loja pública, para o aplicativo privado seguir para etapa de Certificação, é necessário o preenchimento dos formulários. Ao realizar o upload do arquivo do aplicativo, você será direcionado para o primeiro formulário. Caso não queira iniciar o preenchimento neste momento, basta clicar na seta “Voltar”.

Quando quiser retomar o preenchimento dos formulários, acesse a home Meus aplicativos, na aba Apps privados, clique em “Ver detalhes” do aplicativo, e entre na aba Dados do App.

No formulário Sobre o aplicativo estão as informações que serão exibidas no Portal do Desenvolvedor.

NovoAplicativo3

No formulário Suporte, você informa os canais de comunicação que o cliente pode entrar em contato, e dá o aceite referente a negociação dos valores. IMPORTANTE: O recebimento dos valores do aplicativo privado é negociado entre parceiro e cliente.

NovoAplicativo4

No formulário Certificação, você informa os dados para o time especializado da Cielo realizar os testes do aplicativo, garantindo que o app esteja de acordo com as regras e critérios estabelecidos pela Cielo. Após o aplicativo ser aprovado e promovido para produção, o app ficará disponível para todos os clientes associados à loja privada selecionada.

NovoAplicativo5

Nova versão de aplicativos privados

Caso realize uma alteração ou atualização no aplicativo privado, você deverá fazer o upload de uma nova versão do aplicativo e utilizar a mesma assinatura da versão anterior. Para isso, acesse a home Meus aplicativos, na aba Apps privados, clique em “Ver detalhes” do aplicativo e depois clique no botão “+ Nova versão” para fazer o upload de uma nova versão. É obrigatório:

Lembre-se, após o vínculo do aplicativo, não é possível alterar a loja.

IMPORTANTE: Somente aplicativos de loja pública são disponibilizados na Cielo Store. Aplicativos privados são distribuídos pelo desenvolvedor aos estabelecimentos específicos.

Critérios de certificação de aplicativos da loja privada

O objetivo da certificação de aplicativos é garantir que todos os aplicativos presentes nas maquininhas Cielo sejam públicos ou privados, estejam de acordo com as regras e critérios estabelecidos pela Cielo.

Critérios para aprovação da certificação de aplicativo privado:

O que o app não pode ter?

ATENÇÃO: Qualquer informação necessária que esteja faltando, resultará na reprovação automática do aplicativo. O SLA de certificação são de 48h úteis.

Distribuição de Aplicativos na loja privada

Caso opte por desenvolver aplicativos privados e distribuir apenas para clientes específicos, você deve associar o EC do cliente a sua loja privada através do Dev Console. Somente o desenvolvedor que realizou a publicação do aplicativo poderá gerenciar a distribuição dos aplicativos da loja aos ECs do cliente.

Para associar o EC a uma loja:

Acesse no menu Lojas Privadas, clique em Todas as lojas, selecione a loja que deseja associar os ECs, em seguida clique no botão “+ Associar ECs”, e digite todos os ECs que serão associados àquela loja, depois clique no botão “Concluir” para finalizar.

NovoAplicativo6

Download de Aplicativo da loja privada na LIO

Existe uma rotina automática que ocorre a cada 1 hora no terminal e verifica todos os apps que precisam ser disponibilizados ou atualizados em cada terminal. Caso o download não seja imediato, observar e orientar o cliente das seguintes situações:

1.A Cielo LIO deverá estar com a bateria acima de 50% e conectada a internet seja WI-FI ou 3G para realizar o download. 2.Com os critérios acima, siga o passo a passo para forçar a atualização:

Status de um aplicativo

Todos os aplicativos publicados no Dev Console possuem os seguintes status:

1 - Assinatura

Após realizar o upload de um novo aplicativo ou nova versão, o aplicativo fica automaticamente com o status “Aguardando assinatura”, neste estágio o aplicativo será assinado para atender regra de segurança/PCI para que possa ser executado nos terminais.

StatusDeAPlicativo

2 - Desenvolvimento

Após ser assinado, o aplicativo fica automaticamente com o status “Em desenvolvimento”. Nesse estágio o desenvolvedor consegue realizar testes do seu aplicativo nas maquininhas Cielo, e caso precise fazer alguma correção, basta publicar uma nova versão do aplicativo pelo Dev Console e atualizar na maquininha.

Se não tiver LIO durante o desenvolvimento, solicite uma LIO para Desenvolvedores, veja o passo a passo na seção Solicitação de máquina e credenciamento deste manual.

Para testar um aplicativo nas maquininhas Cielo, acesse no Dev Console a home Meus aplicativos, clique em “Ver detalhes” do aplicativo, depois em “Testar app”, escolha o tipo de maquininha que o QR Code será gerado.

StatusDeAPlicativo2

Neste momento, basta abrir o aplicativo Test Your App na maquininha e escanear o QR Code. Após a leitura do QR Code, o download do app será realizado.

StatusDeAPlicativo3

IMPORTANTE: Para a instalação de um app nas maquininhas Cielo, o terminal deverá estar com a bateria acima de 50% ou conectado no cabo de energia, e com internet WI-FI ou 3G.

3 - Certificação

Concluído os testes, você pode enviar o aplicativo para certificação. Nessa etapa o time especializado da Cielo entra em ação para validar o funcionamento do aplicativo de acordo com a seção Critérios de certificação de aplicativos da loja pública e Critérios de certificação de aplicativos da loja privada deste manual.

Após o envio para certificação, o aplicativo fica automaticamente com o status “Aguardando certificação”. A certificação pode levar 48h úteis. Fique atento, você será avisado por e-mail quando a certificação for concluída.

StatusDeAPlicativo4

4 - Produção

Assim que o aplicativo for aprovado na certificação, o desenvolvedor poderá promover para produção. Para isso, é necessário clicar no botão “Enviar para produção”, se for:

StatusDeAplicativo5

StatusDeAplicativo6

Mensagens de Erro Dev Console

Segue os possíveis erros que o desenvolvedor pode encontrar durante a utilização do Dev Console:

REFERÊNCIA MENSAGEM CENÁRIO O QUE FAZER?
APP CREATED_ERROR Package name já existente Desenvolvedor tentou enviar uma aplicação com package name já existente na loja. Alterar no arquivo manifest o packageName da aplicação.
APP APK_PARSER_ERROR Não foi possível salvar o arquivo Desenvolvedor tentou executar o upload de uma aplicação onde o arquivo manifest ou o apk está corrompido ou com problemas na configuração do arquivo manifest Rebuildar o apk e verificar se não existem erros no arquivo manifest do Android.

Caso você desenvolvedor não encontre o erro nesta tabela, abra um ticket para a equipe de suporte reportando o problema encontrado e lembre-se de listar as evidências do erro como prints de tela e mensagens de erro recebidas.

Ambiente Sandbox – Emulador

Oferecemos um aplicativo para facilitar a validação da sua integração com a LIO On, suportando integração híbrida e a integração local com a SDK .

Esta solução elimina a necessidade de um hardware físico da LIO On em modo debug, que não é fornecido pela Cielo por razões de segurança.

O aplicativo processa as solicitações e simula as respostas para o software de integração, permitindo que os desenvolvedores realizem testes integrados e depurem suas aplicações durante o desenvolvimento, sem a necessidade de possuir uma Cielo LIO On.

É necessário a instalação do nosso aplicativo que simula a Cielo LIO em um dispositivo Android ou AVD, especificamente na API de nível 25, Android 7.1, que é a mesma versão do Android utilizada nos terminais LIO ON.

Como faço para validar minha solução a partir do aplicativo que simula a LIO?

Primeiro baixe e instale o aplicativo, download aqui no link

Caso tenha dificuldade com a instalação:

  1. Acesse as configurações do seu aparelho e vá até o menu “Segurança”;
  2. Localize o item “Fontes desconhecidas”, na seção “Administração do dispositivo”
  3. Toque na chave ao lado e confirme sua escolha para passar a permitir a instalação de arquivos APK baixados por fontes alternativas.

emuladorLIO

Depois de instalado, inicie o aplicativo, será aberta a tela de boas-vindas, nesta tela temos uma mensagem e um botão para limpar os dados (esta opção limpa os pedidos criados pelo integrador). Se achar necessário, pode minimizar o aplicativo, esta ação não muda sua experiência.

emuladorlio2

O próximo passo é instalar o aplicativo de integração, para fins didático sutilizamos nosso aplicativo Sample, disponibilizado no github da Cielo. Na imagem abaixo temos o seguinte cenário: Pedido criado, item adicionado, pedidoliberado para pagamento (os passos descritos utilizam da integração com emulador).

emuladorlio3

Ao clicar no botão pagar, o emulador vem para foreground e exibe os dados do pagamento, dando sequência, temos uma tela com as opções de resposta para o integrador, imagens abaixo:

emuladorlio4

Sucesso: Retorna os dados do pagamento simulando uma operação realizada com sucesso na Lio On.

Cancelado: Aborta a operação de pagamento.

Erro: Retorna um erro genérico de falha na operação de pagamento.

Ao selecionar uma das opções de resposta, retornamos o resultado para o sistema integrado e movemos nossa aplicação para o background. Além da operação de pagamento, oferecemos suporte a uma variedade de funcionalidades, incluindo o cancelamento de um pedido, a consulta de produtos disponíveis para pagamento (como Crédito, Débito, Pix, entre outros) e a consulta de pedidos criados, seja de forma individual ou em lista.

LIO para Desenvolvedores

Os desenvolvedores que desejam obter uma Cielo LIO, deverão seguir os passos abaixo:

Com a LIO irá conseguir fazer testes e mexer em seu app em tempo real. A LIO de DEV é isenta de cobrança de aluguel.

Obs: Todos os aplicativos publicados pelo desenvolvedor no Dev Console que estejam com status diferente de bloqueado poderão ser baixados em sua LIO de Dev.

Clique Aqui para solicitar sua LIO.

Integração Local

Apresentação

O objetivo da Integração Local da Cielo LIO é permitir que o aplicativo desenvolvido em Android se integre com o módulo de pedidos e pagamentos da Cielo LIO através do Cielo LIO Order Manager SDK.

Nesse modelo de integração, toda a gestão do estabelecimento comercial e da arquitetura da solução fica sob responsabilidade do aplicativo que irá utilizar o SDK nas operações de pagamento.

As seções abaixo possuem todas as informações necessárias para realizar a integração de forma rápida e segura.

Cielo Lio Order Manager SDK

Sobre

O Cielo LIO Order Manager SDK é uma biblioteca Android desenvolvida com base na Cielo LIO Order Manager API, encapsulando a complexidade da comunicação REST em uma API fluente e amigável ao desenvolvedor e permitindo uma integração simples, rápida e segura com a plataforma Cielo LIO.

O principal objetivo do Cielo LIO Order Manager SDK é simplificar a integração com o sistema de pagamentos e permitir que o desenvolvedor concentre esforços no desenvolvimento das características do seu aplicativo. Abaixo, é apresentado um exemplo em alto nível do processo de utilização do Cielo LIO Order Manager SDK por um aplicativo parceiro:

fluxo

  1. O aplicativo do parceiro é responsável por gerenciar todas as informações do pedido e, então, enviá-las para o Cielo LIO Order Manager SDK.
  2. O Cielo LIO Order Manager SDK recebe as informações e o fluxo de pagamento para o cliente. Neste fluxo, o cliente irá selecionar a forma de pagamento e digitar a senha no Pinpad, tendo a possibilidade de enviar por e-mail o comprovante do pagamento.
  3. Ao término do fluxo de pagamento, o aplicativo do parceiro recebe as informações sobre o pagamento realizado e volta a ser executado na tela da Cielo LIO.

Para mais informações e detalhes sobre o desenvolvimento de um aplicativo para a Cielo LIO, acesse a documentação Desenvolva um App para LIO.

Fluxo sem seleção de produto

fluxo sem selecao produto

Configurar módulos e dependências

Efetue o download da nossa SDK CLIQUE AQUI

Disponilizamos dois diretorios com e cielo basta copiá-los para o seu repositório .m2/repository

Exemplo:

No Windows: C:\Users\<usuario>\.m2

No Linux: /home/<usuario>/.m2

No Mac: /Users/<usuario>/.m2

No build.gradle na raiz do seu projeto, adicionar o mavenLocal() dentro da closure allprojects conforme abaixo:

allprojects {  
  repositories {  
    mavenLocal()  
	... 
  }  
}

No build.gradle do app, adicionar a dependência dentro da closure dependencies conforme abaixo:

dependencies {    
  implementation 'com.cielo.lio:order-manager:2.1.5'  
}

Após essas configurações realize o build do projeto.

Última versão de SDK: 2.1.5

A partir da versão 1.17.7-beta do SDK se tornou necessária a permissão de INTERNET na aplicação cliente. Adicione essa permissão ao AndroidManifest.xml da sua aplicação.

A partir da versão 2.0.1 do SDK, a aplicação que utilizar essa versão, poderá ser classificada apta a funcionar em todos os terminais da nossa prateleira de terminais.

Credenciais

Para utilizar o Cielo LIO Order Manager SDK, é necessário inserir as seguintes credenciais na inicialização do OrderManager:

Credentials credentials = new Credentials("Seu client id aqui", "Seu accessToken aqui");

Crie sua Credencial para a API Local

Criação e Gerenciamento de Ordens

O fluxo básico para utilização do SDK pode ser dividido em 7 etapas, conforme o diagrama abaixo:

order manager sdk fluxo

Abaixo, iremos mostrar como realizar cada uma dessas etapas.

Criar OrderManager

Este método permite iniciar o OrderManager, que é responsável pelas principais operações do Cielo LIO Order Manager SDK. O OrderManager representa a interface com a API REST do Order Manager.

Tudo começa com a criação do OrderManager!

OrderManager orderManager = new OrderManager(credentials, context);

O construtor do OrderManager recebe 2 parâmetros:

Atributo Descrição Domínio
credentials Credenciais de acesso do Parceiro/Desenvolvedor. Depois de se registrar no Portal de Desenvolvedores e criar seu app, o Parceiro/Desenvolvedor recebe as credenciais (Client-Id e Access-Token). Elas servem para identificá-lo unicamente na plataforma LIO e diferenciar as ordens da sua aplicação. cielo.sdk.order.Credentials
context O contexto da aplicação. android.content.Context

Atenção: Recomendamos criar/inicializar o OrderManager no aplicativo do parceiro no momento em que for utilizar as funcionalidades, visando otimizar o desempenho do aplicativo

Vincular o contexto da aplicação ao SDK

Com o método bind(), é possível vincular o contexto da aplicação ao SDK. Este serviço é responsável por gerenciar as funções relacionadas com as ordens da LIO

ServiceBindListener serviceBindListener = new ServiceBindListener() {

    @Override public void onServiceBoundError(Throwable throwable) {
        //Ocorreu um erro ao tentar se conectar com o serviço OrderManager
    }

    @Override
    public void onServiceBound() {
        //Você deve garantir que sua aplicação se conectou com a LIO a partir desse listener
        //A partir desse momento você pode utilizar as funções do OrderManager, caso contrário uma exceção será lançada.
    }

    @Override
    public void onServiceUnbound() {
        // O serviço foi desvinculado
    }
};

orderManager.bind(context, serviceBindListener);

Atenção: Você deve garantir que o listener onServiceBound() foi chamado antes de utilizar as funções do OrderManager, caso contrário uma exceção será lançada e causará um crash na sua aplicação.

O método Bind recebe dois parâmetros:

Com o OrderManager inicializado e após a execução do método onServiceBound, se torna possível ir para a próxima etapa e criar um pedido (classe Order).

Criar um pedido

A Cielo LIO trabalha com o conceito de Order (pedido). É necessário possuir um pedido para então realizar o(s) pagamento(s).

Este método permite criar uma Order (classe Order). Para realizar essa criação, utilize o método createDraftOrder, que disponibilizará uma Order com status DRAFT:

Order order = orderManager.createDraftOrder("REFERÊNCIA_DO_PEDIDO");

Adicionar itens em um pedido

Este método permite que sejam adicionados itens em um pedido.

Atenção: É necessário adicionar no mínimo um item a um pedido para que seja possível dar continuidade ao pagamento.

// Identificação do produto (Stock Keeping Unit)
String sku = "2891820317391823";
String name = "Coca-cola lata";

// Preço unitário em centavos
int unitPrice = 550;
int quantity = 3;

// Unidade de medida do produto String
unityOfMeasure = "UNIDADE";

order.addItem(sku, name, unitPrice, quantity, unityOfMeasure);

Liberar pedido para pagamento

Este método permite atualizar o status de um pedido e liberá-lo para pagamento. O objetivo é utilizar este método depois de adicionar todos os itens no pedido.

orderManager.placeOrder(order);

Após a execução desse método, o status da Order irá trocar de DRAFT para ENTERED, permitindo que a mesma seja paga.

Atenção: É importante observar que, uma vez que uma Order tenha mudado de status para ENTERED, não será mais possível incluir itens na mesma. Iniciar processo de pagamento

Este método permite iniciar o processo de pagamento na Cielo LIO.

Processo de Pagamento

Estão disponíveis algumas formas de chamar o método checkoutOrder:

checkoutorder formas

Independende da forma escolhida, você deverá utilizar o seguinte callback como parâmetro do método de checkoutOrder() para receber os estados relacionados ao pagamento.:

PaymentListener paymentListener = new PaymentListener() {
    @Override
    public void onStart() {
        Log.d("SDKClient", "O pagamento começou.");
    }

    @Override
    public void onPayment(@NotNull Order order) {
        Log.d("SDKClient", "Um pagamento foi realizado.");
    }

    @Override public void onCancel() {
        Log.d("SDKClient", "A operação foi cancelada.");
    }

    @Override public void onError(@NotNull PaymentError paymentError) {
        Log.d("SDKClient", "Houve um erro no pagamento.");
    }
};

PaymentListener: Um callback que informa sobre todas as ações tomadas durante o processo de pagamento. As seguintes ações podem ser notificadas:
• onStart - Quando se dá o início do pagamento. • onPayment - Quando um pagamento é realizado. Notem que um pedido pode ser pago por mais de um pagamento. • onCancel - Quando o pagamento é cancelado. • onError - Quando acontece um erro no pagamento do pedido.

O método onPayment() retorna um objeto Order com uma lista de Payment que possui um HashMap PaymentFields com a maioria dos dados da transação. Segue abaixo a tabela com os dados mais relevantes existentes nesse mapa:

Payment Fields - (atributo do objeto Payment)    
Nome do Campo Descrição do Campo Valor Exemplo
clientName Nome do Portador VISA ACQUIRER TEST CARD 03
hasPassword Validar se a operação pediu senha true
primaryProductCode Código do produto primário 4
primaryProductName Nome do produto primário CREDITO
upFrontAmount Valor da entrada da transação 2500
creditAdminTax Valor da taxa de administração de crédito 0
firstQuotaDate Data de débito da primeira parcela 25/12/2018 (dd/MM/yyy)
externalCallMerchantCode Número do Estabelecimento Comercial 0010000244470001
hasSignature Validar se a operação pediu assinatura false
hasPrintedClientReceipt Validar se imprimiu a via do cliente false
applicationName Pacote da aplicação cielo.launcher
interestAmount Valor de juros 5000
changeAmount Valor de troco 4500
serviceTax Taxa de serviço 2000
cityState Cidade - Estado Barueri - SP
v40Code Tipo da transação 5 (Lista de Tipos de transação abaixo)
secondaryProductName Nome do produto secundario PARC. ADM
paymentTransactionId ID da transação de pagamento 4c603b44-19b8-497c-b072-60d5dd6807e7
bin Número cartão tokenizado (6 primeiros dígitos – 4 últimos dígitos ou 4 últimos) 476173-0036 ou **********4242
Para transações via QRCode sempre será enviado com o valor “0”
originalTransactionId ID da transação original, nos casos de cancelamento 729d32ac-6c8d-4b0c-b670-263552f07000
cardLabelApplication Tipo de aplicação utilizada pelo cartão na transação CREDITO DE VISA
secondaryProductCode Código do produto secundário 205
documentType (J) = Pessoa Jurídica (F) = Pessoa Física J
statusCode Status da transação 0(PIX) ou 1 - Autorizada 2 - Cancelada 1
merchantAddress Endereço do estabelecimento comercial (lojista) Alameda Grajau, 219
merchantCode Número do Estabelecimento Comercial 0010000244470001
hasConnectivity Valida se a transação foi online true
productName forma de pagamento compilada CREDITO PARCELADO ADM - I
merchantName Nome Fantasia do Estabelecimento Comercial LOJA ON
firstQuotaAmout Valor da primeira parcela 0
cardCaptureType Código do tipo de captura do cartão 0 (Lista de Tipos de Captura abaixo)
requestDate Data da requisição em milisegundos 1293857600000
boardingTax Taxa de embarque 1200
applicationId Pacote de aplicação cielo.launcher
numberOfQuotas Número de parcelas 2
Lista de Tipos de Captura  
Código Valor
0 Transação com cartão de chip
1 Transação digitada
2 Transação com cartão de tarja
3 Transação com cartão contactless
6 Transação com QRCode
Lista de Tipos de Transação - (Isto não é válido como código primário)  
Código Valor
4 Crédito à vista
5 Crédito parcelado administrativo
6 Crédito parcelado loja
7 Pré autorização
8 Débito à vista
9 Débito pré datado
10 Crediário venda
11 Crediário simulação
13 Voucher alimentação/refeição
28 Cancelamento de venda
Você pode pegar outros dados diretamente do (objeto Payment)  
Campo Descrição do campo
authCode Cód de Autorização(AUT do recibo)
cieloCode Campo DOC do recibo (NSU)
brand Bandeira do Cartão

Exemplo de código para trazer a bandeira e transação:

@Override

public void onPayment(Order paidOrder) {

    Log.d(TAG, "ON PAYMENT");
    order = paidOrder;

    order.markAsPaid();

    orderManager.updateOrder(order);

    Payment pgTO = order.getPayments().get(0);
    bandeira = getBandeira(pgTO.getPaymentFields().get("brand"));
    transacao = pgTO.getPaymentFields().get("authCode");

    pagamento.setBandeira(bandeira);
    pagamento.setAutorizacao(transacao);

Todos os valores financeiros são informados sem vírgula, ou seja 2500 são equivalentes a R$ 25,00.

1. Requisição de pagamento

Para realizar um request de pagamento é preciso informar, pelo menos, o OrderId criado anteriormamente. Dependendo dos parametros informados na hora de montar o request de pagamento, um dos processos citados acima será iniciado. No Pagamento parcial, o valor do pagamento é informado dentro do fluxo de telas da Cielo LIO. Na sequência, o fluxo de pagamento da Cielo LIO é iniciado (definir o valor a ser pago, escolher a forma de pagamento, inserir o cartão, digitar a senha e visualizar e/ou enviar por e-mail o comprovante).

CheckoutRequest request = new CheckoutRequest.Builder()
                    .orderId(order.getId()) /* Obrigatório */
                    .amount(123456789) /* Opcional */
                    .ec("999999999999999") /* Opcional (precisa estar habilitado na LIO) */
                    .installments(3) /* Opcional */
                    .email("teste@email.com") /* Opcional */
                    .paymentCode(PaymentCode.CREDITO_PARCELADO_LOJA) /* Opcional */
                    .build();

Exemplo utilizando o paymentCode PIX

CheckoutRequest request = new CheckoutRequest.Builder()
                    .orderId(order.getId()) /* Obrigatório */
                    .amount(123456789) /* Opcional */
                    .ec("999999999999999") /* Opcional (precisa estar habilitado na LIO) */
                    .email(teste@email.com) /* Opcional */
                    .paymentCode(PaymentCode.PIX) /* Opcional */
                    .build();

Atenção: Os dados dos parâmetros EC e EMAIL são apenas exemplos e não deve ser utilizado em sua chamada. Para a utilização do EC na chamada, é necessário uma pré habilitação junto a Cielo, para o recebimento com MULTI-EC.

Atributo Descrição Domínio
orderId O identificador do pedido a ser pago. String
amount Valor a ser pago. R$ 10,00 deve ser enviado como 1000. Long
ec Em casos de multi-ec, informar aqui o número correspondente String
installments número de parcelas. para pagamento a vista, não precisa informar Int
email email pra onde será enviado o comprovante String
paymentCode Código da operação de pagamento cielo.sdk.order.payment.PaymentCode
orderManager.checkoutOrder(request, paymentListener);

Nessa forma de pagamento, é necessário apenas fazer a chamada do método enviando os seguintes parâmetros:

Atributo Descrição Domínio
request O objeto contendo as informações da ordem a ser paga. cielo.orders.domain.CheckoutRequest
paymentListener Callback de pagamento. cielo.sdk.order.payment.PaymentListener

Atenção: Na versão 0.19.0 do SDK foram introduzidos códigos de pagamento para as principais operações disponibilizadas na LIO, facilitando assim as chamadas de pagamento. É importante ressaltar que as formas de pagamento são configuradas de acordo com o estabelecimento comercial, e nem todas estarão disponíveis em todas os terminais. Caso o método de pagamento selecionado não esteja disponível na LIO em questão, ocorrerá uma exceção do tipo NoSuchElementException.

PaymentCode
DEBITO_AVISTA
DEBITO_PAGTO_FATURA_DEBITO
CREDITO_AVISTA
CREDITO_PARCELADO_LOJA
CREDITO_PARCELADO_ADM
CREDITO_PARCELADO_BNCO
PRE_AUTORIZACAO
CREDITO_CREDIARIO_CREDITO
VOUCHER_ALIMENTACAO
VOUCHER_REFEICAO
VOUCHER_AUTOMOTIVO
VOUCHER_CULTURA
VOUCHER_PEDAGIO
VOUCHER_BENEFICIOS
VOUCHER_AUTO
VOUCHER_CONSULTA_SALDO
VOUCHER_VALE_PEDAGIO
CREDIARIO_VENDA
CREDIARIO_SIMULACAO
CARTAO_LOJA_AVISTA
CARTAO_LOJA_PARCELADO_LOJA
CARTAO_LOJA_PARCELADO
CARTAO_LOJA_PARCELADO_BANCO
CARTAO_LOJA_PAGTO_FATURA_CHEQUE
CARTAO_LOJA_PAGTO_FATURA_DINHEIRO
FROTAS
PIX

Atenção: A utilização do paymentCode referente ao PIX está disponivel para uso a partir da versão 1.7.0 da SDK. É necessário que esse meio de pagamento esteja habilitado junto a Cielo

Abaixo, segue um exemplo do fluxo com as telas exibidas informando apenas o OrderId: fluxo parcial

Abaixo, segue um exemplo do fluxo com as telas exibidas informando o OrderId e o Valor: fluxo parcial

Abaixo, segue um exemplo do fluxo com as telas exibidas informando o OrderId, o Valor e o código de pagamento: fluxo parcial

Abaixo, segue um exemplo do fluxo com as telas exibidas informando o OrderId, o Valor, o código de pagamento e o número de parcelas: fluxo parcial

Abaixo, segue um exemplo do fluxo com as telas exibidas informando o OrderId, o Valor, o código de pagamento, o número de parcelas e o email: fluxo parcial

Abaixo, segue um exemplo do fluxo com as telas exibidas informando o OrderId, o Valor, o código de pagamento, o número de parcelas, o EC e o email fluxo parcial

Pagamento Parcial

Existe um produto Cielo habilitado em estabelecimentos que permite o pagamento apenas com o saldo que o cliente possui no cartão

Exemplo: Se um pedido tiver o valor de R$ 100,00, mas o cliente possui um limite em seu cartão de apenas R$50,00 a maquina receberá esse valor, sendo de suma importância a aplicação validar o acontecimento desse cenário para tratativas de cancelamento do pagamento ou de receber o restante de outra forma.

Tratando Cenário

Através do listener de retorno do pagamento OnPayment é possível acessar informações do objeto Order para confirmar se existe algum valor pendente de pagamento. Abaixo segue os campos que utilizaremos para identificar o cenário de pagamento Parcial:

Atributo Descrição
pendingAmount Esse campo retorna o valor que ainda está pendente de pagamento para o pedido
paidAmount Esse é o valor pago no pedido
price Esse é o valor pago no pedido

Será necessário recuperar e validar o campo pendingAmount esse campo é responsável por indicar se existe algum valor pendente para o pedido. Caso o valor desse campo seja igual a 0 a aplicação poderá seguir o seu fluxo

Ainda é possível efetuar a lógica sobre o campo paidAmount , caso o valor desse campo seja o esperado para o pedido/pagamento poderá seguir normalmente o fluxo da aplicação.

Exemplo de lógica:

PaymentListener paymentListener = new PaymentListener() {
      @Override
      public void onStart() {
          Log.d("SDKClient", "O pagamento começou.");
      }

      @Override
      public void onPayment(@NotNull Order order) {
          Log.d("SDKClient", "Um pagamento foi realizado.");
          if (order.pendingAmout() == 0) {
            order = paidOrder;
            order.markAsPaid();
            orderManager.updateOrder(order);
        } else {
            // PEDIDO AINDA TEM VALOR A SER RECEBIDO DEVERÁ SER TRATADO PELA APLICAÇÃO DO PARCEIRO
        }
      @Override public void onCancel() {
          Log.d("SDKClient", "A operação foi cancelada.");
      }

      @Override public void onError(@NotNull PaymentError paymentError) {
          Log.d("SDKClient", "Houve um erro no pagamento.");
      }
  };

Exemplo dos campos retornados:

{
  "createdAt": "Nov 29, 2022:21:32 PM",
  "id": "508da29c-9447-4aaf-ab5f-78169986d1eb",
  "items": [
    {
      "description": "",
      "details": "",
      "id": "67343d1a-055c-4fda-8432-ef32fed4ddb9",
      "name": "Coca-cola lata",
      "quantity": 1,
      "reference": "",
      "sku": "2891820317391823",
      "unitOfMeasure": "litro",
      "unitPrice": 550
    }
  ],
  "notes": "",
  "number": "",
  "paidAmount": 100,
  "payments": [
    {
      "accessKey": "izEd7gEBaWjNmzTr0ccE6PZnbWCOHrJahp6oZ2f1QYTWaF9ivI/ wPEY0z5pbk4L8jWlcixeDbd5tHb28quVpTdX2e8pebwOO84DbT",
      "amount": 1000,
      "applicationName": "CieloLIO",
      "authCode": "ab14d87f-c4e7-49f4-ac1f-90ae97f80d3f",
      "brand": "mock_brand",
      "cieloCode": "1a561528-7345-4ab8-a3e2-c8e8c87787ae",
      "description": "mock_description",
      "discountedAmount": 0,
      "externalId": "mock_externalId",
      "id": "eb785f2c-8286-46cc-8829-b10a7280dcf7",
      "installments": 1,
      "mask": "mock_mask",
      "merchantCode": "1234",
      "paymentFields": {
        "clientName": "CieloLio",
        "betterDate": "121212121",
        "upFrontAmount": "1000",
        "creditAdminTax": "500",
        "firstQuotaDate": "12121212121",
        "hasSignature": "true",
        "hasPrintedClientReceipt": "true",
        "hasWarranty": "false",
        "interestAmount": "0",
        "serviceTax": "0",
        "cityState": "Rio de Janeiro - RJ",
        "hasSentReference": "true",
        "cardLabelApplication": "llalal",
        "signatureMd5": "wedsaee12jnlk3n12lk3n2kl13n1lk23nk12ln3l",
        "hasConnectivity": "true",
        "productName": "lalala",
        "finalCryptogram": "123123213",
        "entranceMode": "????",
        "firstQuotaAmount": "10000",
        "cardCaptureType": "2",
        "requestDate": "121212121",
        "boardingTax": "0",
        "numberOfQuotas": "1",
        "isDoubleFontPrintAllowed": "true",
        "token": "1212121",
        "hasPassword": "true",
        "primaryProductCode": "8",
        "isExternalCall": "true",
        "primaryProductName": "DEBITO",
        "receiptPrintPermission": "3",
        "isOnlyIntegrationCancelable": "false",
        "externalCallMerchantCode": "123",
        "isFinancialProduct": "false",
        "applicationName": "CieloLIO",
        "changeAmount": "0",
        "v40Code": "2",
        "secondaryProductName": "DEBITO A VISTA - I",
        "paymentTransactionId": "cod0001",
        "typeName": "VENDA",
        "avaiableBalance": "2000",
        "pan": "4242424242424242",
        "secondaryProductCode": "208",
        "hasSentMerchantCode": "true",
        "documentType": "2144",
        "statusCode": "2",
        "merchantAddress": "dsdfdsf",
        "merchantCode": "1234",
        "paymentTypeCode": "1",
        "merchantName": "12345",
        "totalizerCode": "3",
        "applicationId": "Cielo LIO",
        "signatureBytes": "ijodiqjiojio2j3io1j3io21j3io1j3oi21j312oij312312",
        "reference": "112121"
      },
      "primaryCode": "8",
      "requestDate": "121212121",
      "secondaryCode": "208",
      "terminal": "mock_terminal"
    }
  ],
  "pendingAmount": 450,
  "price": 550,
  "reference": "teste1",
  "status": "ENTERED",
  "type": "PAYMENT",
  "updatedAt": "Mar 6, 2018 2:21:32 PM"
}

Cancelamento

Para tratar a resposta do cancelamento, você deverá utilizar o seguinte callback como parâmetro do método de cancelOrder() para receber os estados relacionados ao cancelamento.

CancellationListener: Um callback que informa sobre todas as ações tomadas durante o processo de cancelamento. As seguintes ações pode ser notificadas: • onSuccess - Quando um cancelamento é realizado com sucesso. • onCancel - Quando o usuário cancela a operação. • onError - Quando acontece um erro no cancelamento do pedido.

CancellationListener cancellationListener = new CancellationListener() {
    @Override
    public void onSuccess(Order cancelledOrder) {
        Log.d("SDKClient", "O pagamento foi cancelado.");
    }

    @Override
    public void onCancel() {
        Log.d("SDKClient", "A operação foi cancelada.");
    }

    @Override
    public void onError(PaymentError paymentError) {
        Log.d("SDKClient", "Houve um erro no cancelamento");
    }
});

Cancelar Pagamento

ATENÇÃO: Hoje só é possivel realizar o cancelamento total do pagamento, para realizar o cancelamento parcial é necessário utilizar a interface da LIO.

No método Cancelar um Pagamento, é necessário ter salvo uma instância da Order que contém as informações da Order. Essa Order pode ser recuperada no sucesso do callback do pagamento ou usando o método de Listagem de Pedidos (Orders) (link para método). Assim que possuir a instância da Order, utilize o método abaixo passando os parâmetros conforme o exemplo abaixo:

CancellationRequest request = new CancellationRequest.Builder()
                .orderId(order.getId()) /* Obrigatório */
                .authCode(order.getPayments().get(0).getAuthCode()) /* Obrigatório */
                .cieloCode(order.getPayments().get(0).getCieloCode()) /* Obrigatório */
                .value(order.getPayments().get(0).getAmount()) /* Obrigatório */
                .ec("0000000000000003") /* Opcional */
                .build();

Atenção: O dado do parâmetro EC é apenas um exemplo e não deve ser utilizado em sua chamada. Para a utilização do EC na chamada de cancelamento, é necessário uma pré habilitação junto a Cielo.

Abaixo é detalhado cada um dos parâmetros enviados no método:

Atributo Descrição Domínio
orderID O identificador do pedido a ser pago. String
authCode Código de autorização do pagamento. String
cieloCode NSU do pagamento String
value Valor do pagamento a ser cancelado Long
ec Em casos de multi-ec, informar aqui o número correspondente String
cancellationListener Callback que informa sobre todas as ações tomadas durante o processo de cancelamento. cielo.sdk.order.payment.CancellationListener
orderManager.cancelOrder(request, cancellationListener);

Abaixo é detalhado cada um dos parâmetros enviados no método:

Atributo Descrição Domínio
request O objeto contendo as informações da ordem a ser cancelada. cielo.orders.domain.CancellationRequest
cancellationListener Callback que informa sobre todas as ações tomadas durante o processo de cancelamento. cielo.sdk.order.payment.CancellationListener

Exemplo de JSON retornado no listener OnSucess() do CancellationListener.

{
	"createdAt":"2023-11-03T10:28:52.164Z",
	"id":"0f156449-6c77-47aa-88b7-da98edaefc16",
	"items":[
		{
			"description":"",
			"details":"",
			"id":"7243e387-d73a-4f70-bc9b-8b39e1e1f90a",
			"name":"TESTE",
			"quantity":1,
			"reference":"",
			"sku":"0000000000",
			"unitOfMeasure":"UN",
			"unitPrice":"10"
		}
	],
	"notes":"",
	"number":"",
	"paidAmount":"0",
	"payments":[
		{
			"accessKey":"BoV29dYpLriYeTdpSOOHXJOWSvQpU8Srt97xlGzwj8bkPChegC",
			"amount":"10",
			"applicationName":"pdv.teste",
			"authCode":"285565",
			"brand":"VISA",
			"cieloCode":"74356",
			"description":"",
			"discountedAmount":"0",
			"externalId":"e9c93039-3212-4f25-b571-2c57c0259e5b",
			"id":"8083f635-13f4-48e4-9565-3876990d5f93",
			"installments":"0",
			"mask":"******0759",
			"merchantCode":"0000701260460001",
			"paymentFields":{
				"upFrontAmount":"0",
				"creditAdminTax":"0",
				"firstQuotaDate":"0",
				"hasSignature":"false",
				"hasPrintedClientReceipt":"false",
				"hasWarranty":"false",
				"interestAmount":"0",
				"serviceTax":"0",
				"cityState":"SAO PAULO SP",
				"hasSentReference":"false",
				"cardLabelApplication":"CREDITO         ",
				"originalTransactionId":"0",
				"originalTransactionDate":"03/11/23",
				"hasConnectivity":"true",
				"productName":"CREDITO A VISTA",
				"finalCryptogram":"74507261AE81C147",
				"entranceMode":"691017207380",
				"firstQuotaAmount":"0",
				"cardCaptureType":"3",
				"requestDate":"1699018133112",
				"boardingTax":"0",
				"numberOfQuotas":"0",
				"isDoubleFontPrintAllowed":"false",
				"bin":"481135",
				"hasPassword":"false",
				"isExternalCall":"true",
				"primaryProductCode":"1000",
				"primaryProductName":"CREDITO",
				"isOnlyIntegrationCancelable":"false",
				"receiptPrintPermission":"1",
				"isFinancialProduct":"true",
				"applicationName":"teste.pdv",
				"changeAmount":"0",
				"v40Code":"4",
				"paymentTransactionId":"e9c93039-3212-4f25-b571-2c57c0259e5b",
				"secondaryProductName":"A VISTA",
				"avaiableBalance":"0",
				"typeName":"VENDA A CREDITO",
				"pan":"******0759",
				"secondaryProductCode":"1",
				"hasSentMerchantCode":"false",
				"documentType":"J",
				"merchantAddress":"AV TESTE 200",
				"statusCode":"1",
				"merchantCode":"0000000000",
				"paymentTypeCode":"1",
				"merchantName":"TESTE",
				"totalizerCode":"10",
				"applicationId":"cielo.launcher",
				"document":"58731662000111"
			},
			"primaryCode":"1000",
			"requestDate":"1699018133112",
			"secondaryCode":"1",
			"terminal":"00876192"
		},
		{
			"accessKey":"",
			"amount":"10",
			"applicationName":"pdv.teste",
			"authCode":"285565",
			"brand":"VISA",
			"cieloCode":"74362",
			"description":"",
			"discountedAmount":"0",
			"externalId":"e5cb2957-3a4d-49af-be33-e99d6ae5c806",
			"id":"7ff66130-4836-4d58-9d9f-12a57a2b630d",
			"installments":"0",
			"mask":"******0759",
			"merchantCode":"00000000000000",
			"paymentFields":{
				"upFrontAmount":"0",
				"creditAdminTax":"0",
				"firstQuotaDate":"0",
				"hasSignature":"false",
				"hasPrintedClientReceipt":"false",
				"hasWarranty":"false",
				"interestAmount":"0",
				"serviceTax":"0",
				"cityState":"SAO PAULO SP",
				"hasSentReference":"false",
				"cardLabelApplication":"CREDITO         ",
				"originalTransactionId":"74356",
				"originalTransactionDate":"03/11/23",
				"hasConnectivity":"true",
				"productName":"CREDITO A VISTA",
				"entranceMode":"691017207380",
				"firstQuotaAmount":"0",
				"cardCaptureType":"3",
				"requestDate":"1699018209429",
				"boardingTax":"0",
				"numberOfQuotas":"0",
				"isDoubleFontPrintAllowed":"false",
				"bin":"481135",
				"hasPassword":"false",
				"isExternalCall":"true",
				"primaryProductCode":"1000",
				"primaryProductName":"CREDITO",
				"isOnlyIntegrationCancelable":"false",
				"receiptPrintPermission":"1",
				"externalCallMerchantCode":"0000000000",
				"isFinancialProduct":"true",
				"applicationName":"teste.pdv",
				"changeAmount":"0",
				"v40Code":"28",
				"paymentTransactionId":"e9c93039-3212-4f25-b571-2c57c0259e5b",
				"secondaryProductName":"A VISTA",
				"avaiableBalance":"0",
				"typeName":"VENDA A CREDITO",
				"pan":"******0759",
				"secondaryProductCode":"1",
				"hasSentMerchantCode":"false",
				"documentType":"J",
				"merchantAddress":"AV TESTE 200",
				"statusCode":"2",
				"merchantCode":"000000000",
				"paymentTypeCode":"1",
				"merchantName":"TEST MERCHANT",
				"totalizerCode":"10",
				"applicationId":"pdv.teste",
				"document":"58731662000111"
			},
			"primaryCode":"1000",
			"requestDate":"1699018209429",
			"secondaryCode":"1",
			"terminal":"00876192"
		}
	],
	"pendingAmount":"10",
	"price":"10",
	"reference":"2052023110310274434",
	"releaseDate":null,
	"status":"ENTERED",
	"type":"PAYMENT",
	"updatedAt":"2023-11-03T10:30:17.518Z"
}

Receber aviso de cancelamento feito na LIO

Toda vez que é feito um cancelamento na LIO utilizando o launcher, o sistema envia um broadcast notificando quaisquer aplicações que estejam registradas sobre o mesmo. Para que sua aplicação seja notificada de um cancelamento, atualize o arquivo AndroidManifest.xml conforme o exemplo abaixo:

Manifest

em seguida, é necessário implementar um BroadcastReceiver para tratar o evento da maneira que for pertinente a sua aplicação:


public class LIOCancelationBroadcastReceiver extends BroadcastReceiver {

    String MY_CLIENT_ID = "Seu client id aqui";
    String MY_ACCESS_KEY = "Seu access key aqui";

    String INTENT_ORDER_KEY = "ORDER";
    String INTENT_TRANSACTION_KEY = "TRANSACTION";

    @Override
    public void onReceive(Context context, Intent intent) {
        ParcelableOrder order = intent.getExtras().getParcelable(INTENT_ORDER_KEY);

        if(MY_ACCESS_KEY.equalsIgnoreCase(order.getAccessKey()) && MY_CLIENT_ID.equalsIgnoreCase(order.getSecretAccessKey())) {
            ParcelableTransaction transaction  = intent.getExtras().getParcelable(INTENT_TRANSACTION_KEY);
        }
    }
}

Cashless

A Cielo LIO oferece a solução de pagamento cashless via integração, suportamos no momento os cartões Mifare 1k. A solução se encontra disponível a partir da versão do SDK 1.8.2, realize o update.

Informação importante, para consumir o serviço é necessário adicionar no arquivo de manifesto do seu aplicativo a permissão:

<uses-permission android:name="cielo.lio.permission.CASHLESS"/>

Mifare

Os cartões Mifare armazenam dados em uma pequena antena integrada, permitindo que eles se comuniquem com os leitores quando estão em proximidade. Referente a capacidade de armazenamento, hoje damos suporte aos cartões Mifare 1k, sua memória está organizada em blocos e setores, onde cada bloco possui uma capacidade de armazenamento de 16 bytes de dados, cada setor é composto por 4 blocos, totalizando 64 bytes de dados.

Para começar a utilizar a tecnologia é necessário instanciar a classe Mifare do nosso SDK, como parâmetro esta classe necessita do contexto da aplicação cliente, conforme abaixo.

Mifare mifare = new Mifare(context);

O constructor do Mifare tem 1 parâmetro:

ATRIBUTO DESCRIÇÃO
Contexto O contexto da aplicação

Callback das operações da classe Mifare

Os métodos da classe Mifare necessitam de um parâmetro de callback, através do objeto de callback retornamos para o integrador o resultado da operação.

MifareCallback mifareCallback = new MifareCallback() {
  @override
  public void onComplete(MifareResponse mifareResponse) {
    //Através do objeto mifareResponse o integrador tem o resultado da operação
  }
}

A classe MifareResponse contém o resultado da operação, a partir dela é possível saber se ocorreu sucesso ou falha.

MifareResponse

ATRIBUTO DESCRIÇÃO DOMÍNIO
Result R00 significa sucesso,qualquer outro valor significa falha. String
Detail Mensagem de retorno. String
Data No contexto de uma operação de leitura, o parâmetro devolve os dados lidos do cartão. Se a operação for de detecção do cartão, o parâmetro retorna o identificador dele. Para todas as outras operações, o retorno é nulo ByteArray
IsSuccesfull Indica se a operação foi sucesso. Boolean

Métodos disponíveis na classe Mifare

A classe Mifare disponibiliza todos os métodos necessários para implementar a solução cashless no seu aplicativo.

Grande parte dos métodos necessita como parâmetro da classe MifareRequest, esta é responsável pelas informações necessárias durante na operação.

MifareRequest mifareRequest = new MifareRequest(sector, block, data, value, keyType, key, destinationBlock)
ATRIBUTO DESCRIÇÃO DOMÍNIO
sector O setor de cartões inicia do zero. Byte
block O bloco no setor, inica do zero. Byte
data* Os dados a serem inseridos no bloco ByteArray
value O valor para incrementar ou decrementar Byte
keyType O tipo de chave para autenticar no setor (A ou B) Char
key A chave para autenticar no setor. ByteArray
destinationBlock O bloco para backup ou restaurar Byte

data*: É necessário que seja passado um atributo de exatamente 16 bytes.

Detect

O método detect é o responsável por ligar a antena e esperar pela aproximação do cartão. Possui como parâmetro o MifareCallback que apresentamos anteriormente, com o resultado da operação. Esta operação possui um timeout de 60 segundos, temos como alternativa o método deactivate que cancela a operação.

mifare.detect(mifareCallback)

Authenticate

O método responsável por autenticar-se no setor, para que possa operar no mesmo. No objeto mifareRequest é importante que tenha as informações de setor, chave e tipo de chave (sector,key, keyType).

mifare.authenticate(mifareRequest, mifareCallback)

ReadData

Após realizar a autenticação no respectivo setor, é possível realizar a leitura dos blocos através deste método. No objeto mifareRequest é importante que tenha as informações de setor e do bloco.

mifare.readData(mifareRequest, mifareCallback)

WriteData

Este método permite que um conteúdo seja escrito em um setor e bloco específico. No objeto mifareRequest é importante que tenha as informações de setor, bloco e data.

mifare.writeData(mifareRequest, mifareCallback)

Increment

Este método é dedicado à operação de incremento, podendo ser utilizada em blocos valor. No objeto mifareRequest é importante que tenha as informações de setor, bloco e valor.

mifare.increment(mifareRequest, mifareCallback)

Decrement

Seguindo os mesmos princípios da função “Increment”, é responsável pelo método de decremento em blocos valor. No objeto mifareRequest é importante que tenha as informações de setor, bloco e valor.

mifare.decrement(mifareRequest, mifareCallback)

Deactivate

O método responsável por desativar o serviço, use-o quando estiver terminado. Ele retornará um callback DEACTIVATE.

mifare.deactivate(mifareCallback)

Backup

O método responsável por ler dados de um bloco e transferi-los para um novo bloco. No objeto mifareRequest é importante que tenha as informações de setor, bloco e bloco de destino.

mifare.backup(mifareRequest, mifareCallback)

Restore

O método responsável por restaurar os dados de um setor de um bloco para outro. No objeto mifareRequest é importante que tenha as informações de setor, bloco e bloco de destino.

mifare.restore(mifareRequest, mifareCallback)

Nota: Os métodos backup e restore disponíveis nesta API, segue o mesmo princípio de funcionalidade, sendo disponibilizado apenas para fins de utilização da operação em etapas diferentes do fluxo. Em algumas especificações de cartões Mifare estas funcionalidades podem aparecer com o nome transfer.

Listagem de Pedidos

Na listagem de pedidos, é possível obter todas os pedidos (Orders) abertas na Cielo LIO pelo aplicativo do parceiro. Para isso, basta utilizar a função abaixo, que retorna os pedidos de forma paginada:

//Busca 10 items da primeira página
ResultOrders resultOrders = orderManager.retrieveOrders(10, 0);
ATRIBUTO DESCRIÇÃO DOMÍNIO
pageSize quantidade de items por página Integer
page número da página requistada (iniciando em 0) Integer

O objeto ResultOrders contém uma lista com todas as ordens abertas assinadas com as credenciais da aplicação.

Finalizar uso do OrderManager

Após executar todas as operações de pagamento e caso não seja necessário utilizar o objeto orderManager, utilize método unbind para desvincular o contexto e evitar problemas de integridade.

Fique atento ao local onde o unbind() será executado para evitar problemas com ciclo de vida da Activity ou Fragment que foi vinculado ao serviço. É importante lembrar que se o contexto for alterado, é preciso desvincular o serviço (ex.: troca de Activity) Utilize o método abaixo para finalizar o uso do OrderManager:

orderManager.unbind();

Informações do terminal

Todas as informações referentes ao terminal, que foram expostas, estão disponíveis no InfoManager

InfoManager infoManager = new InfoManager();

Nível de Bateria

Para consultar o nível de carga da LIO, basta utilizar o métdo abaixo:

infoManager.getBatteryLevel(context);

O valor da bateria será retornado em uma Float contendo um valor de 0 a 1 em caso de sucesso e -1 em caso de erro.

Verificar Modelo da LIO

O SDK disponibiliza um método para verificar qual modelo da LIO o app está instalado. Basta acessar da seguinte forma:

infoManager.getDeviceModel();

O mesmo irá retornar um enum do tipo DeviceModel com o modelo correspondente.

Obtendo informações do usuário (EC e Número Lógico)

Através do SDK, é possível recuperar os dados do cliente e número lógico de maneira simples utilizando o método abaixo:

infoManager.getSettings(context);

Esta função, retornará um objeto do tipo Settings onde é possível recuperar as informações do usuário. Abaixo, segue um descritivo de atributos do objeto Setttings.

ATRIBUTO DESCRIÇÃO DOMÍNIO
merchantCode Código do cliente String
logicNumber Número lógico da LIO String

Observação:

Caso seja utilizado algum tipo de ofuscados no código, como Proguard para ofuscar código no build de release, utilize o código abaixo para conseguir consultar os dados do terminal:

# Cielo-keep
class cielo.** { *; }

Impressão

A Cielo LIO permite que aplicações utilizem o método de impressão por imagem para imprimir dados importantes ou necessários para o negócio do cliente. Para realizar estas ações, basta utilizar o método listado abaixo.

PrinterManager printerManager = new PrinterManager(context);

Você deverá utilizar o seguinte callback como parâmetro de método para receber os estados relacionados à impressão.

PrinterListener: Um callback que informa sobre todas as ações tomadas durante o processo de impressão. As seguintes ações pode ser notificadas: • onSuccess - Quando uma impressão é realizada com sucesso. • onError - Quando acontece um erro na impressão. • onWithoutPaper - Quando não há papel suficiente para realizar a impressão.

PrinterListerner printerListener = new PrinterListener() {
    @Override public void onPrintSuccess(int printedLines) {
        Log.d(TAG, "onPrintSuccess");
    }

    @Override public void onError(@Nullable Throwable e) {
        Log.d(TAG, "onError");
    }

    @Override public void onWithoutPaper() {
        Log.d(TAG,"onWithoutPaper");
    }
});

Atenção: para alterações na view do aplicativo é necessário rodar o código do callback dentro de um bloco runOnUiThread.

    @Override public void onPrintSuccess(int printedLines) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                showDialog();
            }
        });
    }

Melhores práticas para impressão de texto

Para otimizar a performance ao usar o Printer Manager para imprimir textos com múltiplas linhas, é aconselhável evitar a invocação do método de impressão para cada linha individualmente.

Em vez disso, recomenda-se a formatação do texto completo, incluindo todas as linhas, e a realização de uma única chamada ao método printText. Isso reduz o número de chamadas ao método de impressão, melhorando a eficiência do processo.

Exemplo:

String textToPrint = "TEXTO PARA IMPRIMIR NA PRIMEIRA LINHA\n" +

                     "TEXTO PARA IMPRIMIR NA SEGUNDA LINHA\n" +

                     "TEXTO PARA IMPRIMIR NA TERCEIRA LINHA\n\n";

printerManager.printText(textToPrint, alignCenter, printerListener);

Neste exemplo, o texto completo é formatado como uma única string, com cada linha separada por um caractere de nova linha (“\n”). O método printText é então chamado uma única vez, passando o texto completo como parâmetro.

Mapa de Estilos de Impressão

Você pode formatar a sua impressão criando mapas de estilos utilizando os parâmetros disponíveis:

Atributo Descrição Valores
PrinterAttributes.KEY_ALIGN Alinhamento da impressão PrinterAttributes.VAL_ALIGN_CENTER PrinterAttributes.VAL_ALIGN_LEFT PrinterAttributes.VAL_ALIGN_RIGHT
PrinterAttributes.KEY_TEXTSIZE Tamanho do texto Valores inteiros
PrinterAttributes.KEY_TYPEFACE Fonte do texto Trabalha com um inteiro de 0 a 8, onde cada um é uma fonte diferente.
PrinterAttributes.KEY_MARGINLEFT Margem esquerda Valores inteiros
PrinterAttributes.KEY_MARGINRIGHT Margem direia Valores inteiros
PrinterAttributes.KEY_MARGINTOP Margem superior Valores inteiros
PrinterAttributes.KEY_MARGINBOTTOM Margem inferior Valores inteiros
PrinterAttributes.KEY_LINESPACE Espaçamento entre as linhas Valores inteiros
PrinterAttributes.KEY_WEIGHT Varíavel utilizada quando se trbaalho com impressão de múltiplas colunas, para escolher o peso de cada coluna Valores inteiros

Exemplo de mapas de estilos:

HashMap<String, Integer> alignLeft =  new HashMap<>();
alignLeft.put(PrinterAttributes.KEY_ALIGN, PrinterAttributes.VAL_ALIGN_LEFT);
alignLeft.put(PrinterAttributes.KEY_TYPEFACE, 0);
alignLeft.put(PrinterAttributes.KEY_TEXT_SIZE, 20);

HashMap<String, Integer> alignCenter =  new HashMap<>();
alignCenter.put(PrinterAttributes.KEY_ALIGN, PrinterAttributes.VAL_ALIGN_CENTER);
alignCenter.put(PrinterAttributes.KEY_TYPEFACE, 1);
alignCenter.put(PrinterAttributes.KEY_TEXT_SIZE, 20);

HashMap<String, Integer> alignRight =  new HashMap<>();
alignRight.put(PrinterAttributes.KEY_ALIGN, PrinterAttributes.VAL_ALIGN_RIGHT);
alignRight.put(PrinterAttributes.KEY_TYPEFACE, 2);
alignRight.put(PrinterAttributes.KEY_TEXT_SIZE, 20);

Impressão de imagem

Para imprimir imagens utilize o método printImage() do PrinterManager. O método recebe como parâmetro o bitmap a ser impresso, um mapa de estilos de impressão e um listener para tratar o retorno da impressão.

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cielo);
printerManager.printImage(bitmap, alignCenter, printerListener);
Imagem a ser impressa Resultado final
Impressão Imagem Impressão Imagem 2
Atributo Descrição Domínio
bitmap Imagem a ser impressa. Bitmap
style Mapa de estilos de impressão Map<String, Int>
printerListener Callback de impressão. cielo.sdk.order.PrinterListener

Fluxo para Integração

fluxo para integração

  1. Leia toda a documentação sobre a Integração Local.
  2. Crie sua conta no Portal de Desenvolvedores da Cielo para obter todas as funcionalidades que o portal pode oferecer para você, desenvolvedor. É obrigatório possuir uma conta para gerar um Client-Id.
  3. Realizando o cadastro de Client ID, o desenvolvedor recebe os tokens
  4. (Client ID e Access-Token) e consegue utilizar o Cielo LIO Order Manager SDK. Realize os testes no Cielo Lio Confira o link: Download do Emulador
  5. Acesse a Cielo Store e faça o upload do APK da sua aplicação. Ao término do upload, submeta seu aplicativo para certificação e preencha todas as informações necessárias.
  6. Ao término do upload submeta seu aplicativo, no próprio ambiente da Cielo Store, para certificação e preencha todas as informações necessárias.
  7. Assim que a certificação for concluída, o desenvolvedor receberá um e-mail e deverá acessar novamente a Cielo Store para promover o aplicativo para produção.
  8. Agora seu aplicativo já está disponível para download na Cielo Store. Sucesso!! Aproveite ao máximo tudo que a Integração Local Cielo LIO pode oferecer para você!!

Release Notes

Na tabela abaixo, é possível verificar as funcionalidades do SDK disponíveis por versão da Cielo LIO e Cielo Mobile.

Funcionalidade Versão Cielo LIO Versão Cielo Mobile
createDraftOrder(String reference); placeOrder(Order order); updateOrder(Order order); checkoutOrder(String orderId, PaymentListener paymentListener); checkoutOrder(String orderId,long value, PaymentListener paymentListener); 1.10.2 1.9.1
retrievePaymentType(); checkoutOrder(String orderId,long value, String primaryCode, String secondaryCode, PaymentListener,paymentListener); 1.12.0 1.10.3
retrieveOrders(int pageSize, int page); 1.13.0 1.10.5
checkoutOrder (String orderId,long value, String primaryCode, String secondaryCode, Long installments, PaymentListener paymentListener); 1.14.0 1.12.1
cancelOrder (Context context, String orderId, Payment payment, CancellationListener paymentListener); cancelOrder(Context context, String orderId, Payment payment, Long amount, CancellationListener paymentListener); 1.16.7 1.12.10

Atenção: Se for utilizada uma funcionalidade que não esteja disponível, será lançada uma exceção – UnsupportedOperationExcepetion –, que deve ser tratada pelo aplicativo.

Para descobrir a versão do aplicativo Cielo LIO (versão do Launcher) e Cielo Mobile, bem como utilizar todas as funcionalidades do Cielo LIO Order Manager SDK, acesse “Sobre a Cielo LIO” (Ajuda -> Sobre a Cielo LIO) para obter as informações sobre os aplicativos instalados na Cielo LIO.


Code Sample

O código do exemplo do aplicativo integrado com o Cielo LIO Order Manager SDK encontra-se disponível no GitHub.

PIX

O que é o Pix

O Pix é o meio de pagamento criado pelo Banco Central em que os recursos são transferidos entre contas e poucos segundos, a qualquer hora ou dia. O Pix é um novo jeito de vender de forma instantânea, segura e simples pelas soluções da Cielo.

Como habilitar o pagamento PIX?

Para que seja possível efetivar um pagamento utilizando a forma de pagamento PIX, é necessário que o estabelecimento tenha esse tipo de pagamento habilitado.

Para realizar essa ação, siga as instruções abaixo.

Após essa habilitação via Site Cielo o estabelecimento estará apto a trabalhar com a modalidade PIX.

Habilitando pagamento PIX

Para que seja possivel efetivar um pagamento utilizando a forma de pagamento PIX, é necessário que o estabelecimento tenha esse tipo de pagamento habilitado.

PASSO 1: Entrar no site Cielo com seu login e senha

PASSO 2: Clicar em “Meu cadastro”

Meu Cadastro

PASSO 3: Clicar em “Autorizações”

Autorização

PASSO 4: Clicar em “PIX

Clicar PIX

PASSO 5: Marcar a caixa de aceite , e clicar em “Enviar

Clicar PIX

Após essa habilitação via Site Cielo o estabelecimento estará apto a trabalhar com a modalidade PIX.

Integração Híbrida

O processo de integração híbrida é um pouco diferente da integração com o SDK (Integração Local). Para parceiros que não estão integrando com a linguagem nativa Java ou Kotlin a integração hibrida via deep link é uma opção.

Credenciais

Você pode solicitar as credenciais (client-id/access-token) diretamente via PORTAL DE DESENVOLVEDORES.

fluxo

Integração Híbrida Pagamento

É necessário definir um contrato de resposta com a LIO para que a mesma possa responder após o fluxo de pagamento/cancelamento/impressão. Esse contrato deve ser definido no manifest.xml da aplicação conforme o exemplo abaixo:

<activity android:name=".ResponseActivity">
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:host="response" android:scheme="order" />
  </intent-filter>
</activity>

Os nomes “response” e “order” podem ser substituídos pelo que fizer sentido no seu aplicativo. Lembrando que na hora de fazer a chamada de pagamento, você deve informar os mesmos nomes para receber o callback da LIO. Para realizar o pedido de pagamento é preciso criar um json seguindo o formato definido abaixo e converte-lo para BASE64:

{
  "accessToken": "Seu Access-token",
  "clientID": "Seu Client-id",
  "email": "emaildocliente@email.com",
  "installments": 0,
  "items": [
    {
      "name": "Geral",
      "quantity": 1,
      "sku": "10",
      "unitOfMeasure": "unidade",
      "unitPrice": 10
    }
  ],
  "paymentCode": "DEBITO_AVISTA",
  "value": "10"
}

Lista de paymentCode

Disponibilizamos também a lista do campo “paymentCode”:

PaymentCode
DEBITO_AVISTA
DEBITO_PAGTO_FATURA_DEBITO
CREDITO_AVISTA
CREDITO_PARCELADO_LOJA
CREDITO_PARCELADO_ADM
CREDITO_PARCELADO_BNCO
PRE_AUTORIZACAO
CREDITO_PARCELADO_CLIENTE
CREDITO_CREDIARIO_CREDITO
VOUCHER_ALIMENTACAO
VOUCHER_REFEICAO
VOUCHER_AUTOMOTIVO
VOUCHER_CULTURA
VOUCHER_PEDAGIO
VOUCHER_BENEFICIOS
VOUCHER_AUTO
VOUCHER_CONSULTA_SALDO
VOUCHER_VALE_PEDAGIO
CREDIARIO_VENDA
CREDIARIO_SIMULACAO
CARTAO_LOJA_AVISTA
CARTAO_LOJA_PARCELADO_LOJA
CARTAO_LOJA_PARCELADO
CARTAO_LOJA_PARCELADO_BANCO
CARTAO_LOJA_PAGTO_FATURA_CHEQUE
CARTAO_LOJA_PAGTO_FATURA_DINHEIRO
FROTAS
PIX

Como explicado anteriormente, é preciso definir o contrato de resposta (host e scheme), aqui será utilizado essa configuração no parâmetro urlCallback. A chamada de pagamento deve ser feita da seguinte forma:

var base64 = getBase64(jsonString)
var checkoutUri = "lio://payment?request=$base64&urlCallback=order://response"

Após preparar a URI basta realizar a chamada de intent do android utilizando o comando específico da linguagem híbrida.

var intent = Intent(Intent.ACTION_VIEW, Uri.parse(checkoutUri))
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)

Recuperando dados do pagamento

Para recuperar os dados de pagamento basta acessar a intent na activity de resposta e no parâmetro data, acessar a uri, da seguinte forma:

val responseIntent = intent
if (Intent.ACTION_VIEW == responseIntent.action) {
   val uri = responseIntent.data
   val response = uri.getQueryParameter("response")
   val data = Base64.decode(response, Base64.DEFAULT)
   val json = String(data)
}

Lembrando que o parâmetro “response” é o mesmo que foi configurado como resposta na chamada de pagamento.

Com o pagamento finalizado a LIO retornará para a uri configurada inicialmente um JSON seguindo o formato exemplificado abaixo:

{
   "createdAt":"Jun 8, 2018 1:51:58 PM",
   "id":"ba583f85-9252-48b5-8fed-12719ff058b9",
   "items":[
      {
         "description":"",
         "details":"",
         "id":"898e7f40-fa21-42d0-94d4-b4e95c4fd615",
         "name":"cocacola",
         "quantity":2,
         "reference":"",
         "sku":"1234",
         "unitOfMeasure":"unidade",
         "unitPrice":250
      },
      {
         "description":"",
         "details":"",
         "id":"4baea4c2-5499-4783-accc-0f8904970861",
         "name":"pepsi",
         "quantity":2,
         "reference":"",
         "sku":"4321",
         "unitOfMeasure":"unidade",
         "unitPrice":280
      }
   ],
   "notes":"",
   "number":"",
   "paidAmount":1450,
   "payments":[
      {
         "accessKey":"XXXXXXXXXXXXXXX",
         "amount":1450,
         "applicationName":"com.ads.lio.uriappclient",
         "authCode":"140126",
         "brand":"Visa",
         "cieloCode":"799871",
         "description":"",
         "discountedAmount":0,
         "externalId":"6d5f6f86-7870-4aed-b79f-0a26d6c61743",
         "id":"bb9c6305-95e5-4024-8152-503d064c0224",
         "installments":0,
         "mask":"424242-4242",
         "merchantCode":"0000000000000003",
         "paymentFields":{
            "isDoubleFontPrintAllowed":"false",
            "hasPassword":"false",
            "primaryProductCode":"4",
            "isExternalCall":"true",
            "primaryProductName":"CREDITO",
            "receiptPrintPermission":"1",
            "isOnlyIntegrationCancelable":"false",
            "upFrontAmount":"0",
            "creditAdminTax":"0",
            "firstQuotaDate":"0",
            "isFinancialProduct":"true",
            "hasSignature":"true",
            "hasPrintedClientReceipt":"false",
            "hasWarranty":"false",
            "applicationName":"com.ads.lio.uriappclient",
            "interestAmount":"0",
            "changeAmount":"0",
            "serviceTax":"0",
            "cityState":"Barueri - SP",
            "hasSentReference":"false",
            "v40Code":"4",
            "secondaryProductName":"A VISTA",
            "paymentTransactionId":"6d5f6f86-7870-4aed-b79f0a26d6c61743",
            "avaiableBalance":"0",
            "pan":"424242-4242",
            "originalTransactionId":"0",
            "originalTransactionDate":"08/06/18",
            "secondaryProductCode":"204",
            "hasSentMerchantCode":"false",
            "documentType":"J",
            "statusCode":"1",
            "merchantAddress":"Alameda Grajau, 219",
            "merchantCode":"0000000000000003",
            "paymentTypeCode":"1",
            "hasConnectivity":"true",
            "productName":"CREDITO A VISTA - I",
            "merchantName":"POSTO ABC",
            "entranceMode":"141010104080",
            "firstQuotaAmount":"0",
            "cardCaptureType":"1",
            "totalizerCode":"0",
            "requestDate":"1528476655000",
            "boardingTax":"0",
            "applicationId":"cielo.launcher",
            "numberOfQuotas":"0",
            "document":"000000000000000"
         },
         "primaryCode":"4",
         "requestDate":"1528476655000",
         "secondaryCode":"204",
         "terminal":"69000007"
      }
   ],
"pendingAmount":0,
"price":1060,
"reference":"Order",
"status":"ENTERED",
"type”:”9”,
"updatedAt":"Jun 8, 2018 1:51:58 PM"
}

Atenção: O campo statusCode=0(apenas pagamentos pix) ou 1 indica uma transação de pagamento e statusCode=2 Cancelamento

Exemplos de retorno

Segue exemplos de retorno com sucesso e erro nas operações via intent na integração híbrida. Lembrando que em ambos os cenários abaixos é o conteúdo da URI e o campo resonse está em formato base64.

Retorno de sucesso:

order://response?response=eyJjcmVhdGVkQXQiOiJKYW4gMzEsIDIwMjQgMTE6Mzc6MjYgQU0iLCJpZCI6IjFkYjU1NzdmLWZjZDAtNDllOC04Y2FjLTVlMjRhYWZiMjUxZiIsIml0ZW1zIjpbeyJkZXNjcmlwdGlvbiI6IiIsImRl
dGFpbHMiOiIiLCJpZCI6IjkzMzA5ODkyLWMyMGItNDUyYy1iYTZmLTY4Mjc5NmI0YTk2ZSIsIm5hbWUiOiJwcm9kdXRvIiwicXVhbnRpdHkiOjEsInJlZmVyZW5jZSI6IiIsInNrdSI6IjQ2ODIiLCJ1bml0T2ZNZWFzdXJlIjoidW5pZGFkZSIsInVuaXRQcmljZSI6OTI1fV0sIm5vdGVzIjoiIiwibnVtYmVyIjoiIiwicGFpZEFtb3VudCI6OTI1LCJwYXltZW50cyI6W3siYWNjZXNzS2V5IjoiclNBcU5QR3ZGUEpJIiwiYW1vdW50Ijo5MjUsImFwcGxpY2F0aW9uTmFtZSI6ImNvbS5hZHMubGlvLnVyaWFwcGNsaWVudCIsImF1dGhDb2RlIjoiMTEzNzMwIiwiYnJhbmQiOiIiLCJjaWVsb0NvZGUiOiI4NDcyNjIiLCJkZXNjcmlwdGlvbiI6IiIsImRpc2NvdW50ZWRBbW91bnQiOjAsImV4dGVybmFsSWQiOiI0OGZhNjNjOS05NWVlLTQ4M2UtOWU3Yi1jZTMyNjMzZjEyOWIiLCJpZCI6IjgwY2U1MjhjLTJjY2MtNDgwMC1iZGMxLTViNWRkZGU1OGZiMSIsImluc3RhbGxtZW50cyI6MCwibWFzayI6IioqKioqKioqKioqKjAwMDAiLCJtZXJjaGFudENvZGUiOiIwMDAwMDAwMDAwMDAwMDAzIiwicGF5bWVudEZpZWxkcyI6eyJpc0RvdWJsZUZvbnRQcmludEFsbG93ZWQiOiJmYWxzZSIsImJpbiI6IjAiLCJoYXNQYXNzd29yZCI6ImZhbHNlIiwicHJpbWFyeVByb2R1Y3RDb2RlIjoiNCIsImlzRXh0ZXJuYWxDYWxsIjoidHJ1ZSIsInByaW1hcnlQcm9kdWN0TmFtZSI6IkNSRURJVE8iLCJyZWNlaXB0UHJpbnRQZXJtaXNzaW9uIjoiMSIsImlzT25seUludGVncmF0aW9uQ2FuY2VsYWJsZSI6ImZhbHNlIiwidXBGcm9udEFtb3VudCI6IjAiLCJjcmVkaXRBZG1pblRheCI6IjAiLCJleHRlcm5hbENhbGxNZXJjaGFudENvZGUiOiIwMDAwMDAwMDAwMDAwMDAzIiwiZmlyc3RRdW90YURhdGUiOiIwIiwiaXNGaW5hbmNpYWxQcm9kdWN0IjoidHJ1ZSIsImhhc1ByaW50ZWRDbGllbnRSZWNlaXB0IjoiZmFsc2UiLCJoYXNTaWduYXR1cmUiOiJmYWxzZSIsImFwcGxpY2F0aW9uTmFtZSI6ImNvbS5hZHMubGlvLnVyaWFwcGNsaWVudCIsImhhc1dhcnJhbnR5IjoiZmFsc2UiLCJpbnRlcmVzdEFtb3VudCI6IjAiLCJjaGFuZ2VBbW91bnQiOiIwIiwic2VydmljZVRheCI6IjAiLCJjaXR5U3RhdGUiOiJCYXJ1ZXJpIC0gU1AiLCJoYXNTZW50UmVmZXJlbmNlIjoiZmFsc2UiLCJ2NDBDb2RlIjoiNCIsInNlY29uZGFyeVByb2R1Y3ROYW1lIjoiQSBWSVNUQSIsInBheW1lbnRUcmFuc2FjdGlvbklkIjoiNDhmYTYzYzktOTVlZS00ODNlLTllN2ItY2UzMjYzM2YxMjliIiwiYXZhaWFibGVCYWxhbmNlIjoiMCIsInBhbiI6IioqKioqKioqKioqKjAwMDAiLCJvcmlnaW5hbFRyYW5zYWN0aW9uSWQiOiIwIiwib3JpZ2luYWxUcmFuc2FjdGlvbkRhdGUiOiIzMS8wMS8yNCIsInNlY29uZGFyeVByb2R1Y3RDb2RlIjoiMjA0IiwiZG9jdW1lbnRUeXBlIjoiSiIsImhhc1NlbnRNZXJjaGFudENvZGUiOiJmYWxzZSIsInN0YXR1c0NvZGUiOiIxIiwibWVyY2hhbnRBZGRyZXNzIjoiQWxhbWVkYSBHcmFqYXUsIDIxOSIsIm1lcmNoYW50Q29kZSI6IjAwMDAwMDAwMDAwMDAwMDMiLCJwYXltZW50VHlwZUNvZGUiOiIxIiwiaGFzQ29ubmVjdGl2aXR5IjoidHJ1ZSIsInByb2R1Y3ROYW1lIjoiQ1JFRElUTyBBIFZJU1RBIC0gSSIsIm1lcmNoYW50TmFtZSI6IlBPU1RPIEFCQyIsImVudHJhbmNlTW9kZSI6IjY2MTAxMDEwNzA4MCIsImNhcmRDYXB0dXJlVHlwZSI6IjYiLCJmaXJzdFF1b3RhQW1vdW50IjoiMCIsInRvdGFsaXplckNvZGUiOiIwIiwicmVxdWVzdERhdGUiOiIxNzA2NzEwMzg0NDAyIiwiYXBwbGljYXRpb25JZCI6ImNpZWxvLmxhdW5jaGVyIiwiYm9hcmRpbmdUYXgiOiIwIiwibnVtYmVyT2ZRdW90YXMiOiIwIiwiZG9jdW1lbnQiOiIwMDAwMDAwMDAwMDAwMCJ9LCJwcmltYXJ5Q29kZSI6IjQiLCJyZXF1ZXN0RGF0ZSI6IjE3MDY3MTAzODQ0MDIiLCJzZWNvbmRhcnlDb2RlIjoiMjA0IiwidGVybWluYWwiOiI2MjAwMDExMiJ9XSwicGVuZGluZ0Ftb3VudCI6MCwicHJpY2UiOjkyNSwicmVmZXJlbmNlIjoiUmVmZXJlbmNlIiwic3RhdHVzIjoiRU5URVJFRCIsInR5cGUiOiJQQVlNRU5UIiwidXBkYXRlZEF0IjoiSmFuIDMxLCAyMDI0IDExOjM3OjMxIEFNIn0=&responsecode=0

Retorno de erro

Se houver algum erro no pagamento, seja ele cancelado por usuario ou saldo insuficiente continuamos olhando para o campo response onde será retornando um base64 com o motivo do pagamento não realizado com sucesso

order://response?response=eyJjb2RlIjoxLCJyZWFzb24iOiJDQU5DRUxBRE8gUEVMTyBVU1XDgVJJTyJ9&responsecode=0
{
   "code":1,
   "reason":"CANCELADO PELO USUÁRIO"
}

Listagem de Pedidos

Na listagem de pedidos, é possível obter os pedidos (Orders) abertas na Cielo Lio pelo aplicativo do parceiro. Para isso basta definir o JSON abaixo e formata-lo para BASE64:

{
“pageSize”: 5,
“page”: 0,
“clientID”: “seu cliente ID”,
“accessToken”: “seu access token”
}

ATENÇÃO: Á princípio será limitado a no máximo 5 pedidos devido ao tamanho das informações.

A chamada deve ser feita da seguinte forma:

var base64 = getBase64(jsonString)
var checkoutUri = "lio://orders?request=$base64&urlCallback=order://response"

Para recuperar os dados basta acessar a intent na activity de resposta cadastrada em seu manifest e no parâmetro data, acessar a URI da seguinte forma:

val responseIntent = intent
if (Intent.ACTION_VIEW == responseIntent.action) {
   val uri = responseIntent.data
   val response = uri.getQueryParameter("response")
   val data = Base64.decode(response, Base64.DEFAULT)
   val json = String(data)
}

Exemplos de retorno da Listagem de Pedidos

Exemplo de retorno de sucesso:

orders://response?response=eyJjdXJyZW50UGFnZSI6MCwicmVzdWx0cyI6W3siY3JlYXRlZEF0IjoiQXByIDgsIDIwMjQgNDowNzo1OSBQTSIsImlkIjoiNTEyZjdjNjEtMjkzYy00NDY4LWJkM2UtMjk4Mjg2ZDA0ZjBiIiwiaXRlbXMiOlt7ImRlc2NyaXB0aW9uIjoiIiwiZGV0YWlscyI6IiIsImlkIjoiNjMyOWRiMTYtMzY4Ny00MmJjLTgzNWYtZmUwZGYxMGZjZGRmIiwibmFtZSI6InByb2R1dG8iLCJxdWFudGl0eSI6MywicmVmZXJlbmNlIjoiIiwic2t1IjoiNzg5NzIiLCJ1bml0T2ZNZWFzdXJlIjoidW5pZGFkZSIsInVuaXRQcmljZSI6NTY2fV0sIm5vdGVzIjoiIiwibnVtYmVyIjoiIiwicGFpZEFtb3VudCI6MTY5OCwicGF5
bWVudHMiOlt7ImFjY2Vzc0tleSI6InJTQXFOUEd2RlBKSSIsImFtb3VudCI6MTY5OCwiYXBwbGlj
YXRpb25OYW1lIjoiY29tLmFkcy5saW8udXJpYXBwY2xpZW50IiwiYXV0aENvZGUiOiIxNjA4NTEi
LCJicmFuZCI6IiIsImNpZWxvQ29kZSI6IjEwODE0NCIsImRlc2NyaXB0aW9uIjoiIiwiZGlzY291
bnRlZEFtb3VudCI6MCwiZXh0ZXJuYWxJZCI6IjZiYmI2ZDhhLTQ5NWYtNDY3MC04MzVmLWY4YWNlYjlkZTA2OCIsImlkIjoiNWU2MmFmNGMtNzM5ZC00Zjc4LWFhYjgtNWQxNDE5NmIwN2I2IiwiaW5zdGFsbG1lbnRzIjowLCJtYXNrIjoiKioqKioqKioqKjQyNDIiLCJtZXJjaGFudENvZGUiOiIwMDEw
MDAwMjQ0NDcwMDAxIiwicGF5bWVudEZpZWxkcyI6eyJpc0RvdWJsZUZvbnRQcmludEFsbG93ZWQiOiJ0cnVlIiwiYmluIjoiNDI0MjQyIiwiaGFzUGFzc3dvcmQiOiJ0cnVlIiwicHJpbWFyeVByb2R1
Y3RDb2RlIjoiNCIsImlzRXh0ZXJuYWxDYWxsIjoidHJ1ZSIsInByaW1hcnlQcm9kdWN0TmFtZSI6
IkNSRURJVE8iLCJyZWNlaXB0UHJpbnRQZXJtaXNzaW9uIjoiMSIsImlzT25seUludGVncmF0aW9u
Q2FuY2VsYWJsZSI6ImZhbHNlIiwidXBGcm9udEFtb3VudCI6IjAiLCJjcmVkaXRBZG1pblRheCI6
IjAiLCJleHRlcm5hbENhbGxNZXJjaGFudENvZGUiOiIwMDEwMDAwMjQ0NDcwMDAxIiwiZmlyc3RRdW90YURhdGUiOiIwIiwiaXNGaW5hbmNpYWxQcm9kdWN0IjoidHJ1ZSIsImhhc1ByaW50ZWRDbGllbnRSZWNlaXB0IjoiZmFsc2UiLCJoYXNTaWduYXR1cmUiOiJmYWxzZSIsImFwcGxpY2F0aW9uTmFtZSI6ImNvbS5hZHMubGlvLnVyaWFwcGNsaWVudCIsImhhc1dhcnJhbnR5IjoiZmFsc2UiLCJpbnRlcmVzdEFtb3VudCI6IjAiLCJjaGFuZ2VBbW91bnQiOiIwIiwic2VydmljZVRheCI6IjAiLCJjaXR5
U3RhdGUiOiJCYXJ1ZXJpIC0gU1AiLCJoYXNTZW50UmVmZXJlbmNlIjoiZmFsc2UiLCJ2NDBDb2Rl
IjoiNCIsInNlY29uZGFyeVByb2R1Y3ROYW1lIjoiQSBWSVNUQSIsInBheW1lbnRUcmFuc2FjdGlv
bklkIjoiNmJiYjZkOGEtNDk1Zi00NjcwLTgzNWYtZjhhY2ViOWRlMDY4IiwiYXZhaWFibGVCYWxh
bmNlIjoiMCIsInBhbiI6IioqKioqKioqKio0MjQyIiwib3JpZ2luYWxUcmFuc2FjdGlvbklkIjoi
MCIsIm9yaWdpbmFsVHJhbnNhY3Rpb25EYXRlIjoiMDgvMDQvMjQiLCJzZWNvbmRhcnlQcm9kdWN0Q29kZSI6IjIwNCIsImRvY3VtZW50VHlwZSI6IkoiLCJoYXNTZW50TWVyY2hhbnRDb2RlIjoiZmFsc2UiLCJzdGF0dXNDb2RlIjoiMSIsIm1lcmNoYW50QWRkcmVzcyI6IkFsYW1lZGEgR3JhamF1LCAy
MTkiLCJtZXJjaGFudENvZGUiOiIwMDEwMDAwMjQ0NDcwMDAxIiwicGF5bWVudFR5cGVDb2RlIjoiMSIsImhhc0Nvbm5lY3Rpdml0eSI6InRydWUiLCJwcm9kdWN0TmFtZSI6IkNSRURJVE8gQSBWSVNUQSAtIEkiLCJtZXJjaGFudE5hbWUiOiJMT0pBIE9OIiwiZW50cmFuY2VNb2RlIjoiNjQyMDE3MjA0
MDgwIiwiY2FyZENhcHR1cmVUeXBlIjoiMSIsImZpcnN0UXVvdGFBbW91bnQiOiIwIiwidG90YWxp
emVyQ29kZSI6IjAiLCJyZXF1ZXN0RGF0ZSI6IjE3MTI2MDMyNjcxMjgiLCJhcHBsaWNhdGlvbklk
IjoiY2llbG8ubGF1bmNoZXIiLCJib2FyZGluZ1RheCI6IjAiLCJudW1iZXJPZlF1b3RhcyI6IjAi
LCJkb2N1bWVudCI6IjcwOTU3ODk4MDAwMTc2In0sInByaW1hcnlDb2RlIjoiNCIsInJlcXVlc3RE
YXRlIjoiMTcxMjYwMzI2NzEyOCIsInNlY29uZGFyeUNvZGUiOiIyMDQiLCJ0ZXJtaW5hbCI6IjYy
MDAwMTQwIn1dLCJwZW5kaW5nQW1vdW50IjowLCJwcmljZSI6MTY5OCwicmVmZXJlbmNlIjoiUmVmZXJlbmNlIiwic3RhdHVzIjoiUEFJRCIsInR5cGUiOiJQQVlNRU5UIiwidXBkYXRlZEF0IjoiQXBy
IDgsIDIwMjQgNDowNzo1MyBQTSJ9LHsiY3JlYXRlZEF0IjoiQXByIDgsIDIwMjQgNDowNzo0MyBQ
TSIsImlkIjoiZjJlNGIxZDMtYWI2Ny00NzM2LWEzMDctYjM0ZWJkZGIyM2QwIiwiaXRlbXMiOlt7
ImRlc2NyaXB0aW9uIjoiIiwiZGV0YWlscyI6IiIsImlkIjoiZDBjOGE4MzYtOTM4OC00MTdiLThk
MzAtMmViOWQ0YzA2ODFmIiwibmFtZSI6InByb2R1dG8iLCJxdWFudGl0eSI6MSwicmVmZXJlbmNlIjoiIiwic2t1IjoiNzY2MTgiLCJ1bml0T2ZNZWFzdXJlIjoidW5pZGFkZSIsInVuaXRQcmljZSI6
ODM4fV0sIm5vdGVzIjoiIiwibnVtYmVyIjoiIiwicGFpZEFtb3VudCI6ODM4LCJwYXltZW50cyI6
W3siYWNjZXNzS2V5IjoiclNBcU5QR3ZGUEpJIiwiYW1vdW50Ijo4MzgsImFwcGxpY2F0aW9uTmFt
ZSI6ImNvbS5hZHMubGlvLnVyaWFwcGNsaWVudCIsImF1dGhDb2RlIjoiMTYwODE2IiwiYnJhbmQi
OiIiLCJjaWVsb0NvZGUiOiIxMDgxNDIiLCJkZXNjcmlwdGlvbiI6IiIsImRpc2NvdW50ZWRBbW91
bnQiOjAsImV4dGVybmFsSWQiOiI5M2NiYmUzOS1hNWI2LTQ4MmItODBhZi00MDgxOGYyZTQyMjEiLCJpZCI6ImNiZjMxY2M4LWMzMzgtNDUxMC1iMGY4LTA3NWFlNzM4ODNlYSIsImluc3RhbGxtZW50cyI6MCwibWFzayI6IioqKioqKioqKio0MjQyIiwibWVyY2hhbnRDb2RlIjoiMDAxMDAwMDI0NDQ3MDAwMSIsInBheW1lbnRGaWVsZHMiOnsiaXNEb3VibGVGb250UHJpbnRBbGxvd2VkIjoidHJ1ZSIsImJpbiI6IjQyNDI0MiIsImhhc1Bhc3N3b3JkIjoidHJ1ZSIsInByaW1hcnlQcm9kdWN0Q29kZSI
IjQiLCJpc0V4dGVybmFsQ2FsbCI6InRydWUiLCJwcmltYXJ5UHJvZHVjdE5hbWUiOiJDUkVESVRP
IiwicmVjZWlwdFByaW50UGVybWlzc2lvbiI6IjEiLCJpc09ubHlJbnRlZ3JhdGlvbkNhbmNlbGFi
bGUiOiJmYWxzZSIsInVwRnJvbnRBbW91bnQiOiIwIiwiY3JlZGl0QWRtaW5UYXgiOiIwIiwiZXh0
ZXJuYWxDYWxsTWVyY2hhbnRDb2RlIjoiMDAxMDAwMDI0NDQ3MDAwMSIsImZpcnN0UXVvdGFEYXRlIjoiMCIsImlzRmluYW5jaWFsUHJvZHVjdCI6InRydWUiLCJoYXNQcmludGVkQ2xpZW50UmVjZWlwdCI6ImZhbHNlIiwiaGFzU2lnbmF0dXJlIjoiZmFsc2UiLCJhcHBsaWNhdGlvbk5hbWUiOiJjb20u
YWRzLmxpby51cmlhcHBjbGllbnQiLCJoYXNXYXJyYW50eSI6ImZhbHNlIiwiaW50ZXJlc3RBbW91
bnQiOiIwIiwiY2hhbmdlQW1vdW50IjoiMCIsInNlcnZpY2VUYXgiOiIwIiwiY2l0eVN0YXRlIjoi
QmFydWVyaSAtIFNQIiwiaGFzU2VudFJlZmVyZW5jZSI6ImZhbHNlIiwidjQwQ29kZSI6IjQiLCJz
ZWNvbmRhcnlQcm9kdWN0TmFtZSI6IkEgVklTVEEiLCJwYXltZW50VHJhbnNhY3Rpb25JZCI6Ijkz
Y2JiZTM5LWE1YjYtNDgyYi04MGFmLTQwODE4ZjJlNDIyMSIsImF2YWlhYmxlQmFsYW5jZSI6IjAi
LCJwYW4iOiIqKioqKioqKioqNDI0MiIsIm9yaWdpbmFsVHJhbnNhY3Rpb25JZCI6IjAiLCJvcmln
aW5hbFRyYW5zYWN0aW9uRGF0ZSI6IjA4LzA0LzI0Iiwic2Vjb25kYXJ5UHJvZHVjdENvZGUiOiIy
MDQiLCJkb2N1bWVudFR5cGUiOiJKIiwiaGFzU2VudE1lcmNoYW50Q29kZSI6ImZhbHNlIiwic3Rh
dHVzQ29kZSI6IjEiLCJtZXJjaGFudEFkZHJlc3MiOiJBbGFtZWRhIEdyYWphdSwgMjE5IiwibWVy
Y2hhbnRDb2RlIjoiMDAxMDAwMDI0NDQ3MDAwMSIsInBheW1lbnRUeXBlQ29kZSI6IjEiLCJoYXNDb25uZWN0aXZpdHkiOiJ0cnVlIiwicHJvZHVjdE5hbWUiOiJDUkVESVRPIEEgVklTVEEgLSBJIiwi
bWVyY2hhbnROYW1lIjoiTE9KQSBPTiIsImVudHJhbmNlTW9kZSI6IjY0MjAxNzIwNDA4MCIsImNh
cmRDYXB0dXJlVHlwZSI6IjEiLCJmaXJzdFF1b3RhQW1vdW50IjoiMCIsInRvdGFsaXplckNvZGUi
OiIwIiwicmVxdWVzdERhdGUiOiIxNzEyNjAzMjY3ODQ1IiwiYXBwbGljYXRpb25JZCI6ImNpZWxv
LmxhdW5jaGVyIiwiYm9hcmRpbmdUYXgiOiIwIiwibnVtYmVyT2ZRdW90YXMiOiIwIiwiZG9jdW1l
bnQiOiI3MDk1Nzg5ODAwMDE3NiJ9LCJwcmltYXJ5Q29kZSI6IjQiLCJyZXF1ZXN0RGF0ZSI6IjE3
MTI2MDMyNjc4NDUiLCJzZWNvbmRhcnlDb2RlIjoiMjA0IiwidGVybWluYWwiOiI2MjAwMDE0MCJ9XSwicGVuZGluZ0Ftb3VudCI6MCwicHJpY2UiOjgzOCwicmVmZXJlbmNlIjoiUmVmZXJlbmNlIiwi
c3RhdHVzIjoiUEFJRCIsInR5cGUiOiJQQVlNRU5UIiwidXBkYXRlZEF0IjoiQXByIDgsIDIwMjQg
NDowNzo1NCBQTSJ9XSwidG90YWxJdGVtcyI6MzYyLCJ0b3RhbFBhZ2VzIjo3M30=
&responsecode=0

ResponseCode = 0 significa sucesso e após realizar a decodificação será obtido um objeto JSON:

{
    "currentPage":0,
    "results":[],
    "totalItems":30,
    "totalPages":6
 }

O results estará uma lista com os pedidos.

Exemplo de Retorno de falha:

order://response?response=eyJjb2RlIjoxLCJyZWFzb24iOiJDQU5DRUxBRE8gUEVMTyBVU1XDgVJJTyJ9&responsecode=2

Listagem de Produtos

É possível obter todos os produtos (tipos de pagamento) que estão habilitados para o cliente. Para isso basta definir o JSON abaixo e formata-lo para BASE64:

{
“clientID”: “seu cliente ID”,
“accessToken”: “seu access token”
}

A chamada deve ser feita da seguinte forma:

var base64 = getBase64(jsonString)
var checkoutUri = "lio://products?request=$base64&urlCallback=order://response"

Para recuperar os dados basta acessar a intent na activity de resposta cadastrada em seu manifest e no parâmetro data, acessar a URI da seguinte forma:

val responseIntent = intent
if (Intent.ACTION_VIEW == responseIntent.action) {
   val uri = responseIntent.data
   val response = uri.getQueryParameter("response")
   val data = Base64.decode(response, Base64.DEFAULT)
   val json = String(data)
}

Exemplo de retorno dos produtos

order://products?response=W3siY29kZSI6IjQiLCJpZCI6MTAwMCwibmFtZSI6IkNSRURJVE8iLCJzZWNvbmRhcnlQcm9kdWN0cyI6W3siY29kZSI6IjIwNCIsImlkIjoxMDAwLCJuYW1lIjoiQ1JFRElUTyBBIFZJU1RBIC0gSSJ9LHsiY29kZSI6IjIwNSIsImlkIjoxMDAxLCJuYW1lIjoiQ1JFRElUTyBQQVJDRUxBRE8gQURNIC0gSSJ9LHsiY29kZSI6IjIwNiIsImlkIjoxMDAyLCJuYW1lIjoiQ1JFRElUTyBQQVJDRUxBRE8gTE9KQSAtIEkifV19LHsiY29kZSI6IjgiLCJpZCI6MTAwMSwibmFtZSI6IkRFQklUTyIsInNlY29uZGFyeVByb2R1Y3RzIjpbeyJjb2RlIjoiMjA4IiwiaWQiOjEwMDMsIm5hbWUiOiJERUJJVE8gQSBWSVNUQSAtIEkifV19LHsiY29kZSI6IjEzIiwiaWQiOjEwMDIsIm5hbWUiOiJWSVNBIFZBTEUiLCJzZWNvbmRhcnlQcm9kdWN0cyI6W3siY29kZSI6IjI1MCIsImlkIjoxMDA0LCJuYW1lIjoiVklTQS1WQUxFIFJFRkVJQ0FPIC0gSSJ9LHsiY29kZSI6IjI1MSIsImlkIjoxMDA1LCJuYW1lIjoiVklTQS1WQUxFIEFMSU1FTlRBQ0FPIC0gSSJ9XX0seyJjb2RlIjoiNyIsImlkIjoxMDAzLCJuYW1lIjoiUFJFLUFVVCIsInNlY29uZGFyeVByb2R1Y3RzIjpbeyJjb2RlIjoiMCIsImlkIjoyMDAwLCJuYW1lIjoiUFJFLUFVVE9SSVpBQ0FPIC0gSSJ9XX1d&responsecode=0

Depois de decodificar o resultado, será obtido uma lista com todos os produtos que estão habilitados para o EC.

[
    {
        "code": "4",
        "id": 1000,
        "name": "CREDITO",
        "secondaryProducts": [
            {
                "code": "204",
                "id": 1000,
                "name": "CREDITO A VISTA - I"
            },
            {
                "code": "205",
                "id": 1001,
                "name": "CREDITO PARCELADO ADM - I"
            },
            {
                "code": "206",
                "id": 1002,
                "name": "CREDITO PARCELADO LOJA - I"
            }
        ]
    },
    {
        "code": "8",
        "id": 1001,
        "name": "DEBITO",
        "secondaryProducts": [
            {
                "code": "208",
                "id": 1003,
                "name": "DEBITO A VISTA - I"
            }
        ]
    },
    {
        "code": "13",
        "id": 1002,
        "name": "VISA VALE",
        "secondaryProducts": [
            {
                "code": "250",
                "id": 1004,
                "name": "VISA-VALE REFEICAO - I"
            },
            {
                "code": "251",
                "id": 1005,
                "name": "VISA-VALE ALIMENTACAO - I"
            }
        ]
    },
    {
        "code": "7",
        "id": 1003,
        "name": "PRE-AUT",
        "secondaryProducts": [
            {
                "code": "0",
                "id": 2000,
                "name": "PRE-AUTORIZACAO - I"
            }
        ]
    }
]

Consulta de Pedido avulso

Na consulta de pedido avulso, é possível realizar de duas maneiras diferentes. Buscando um pedido por valor, nsu (Cielo code) e código de autorização. Ou pode consultar um pedido pelo seu identificador (ID). Para isso basta realizar a chamada da seguinte maneira.

Os dados de entrada podem ser qualquer um dos JSONs abaixo:

JSON de busca por ID:

{
    "orderId": "orderId",
    "clientID": "clientidtest",
    "accessToken": "accesstokentest"
}

JSON de busca por valor, nsu e código de autorização:

{
    "amount": amount,
    "authCode": "authCode",
    "cieloCode": "cieloCode(nsu)",
    "orderId": "orderId",
    "clientID": "clientidtest",
    "accessToken": "accesstokentest"
}

Para isso basta definir um dos JSONs acima e formata-lo para BASE64 e a chamada deve ser feita da seguinte forma:

var base64 = getBase64(jsonString)
var checkoutUri = "lio://order?request=$base64&urlCallback=order://response"

Para recuperar os dados basta acessar a intent na activity de resposta cadastrada em seu manifest e no parâmetro data, acessar a URI da seguinte forma:

val responseIntent = intent
if (Intent.ACTION_VIEW == responseIntent.action) {
   val uri = responseIntent.data
   val response = uri.getQueryParameter("response")
   val data = Base64.decode(response, Base64.DEFAULT)
   val json = String(data)
}

Exemplo de retorno do pedido

order://responseresponse=eyJhY2Nlc3NLZXkiOiJyU0FxTlBHdkZQSkkiLCJhbW91bnQiOjExMTYsImNyZWF0ZWRBdCI6IkFwciA0LCAyMDI0IDEwOjE4OjE4IEFNIiwiaWQiOiJkYTI1NzE2Ny1lODJhLTRjN2MtYjVlMC1mMDc2OWQ4MTg0M2MiLCJpdGVtcyI6W3siYW1vdW50IjoxMTE2LCJkZXNjcmlwdGlvbiI6InByb2R1dG8iLCJkZXRhaWxzIjoicHJvZHV0byIsImlkIjoiM2U4YjNjOGYtNDdlMC00YjNkLWFiMTQtNWYxNzY0ZjczN2FhIiwibmFtZSI6InByb2R1dG8iLCJxdWFudGl0eSI6MiwicmVmZXJlbmNlIjoicHJvZHV0byIsInNrdSI6IjY4NzU5IiwidW5pdE9mTWVhc3VyZSI6InVuaWRhZGUiLCJ1bml0UHJpY2UiOjU1OH1dLCJsYXN0TW9kaWZpY2F0aW9uRGF0ZSI6IkFwciA0LCAyMDI0IDEwOjE4OjE4IEFNIiwibm90ZXMiOiIiLCJudW1iZXIiOiIiLCJwYWlkQW1vdW50IjowLCJwZW5kaW5nQW1vdW50IjoxMTE2LCJyZWZlcmVuY2UiOiJSZWZlcmVuY2UiLCJyZWxlYXNlRGF0ZSI6IkFwciA0LCAyMDI0IDEwOjE4OjE4IEFNIiwic2VjcmV0QWNjZXNzS2V5IjoiWFpldm9VWUtta1ZyIiwic3RhdHVzIjoiRU5URVJFRCIsInRyYW5zYWN0aW9ucyI6W10sInR5cGUiOiJQQVlNRU5UIn0=&responsecode=0

Depois de decodificar o resultado, será obtido uma lista com o pedido encontrado:

{
    "accessKey": "rSAqNPGvFPJI",
    "amount": 1116,
    "createdAt": "Apr 4, 2024 10:18:18 AM",
    "id": "da257167-e82a-4c7c-b5e0-f0769d81843c",
    "items": [
        {
            "amount": 1116,
            "description": "produto",
            "details": "produto",
            "id": "3e8b3c8f-47e0-4b3d-ab14-5f1764f737aa",
            "name": "produto",
            "quantity": 2,
            "reference": "produto",
            "sku": "68759",
            "unitOfMeasure": "unidade",
            "unitPrice": 558
        }
    ],
    "lastModificationDate": "Apr 4, 2024 10:18:18 AM",
    "notes": "",
    "number": "",
    "paidAmount": 0,
    "pendingAmount": 1116,
    "reference": "Reference",
    "releaseDate": "Apr 4, 2024 10:18:18 AM",
    "secretAccessKey": "XZevoUYKmkVr",
    "status": "ENTERED",
    "transactions": [],
    "type": "PAYMENT"
}

Em “transactions”, terá uma lista com os pagamentos feitos para o pedido.

Caso não encontre o Pedido, o retorno será:

order://response?response=eyJjb2RlIjoxLCJyZWFzb24OiJDQU5DRUxBRE8gUEVMTyBVU1XDgVJJTyJ9&responsecode=2

Depois de decodificar o resultado:

{
    "code": 2,
    "reason": "Order not found",
}

Informações do terminal

É possível obter algumas informações do terminal, tais como, nível de bateria, modelo do dispositivo, Merchant e também o número lógico. Para isso basta realizar a chamada da seguinte maneira:

var base64 = getBase64(jsonString)
var checkoutUri = "lio://terminalinfo?urlCallback=order://response"

Para recuperar os dados basta acessar a intent na activity de resposta cadastrada em seu manifest e no parâmetro data, acessar a URI da seguinte forma:

val responseIntent = intent
if (Intent.ACTION_VIEW == responseIntent.action) {
   val uri = responseIntent.data
   val response = uri.getQueryParameter("response")
   val data = Base64.decode(response, Base64.DEFAULT)
   val json = String(data)
}

Exemplos de retorno das informações do terminal

order://response?response=eyJiYXR0ZXJ5TGV2ZWwiOjAuOTksImRldmljZU1vZGVsIjoiTElPX1YzIiwibG9naWNOdW1iZXIiOiI2MjAwMDE0MC00IiwibWVyY2hhbnRDb2RlIjoiMDAxMDAwMDI0NDQ3MDAwMSJ9&responsecode=0

Depois de decodificar o resultado:

{
    "batteryLevel": 0.99,
    "deviceModel": "LIO_V3",
    "logicNumber": "12345678-9",
    "merchantCode": "0000000000000000"
}

Cancelamento na integração híbrida

Para realizar o cancelamento é preciso criar um json seguindo o formato definido abaixo e converte-lo para BASE64:

{
  "id": "id da ordem",
  "clientID": "seu client ID",
  "accessToken": "seu access token",
  "cieloCode": "123",
  "authCode": "123",
  "value": 1000
}

A chamada de cancelamento deve ser feita da seguinte forma. Como explicado anteriormente, é preciso definir o contrato de resposta, aqui será utilizado essa configuração no parâmetro urlCallback:

var base64 = getBase64(jsonString)
var checkoutUri ="lio://payment-reversal?request=$base64&urlCallback=order://response"

Para recuperar os dados basta acessar a intent na activity de resposta cadastrada em sem Manifest e no parâmetro data, acessar a uri, da seguinte forma:

val responseIntent = intent
if (Intent.ACTION_VIEW == responseIntent.action) {
   val uri = responseIntent.data
   val response = uri.getQueryParameter("response")
   val data = Base64.decode(response, Base64.DEFAULT)
   val json = String(data)
}

Exemplos de retorno cancelamento

order://response?response=eyJjcmVhdGVkQXQiOiJGZWIgOSwgMjAyNCAyOjI5OjE2IFBNIiwiaWQiOiJmN2E4ZjIyNi0yOTQ5LTQwMGItOTc3OC05MTNiMGQxNjkzODkiLCJpdGVtcyI6W3siZGVzY3JpcHRpb24iOiIiLCJkZXRhaWxzIjoiIiwiaWQiOiI0MmQwNTg2Yi1mOWViLTQwNjYtYmQxZi1jNTQyMTg2MzJmMmUiLCJuYW1lIjoicHJvZHV0byIsInF1YW50aXR5Ijo1LCJyZWZlcmVuY2UiOiIiLCJza3UiOiI0OTQ3MyIsInVuaXRPZk1lYXN1cmUiOiJ1bmlkYWRlIiwidW5pdFByaWNlIjo3MjR9XSwibm90ZXMiOiIiLCJudW1iZXIiOiIiLCJwYWlkQW1vdW50IjowLCJwYXltZW50cyI6W3siYWNjZXNzS2V5IjoiclNBcU5QR3ZGUEpJIiwiYW1vdW50IjozNjIwLCJhcHBsaWNhdGlvbk5hbWUiOiJjb20uYWRzLmxpby51cmlhcHBjbGllbnQiLCJhdXRoQ29kZSI6IjE0Mjk0MSIsImJyYW5kIjoiIiwiY2llbG9Db2RlIjoiOTEwNzkyIiwiZGVzY3JpcHRpb24iOiIiLCJkaXNjb3VudGVkQW1vdW50IjowLCJleHRlcm5hbElkIjoiNDFmYzNlZDItYjc4MS00Y2M0LWEyM2EtYWExYTdiN2JjNWQwIiwiaWQiOiIyZTc3YTI3OC0wY2M1LTQ3ODQtYTljNy01Y2Y3M2I5OWRiZjYiLCJpbnN0YWxsbWVudHMiOjAsIm1hc2siOiIqKioqKioqKioqKiowMDAwIiwibWVyY2hhbnRDb2RlIjoiMDAxMDAwMDI0NDQ3MDAwMSIsInBheW1lbnRGaWVsZHMiOnsiaXNEb3VibGVGb250UHJpbnRBbGxvd2VkIjoidHJ1ZSIsImJpbiI6IjAiLCJoYXNQYXNzd29yZCI6ImZhbHNlIiwicHJpbWFyeVByb2R1Y3RDb2RlIjoiNCIsImlzRXh0ZXJuYWxDYWxsIjoidHJ1ZSIsInByaW1hcnlQcm9kdWN0TmFtZSI6IkNSRURJVE8iLCJyZWNlaXB0UHJpbnRQZXJtaXNzaW9uIjoiMSIsImlzT25seUludGVncmF0aW9uQ2FuY2VsYWJsZSI6ImZhbHNlIiwidXBGcm9udEFtb3VudCI6IjAiLCJjcmVkaXRBZG1pblRheCI6IjAiLCJleHRlcm5hbENhbGxNZXJjaGFudENvZGUiOiIwMDEwMDAwMjQ0NDcwMDAxIiwiZmlyc3RRdW90YURhdGUiOiIwIiwiaXNGaW5hbmNpYWxQcm9kdWN0IjoidHJ1ZSIsImhhc1ByaW50ZWRDbGllbnRSZWNlaXB0IjoiZmFsc2UiLCJoYXNTaWduYXR1cmUiOiJmYWxzZSIsImFwcGxpY2F0aW9uTmFtZSI6ImNvbS5hZHMubGlvLnVyaWFwcGNsaWVudCIsImhhc1dhcnJhbnR5IjoiZmFsc2UiLCJpbnRlcmVzdEFtb3VudCI6IjAiLCJjaGFuZ2VBbW91bnQiOiIwIiwic2VydmljZVRheCI6IjAiLCJjaXR5U3RhdGUiOiJCYXJ1ZXJpIC0gU1AiLCJoYXNTZW50UmVmZXJlbmNlIjoiZmFsc2UiLCJ2NDBDb2RlIjoiNCIsInNlY29uZGFyeVByb2R1Y3ROYW1lIjoiQSBWSVNUQSIsInBheW1lbnRUcmFuc2FjdGlvbklkIjoiNDFmYzNlZDItYjc4MS00Y2M0LWEyM2EtYWExYTdiN2JjNWQwIiwiYXZhaWFibGVCYWxhbmNlIjoiMCIsInBhbiI6IioqKioqKioqKioqKjAwMDAiLCJvcmlnaW5hbFRyYW5zYWN0aW9uSWQiOiIwIiwib3JpZ2luYWxUcmFuc2FjdGlvbkRhdGUiOiIwOS8wMi8yNCIsInNlY29uZGFyeVByb2R1Y3RDb2RlIjoiMjA0IiwiZG9jdW1lbnRUeXBlIjoiSiIsImhhc1NlbnRNZXJjaGFudENvZGUiOiJmYWxzZSIsInN0YXR1c0NvZGUiOiIxIiwibWVyY2hhbnRBZGRyZXNzIjoiQWxhbWVkYSBHcmFqYXUsIDIxOSIsIm1lcmNoYW50Q29kZSI6IjAwMTAwMDAyNDQ0NzAwMDEiLCJwYXltZW50VHlwZUNvZGUiOiIxIiwiaGFzQ29ubmVjdGl2aXR5IjoidHJ1ZSIsInByb2R1Y3ROYW1lIjoiQ1JFRElUTyBBIFZJU1RBIC0gSSIsIm1lcmNoYW50TmFtZSI6IkxPSkEgT04iLCJlbnRyYW5jZU1vZGUiOiI2NjEwMTAxMDcwODAiLCJjYXJkQ2FwdHVyZVR5cGUiOiI2IiwiZmlyc3RRdW90YUFtb3VudCI6IjAiLCJ0b3RhbGl6ZXJDb2RlIjoiMCIsInJlcXVlc3REYXRlIjoiMTcwNzQ5OTc2MDI5OSIsImFwcGxpY2F0aW9uSWQiOiJjaWVsby5sYXVuY2hlciIsImJvYXJkaW5nVGF4IjoiMCIsIm51bWJlck9mUXVvdGFzIjoiMCIsImRvY3VtZW50IjoiMDAwMDAwMDAwMDAwMDAifSwicHJpbWFyeUNvZGUiOiI0IiwicmVxdWVzdERhdGUiOiIxNzA3NDk5NzYwMjk5Iiwic2Vjb25kYXJ5Q29kZSI6IjIwNCIsInRlcm1pbmFsIjoiNjIwMDAxMTIifSx7ImFjY2Vzc0tleSI6IiIsImFtb3VudCI6MzYyMCwiYXBwbGljYXRpb25OYW1lIjoiY29tLmFkcy5saW8udXJpYXBwY2xpZW50IiwiYXV0aENvZGUiOiIxNDMwMDUiLCJicmFuZCI6IiIsImNpZWxvQ29kZSI6IjkxMDc5NCIsImRlc2NyaXB0aW9uIjoiIiwiZGlzY291bnRlZEFtb3VudCI6MCwiZXh0ZXJuYWxJZCI6IjczNTFkZWI1LTlkYTgtNGQ4ZC1iN2E5LWRlYWQyZjY3M2RkMSIsImlkIjoiODkwNjliNzEtMTE5ZS00MjFjLTgyODUtYmNjODNlZWU0ZWViIiwiaW5zdGFsbG1lbnRzIjowLCJtYXNrIjoiKioqKioqKioqKioqMjgxMCIsIm1lcmNoYW50Q29kZSI6IjAwMTAwMDAyNDQ0NzAwMDEiLCJwYXltZW50RmllbGRzIjp7ImlzRG91YmxlRm9udFByaW50QWxsb3dlZCI6InRydWUiLCJiaW4iOiIwIiwiaGFzUGFzc3dvcmQiOiJmYWxzZSIsInByaW1hcnlQcm9kdWN0Q29kZSI6IjQiLCJpc0V4dGVybmFsQ2FsbCI6InRydWUiLCJwcmltYXJ5UHJvZHVjdE5hbWUiOiJDUkVESVRPIiwicmVjZWlwdFByaW50UGVybWlzc2lvbiI6IjEiLCJpc09ubHlJbnRlZ3JhdGlvbkNhbmNlbGFibGUiOiJmYWxzZSIsInVwRnJvbnRBbW91bnQiOiIwIiwiY3JlZGl0QWRtaW5UYXgiOiIwIiwiZXh0ZXJuYWxDYWxsTWVyY2hhbnRDb2RlIjoiMDAxMDAwMDI0NDQ3MDAwMSIsImZpcnN0UXVvdGFEYXRlIjoiMCIsImlzRmluYW5jaWFsUHJvZHVjdCI6InRydWUiLCJoYXNQcmludGVkQ2xpZW50UmVjZWlwdCI6ImZhbHNlIiwiaGFzU2lnbmF0dXJlIjoiZmFsc2UiLCJhcHBsaWNhdGlvbk5hbWUiOiJjb20uYWRzLmxpby51cmlhcHBjbGllbnQiLCJoYXNXYXJyYW50eSI6ImZhbHNlIiwiaW50ZXJlc3RBbW91bnQiOiIwIiwiY2hhbmdlQW1vdW50IjoiMCIsInNlcnZpY2VUYXgiOiIwIiwiY2l0eVN0YXRlIjoiQmFydWVyaSAtIFNQIiwiaGFzU2VudFJlZmVyZW5jZSI6ImZhbHNlIiwidjQwQ29kZSI6IjI4Iiwic2Vjb25kYXJ5UHJvZHVjdE5hbWUiOiJBIFZJU1RBIiwicGF5bWVudFRyYW5zYWN0aW9uSWQiOiI0MWZjM2VkMi1iNzgxLTRjYzQtYTIzYS1hYTFhN2I3YmM1ZDAiLCJhdmFpYWJsZUJhbGFuY2UiOiIwIiwicGFuIjoiKioqKioqKioqKioqMjgxMCIsIm9yaWdpbmFsVHJhbnNhY3Rpb25JZCI6IjkxMDc5MiIsIm9yaWdpbmFsVHJhbnNhY3Rpb25EYXRlIjoiMDkvMDIvMjQiLCJzZWNvbmRhcnlQcm9kdWN0Q29kZSI6IjIwNCIsImRvY3VtZW50VHlwZSI6IkoiLCJoYXNTZW50TWVyY2hhbnRDb2RlIjoiZmFsc2UiLCJzdGF0dXNDb2RlIjoiMiIsIm1lcmNoYW50QWRkcmVzcyI6IkFsYW1lZGEgR3JhamF1LCAyMTkiLCJtZXJjaGFudENvZGUiOiIwMDEwMDAwMjQ0NDcwMDAxIiwicGF5bWVudFR5cGVDb2RlIjoiMSIsImhhc0Nvbm5lY3Rpdml0eSI6InRydWUiLCJwcm9kdWN0TmFtZSI6IkNSRURJVE8gQSBWSVNUQSAtIEkiLCJtZXJjaGFudE5hbWUiOiJMT0pBIE9OIiwiZW50cmFuY2VNb2RlIjoiNjYxMDEwMTA3MDgwIiwiY2FyZENhcHR1cmVUeXBlIjoiNiIsImZpcnN0UXVvdGFBbW91bnQiOiIwIiwidG90YWxpemVyQ29kZSI6IjAiLCJyZXF1ZXN0RGF0ZSI6IjE3MDc0OTk3ODA1NTMiLCJhcHBsaWNhdGlvbklkIjoiY29tLmFkcy5saW8udXJpYXBwY2xpZW50IiwiYm9hcmRpbmdUYXgiOiIwIiwibnVtYmVyT2ZRdW90YXMiOiIwIiwiZG9jdW1lbnQiOiIwMDAwMDAwMDAwMDAwMCJ9LCJwcmltYXJ5Q29kZSI6IjQiLCJyZXF1ZXN0RGF0ZSI6IjE3MDc0OTk3ODA1NTMiLCJzZWNvbmRhcnlDb2RlIjoiMjA0IiwidGVybWluYWwiOiI2MjAwMDExMiJ9XSwicGVuZGluZ0Ftb3VudCI6MzYyMCwicHJpY2UiOjM2MjAsInJlZmVyZW5jZSI6IlJlZmVyZW5jZSIsInN0YXR1cyI6IkVOVEVSRUQiLCJ0eXBlIjoiUEFZTUVOVCIsInVwZGF0ZWRBdCI6IkZlYiA5LCAyMDI0IDI6Mjk6NDEgUE0ifQ==&responsecode=0

Atenção: O campo statusCode=1 indica uma transação de pagamento e statusCode=2 Cancelamento. Você pode utilizar esse campo para identificar a transação de cancelamento no JSON recebido.

Cashless - Integração Hibrida

A Cielo LIO oferece a solução de pagamento cashless via integração, suportamos no momento os cartões Mifare 1k. Para utilizar o serviço no aplicativo de integração podemos começar adicionando no arquivo de manifesto a seguinte permissão:

<uses-permission android:name="cielo.lio.permission.CASHLESS"/>

Mifare

Os cartões Mifare armazenam dados em uma pequena antena integrada, permitindo que eles se comuniquem com os leitores quando estão em proximidade. Referente a capacidade de armazenamento, hoje damos suporte aos cartões Mifare 1k, sua memória está organizada em blocos e setores, onde cada bloco possui uma capacidade de armazenamento de 16 bytes de dados, cada setor é composto por 4 blocos, totalizando 64 bytes de dados.

Nossa integração híbrida não depende do SDK Lio, basta o integrador criar uma intent, passá-la como parâmetro no método startService disponível via context da aplicação.

  Intent(action)
    .setPackage("cielo.lio.cashless")
    .putExtra("cbType", 'B')
    .putExtra("cbPackage", packageName)
    .putExtra("cbAction", cbAction)
    .let(::startService)

Descrição dos parâmetros utilizados na operação anterior:

ATRIBUTO DESCRIÇÃO DOMÍNIO
action Operação que deseja realizar. cielo.lio.cashless.mifare.DETECT
    cielo.lio.cashless.mifare.AUTHENTICATE
    cielo.lio.cashless.mifare.READ
    cielo.lio.cashless.mifare.WRITE
    cielo.lio.cashless.mifare.INCREMENT
    cielo.lio.cashless.mifare.DECREMENT
cbType Forma que deseja receber o retorno da operação A - Activity
  (callback). B - Broadcast Reciver
  Obs: É de responsabilidade do integrador S - Service
  implementar a funcionalidade que irá tratar a  
  resposta do serviço.  
cbPackage PackageName do app que está realizando a  
  integração.  
cbAction Atributo que enviamos no retorno da operação, AUTH_CALLBACK_READ
  serve para o integrador descobrir na resposta AUTH_CALLBACK_WRITE
  qual foi a operação executada. AUTH_CALLBACK_INCR
    AUTH_CALLBACK_DECR
    DETECT_CALLBACK
    AUTHENTICATE_CALLBACK

Por fim chamamos o método startService para iniciarmos o serviço mifare na Lio.

Descrição dos parâmetros utilizados nas operações de leitura e escrita passados via intent

ATRIBUTO DESCRIÇÃO DOMÍNIO
sector O setor de cartões inicia do zero. Byte
block O bloco no setor, inicia do zero. Byte
data Os dados a serem inseridos no bloco. ByteArray
value O valor para incrementar ou decrementar Byte
keyType O tipo de chave para autenticar no setor (A ou B) Char
key A chave para autenticar no setor. ByteArray
destinationBlock O bloco para backup ou restaurar. Byte

Operações suportadas pelo serviço Mifare

Como vimos no exemplo anterior, para realizar operações com cartão Mifare basta o integrador criar uma intent(seguindo nossa especificação) e utilizá-la como parâmetro do método startService, disponível na classe context.

Detect

A operação tem a responsabilidade de ativar a antena e aguardar a aproximação de um cartão. Em caso de sucesso na operação, a intent de retorno conterá o parâmetro result, que é uma String com o valor R00, e o parâmetro data, que é um ByteArray contendo o identificador do cartão. Se a operação resultar em erro, o parâmetro result retornará uma String com um valor diferente de R00, e o identificador do cartão não será retornado no parâmetro data.

Exemplo de chamada detect:

  Intent("cielo.lio.cashless.mifare.DETECT")
    .setPackage("cielo.lio.cashless")
    .putExtra("cbType", 'B')
    .putExtra("cbPackage", packageName)
    .putExtra("cbAction", cbAction)
    .let(::startService)

Obs: Lembrando que o parâmetro cbType é customizável, não necessariamente o integrador precisa tratar a resposta via broadcast, fica a seu critério as opções abaixo:

B -> Broadcast
S -> Service
A -> Activity

Authenticate

Operação responsável por autenticar-se no setor, para que possa operar no mesmo. É importante estar contido na intent as informações de setor, chave e tipo de chave (sector, key, keyType).

Exemplo de chamada authenticate:

  Intent("cielo.lio.cashless.mifare.AUTHENTICATE")
    .setPackage("cielo.lio.cashless")
    .putExtra("cbType", 'B')
    .putExtra("cbPackage", packageName)
    .putExtra("cbAction", cbAction)
    .putExtra("sector", "1".toByte())
    .putExtra("key", MifareClassic.KEY_DEFAULT)
    .putExtra("keyType", 'A')
    .let(::startService)

Read

Operação responsável por realizar a leitura nos blocos e setores. É importante que a intent que iremos passar como parâmetro tenham as informações de setor e bloco (sector, block).

Exemplo de chamada read:

  Intent("cielo.lio.cashless.mifare.READ")
    .setPackage("cielo.lio.cashless")
    .putExtra("cbType", 'B')
    .putExtra("cbPackage", packageName)
    .putExtra("cbAction", cbAction)
    .putExtra("sector", "1".toByte())
    .putExtra("block", "0".toByte())
    .let(::startService)

Write

Esta operação nos permite escrever em um setor e bloco específico. É importante adicionar na intent as informações de setor, do bloco e data (sector, block e data).

Exemplo de chamada write:

  Intent("cielo.lio.cashless.mifare.WRITE")
    .setPackage("cielo.lio.cashless")
    .putExtra("cbType", 'B')
    .putExtra("cbPackage", packageName)
    .putExtra("cbAction", cbAction)
    .putExtra("sector", "1".toByte())
    .putExtra("block", "0".toByte())
    .putExtra("data", "100".toByteArray())
    .let(::startService)

Increment

Operação responsável pelo incremento de valor em um bloco específico. É importante conter na intent as informações de setor, do bloco e valor (sector, block e value).

Exemplo de chamada increment:

  Intent("cielo.lio.cashless.mifare.INCREMENT")
    .setPackage("cielo.lio.cashless")
    .putExtra("cbType", 'B')
    .putExtra("cbPackage", packageName)
    .putExtra("cbAction", cbAction)
    .putExtra("sector", "1".toByte())
    .putExtra("block", "0".toByte())
    .putExtra("value", "5".toByte())
    .let(::startService)

Decrement

Operação responsável pelo decremento de valor em um bloco específico. É importante conter na intent as informações de setor, do bloco e valor (sector, block e value). Exemplo de chamada decrement:

  Intent("cielo.lio.cashless.mifare.DECREMENT")
    .setPackage("cielo.lio.cashless")
    .putExtra("cbType", 'B')
    .putExtra("cbPackage", packageName)
    .putExtra("cbAction", cbAction)
    .putExtra("sector", "1".toByte())
    .putExtra("block", "0".toByte())
    .putExtra("value", "5".toByte())
    .let(::startService)

Deactivate

Operação de encerramento do serviço, use-o quando estiver terminado. Exemplo de chamada deactivate:

Intent("cielo.lio.cashless.mifare.DEACTIVATE")
 .setPackage("cielo.lio.cashless")
 .putExtra("cbType", 'B')
 .putExtra("cbPackage", packageName)
 .putExtra("cbAction", cbAction)
 .let(::startService)

Backup e Restore

Operações de transferência dos dados de um bloco para outro, também conhecida em algumas documentações do Mifare como transfer. É importante a intent conter informações de setor, bloco e bloco de destino. (sector, block e destinationBlock).

Exemplo de chamada:

  Intent("cielo.lio.cashless.mifare.BACKUP")
    .setPackage("cielo.lio.cashless")
    .putExtra("cbType", 'B')
    .putExtra("cbPackage", packageName)
    .putExtra("cbAction", cbAction)
  .putExtra("block", "1".toByte())
  .putExtra("destinationBlock", "2".toByte())
    .let(::startService)

  Intent("cielo.lio.cashless.mifare.RESTORE")
    .setPackage("cielo.lio.cashless")
    .putExtra("cbType", 'B')
    .putExtra("cbPackage", packageName)
    .putExtra("cbAction", cbAction)
  .putExtra("block", "1".toByte())
  .putExtra("destinationBlock", "2".toByte())
    .let(::startService)

Retorno das operações para o aplicativo do cliente.

Os componentes para tratar os retornos para as operações que acabamos de descrever podem ser variados (broadcast, service, intent), o que todos têm em comum é que passamos uma intent como parâmetro, nesta teremos os seguintes atributos:

ATRIBUTO DESCRIÇÃO DOMÍNIO
result R00 significa sucesso, qualquer outro valor significa falha. String
detail Mensagem de retorno. String
data Em caso de operação de leitura, o parâmetro retorna o que foi lido do cartão, para outras operações o retorno é nulo. byteArray

Abaixo disponibilizando uma classe de exemplo que consume a API do Mifare, a implementação está em Kotlin e o modo de consumo escolhido foi o broadcast.

Exemplo de classe para tratamento do retorno utilizando broadcast

Abaixo disponiblizamos um exemplo de solução que trata o retorno das operações mifare utilizando broadcast

Clique aqui para ver exemplo de solução.

Impressão

Para realizar a impressão, basta montar uma URL com o seguinte formato:

lio://print?request=$base64&urlCallback=order://response

Segue abaixo, alguns exemplos de impressão:

Texto

Para otimizar a performance ao usar o Printer Manager para imprimir textos com múltiplas linhas, é aconselhável evitar a invocação do método de impressão para cada linha individualmente.

Em vez disso, recomenda-se a formatação do texto completo, incluindo todas as linhas, e a realização de uma única chamada a operação PRINT_TEXT.

Isso reduz o número de chamadas ao método de impressão, melhorando a eficiência do processo.

{
  "operation": "PRINT_TEXT",
  "styles": [{}],
  "value": ["TEXTO PARA IMPRIMIR NA PRIMEIRA LINHA\nTEXTO PARA IMPRIMIR NA SEGUNDA LINHA\nTEXTO PARA IMPRIMIR NA TERCEIRA LINHA\n\n"]
}

Neste exemplo, o texto completo é formatado como uma única string, com cada linha separada por um caractere de nova linha (“\n”).

Imagem
{
  "operation": "PRINT_IMAGE",
  "styles": [{}],
  "value": ["/storage/emulated/0/saved_images/Image-5005.jpg"]
}
Múltiplas Colunas
{
  "operation": "PRINT_MULTI_COLUMN_TEXT",
  "styles": [
    {
      "key_attributes_align": 1,
      "key_attributes_textsize": 30,
      "key_attributes_typeface": 0
    },
    {
      "key_attributes_align": 0,
      "key_attributes_textsize": 20,
      "key_attributes_typeface": 1
    },
    {
      "key_attributes_align": 2,
      "key_attributes_textsize": 15,
      "key_attributes_typeface": 2
    }
  ],
  "value": [
    "Texto alinhado à esquerda.\n\n\n",
    "Texto centralizado\n\n\n",
    "Texto alinhado à direita\n\n\n"
  ]
}

Code Sample

Disponiblizamos 2 exemplos em diferentes linguagens para auxiliar no desenvolvimento:

Acesse o nosso projeto de exemplo em: React Native

Acesse o nosso projeto de exemplo em: Flutter

Integração Remota

Apresentação

O objetivo da Integração Remota da Cielo LIO é permitir que o lojista continue utilizando sua solução de frente de caixa (Automação Comercial ou PDV) e a integre com o módulo de pedidos e pagamentos da Cielo LIO através de uma API construída no padrão RESTful.

Dessa forma, toda a gestão do estabelecimento comercial fica sob responsabilidade da Automação Comercial e, no momento de realizar o pagamento, a Cielo LIO é utilizada.

integração remota

A API Order Manager da Cielo LIO possui as seguintes características:

Code Sample

O código do exemplo da Automação Comercial integrada com a API Order Manager da Cielo LIO encontra-se disponível no GitHub.

Fluxo para Integração

fluxo integração remota

API Docs

Nessa documentação, o desenvolvedor encontra todas as informações sobre os Endpoints, Entidades e Recursos disponíveis na API.

Você poderá consultar os dados de entrada, exemplos de requisição e os dados de saída. Assim como entender o fluxo básico da utilização da API Order Manager da Cielo LIO.

Endpoints

Todas as chamadas devem ser executadas utilizando as respectivas credenciais dos ambientes de sandbox e produção.

Sandbox

O ambiente de sandbox é destinado à realização de testes com parceiros da Cielo. Esse ambiente usa simuladores de integração. Assim, as operações não são executadas em ambiente produtivo.

Para utilizar o ambiente de sandbox, não é necessário que você forneça o número do estabelecimento. Você poderá iniciar os testes sem a necessidade de ter uma Cielo LIO. Para obter os tokens de sandbox, crie uma conta no portal e crie o Client-Id.

Utilize o endereço de sandbox abaixo para realizar os testes:

https://api.cielo.com.br/sandbox-lio/order-management/v1

Produção

O ambiente de produção é o ambiente transacional integrado ao ambiente da Cielo. As operações realizadas nesse ambiente não podem ser desfeitas.

Para utilizar o ambiente de produção, é necessário que você entre em contato através do formulário. Juntamente com os dados pessoais, forneça o número do estabelecimento. Para utilizar o ambiente de produção, é necessário que você possua uma Cielo LIO.

Utilize o endereço de produção abaixo para realizar as requisições:

https://api.cielo.com.br/order-management/v1

Já fez os testes em sandbox e deseja solicitar os tokens?

Clique em Solicitar Tokens

É necessário estar logado!

HTTP Headers

Todas as chamadas da API Integração Remota Cielo LIO Order Manager necessitam que as informações abaixo estejam presentes no Header na requisição:

Client-Id: Identificação de acesso. Sua geração ocorre no momento da criação pelo painel do desenvolvedor. Seu valor pode ser visualizado na coluna “Client ID”, dentro do menu “Desenvolvedor” -> “Client ID Cadastrados”.

Access-Token:Identificação do token de acesso, que armazena as regras de acesso permitidas ao Client ID. Sua geração ocorre no momento da criação do Client ID pelo painel do desenvolvedor. Seu valor pode ser visualizado clicando em “detalhes” na coluna “Access Tokens”, dentro do menu “Desenvolvedor” -> “Client ID Cadastrados”.

Merchant-Id: Token que identifica o estabelecimento comercial dentro do servidor Order Manager da Cielo LIO. Sua geração ocorre durante o processo de cadastro do Client ID. Seu valor pode ser visualizado na coluna “Merchant ID”, dentro do menu “Desenvolvedor” -> “Client ID Cadastrados”.

HTTP Status Code

Código Erro Descrição
200 OK Operação realizada com sucesso.
201 Created A solicitação foi realizada, resultando na criação de um novo recurso.
204 Empty Operação realizada com sucesso, mas nenhuma resposta foi retornada.
400 Bad Request A requisição possui parâmetro(s) inválido(s).
401 Unauthorized O token de acesso não foi informado ou não possui acesso às APIs.
403 Forbidden O acesso ao recurso foi negado.
404 Not Found O recurso informado no request não foi encontrado.
413 Request is to Large A requisição está ultrapassando o limite permitido para o perfil do seu token de acesso.
422 Unprocessable Entity A requisição possui parâmetros obrigatórios não informados.
429 Too Many Requests O consumidor estourou o limite de requisições por tempo.
500 Internal Server Error Erro não esperado; algo está quebrado na API

Status de pedido

Abaixo é apresentada uma máquina de estados, com os possíveis estados que um pedido pode assumir desde o momento de sua criação até o seu término:

status do pedido

Entidades

Order

A Order é uma representação de um pedido para a venda de um ou mais produtos e/ou serviços. É fundamental que exista uma Order para que um pagamento seja realizado na Cielo LIO.

Campo Tipo Descrição Obrigatório
id Texto UUID que identifica unicamente o pedido. criado pela API
number Texto Número do pedido. Geralmente, esse número representa o identificador do pedido em um sistema externo através da integração com parceiros. Não
reference Texto Referência do pedido. Utilizada para facilitar o acesso ou a localização do mesmo. Não
status Texto Status do pedido (ENTERED, RE-ENTERED, PAID, CANCELED e CLOSED). Sim
created_at Texto Data de criação do pedido. A data deve estar no formato: YYYY-MM-DDThh:mm:ssZ (Exemplo: 20151020T13:13:29.000Z). criado pela API
updated_at Texto Data da última atualização do pedido. A data deve estar no formato: YYYY-MM-DDThh:mm:ssZ (Exemplo: 20151020T13:13:29.000Z). criado pela API
items Lista (Order Item) Lista de itens contidos no pedido. Sim
notes Texto Campo disponível para uso do Merchant para comunicação. Não
transactions Lista (Transaction) Lista de transações de pagamento (ou outros tipos) efetuadas no pedido. Sim
price Número Valor total do pedido. Exemplo: O valor de R$ 10,00 é representado como 1000. Sim
remaining Número Valor restante do pagamento do pedido. Exemplo: O valor de R$ 10,00 é representado como 1000. Sim

Order Item

O Order Item é uma representação dos itens presentes em uma Order. É obrigatória a existência de, no mínimo, um Item para uma Order.

Campo Tipo Descrição Obrigatório
sku Texto SKU do produto. Exemplo: c2f5fb9a-5542-406e-8b79-17892329cda8. Sim
name Texto Nome do produto. Não
description Texto Descrição do produto. Não
unit_price Número Valor unitário do produto. Exemplo: O valor de R$ 10,00 é representado como 1000. Sim
quantity Número Quantidade de itens. Caso não seja informado, será considerado o valor 1. Não
unit_of_measure Texto Unidade de medida (EACH, HOURS, DAYS, SECONDS, CRATE_OF_12, SIX_PACK, GALLON e LITRE). Sim
details Texto Detalhes do produto. Não
created_at Texto Data de criação do pedido. A data deve estar no formato: YYYY-MM-DDThh:mm:ssZ (Exemplo: 20151020T13:13:29.000Z). Não
updated_at Texto Data de última atualização do pedido. A data deve estar no formato: YYYY-MM-DDThh:mm:ssZ (Exemplo: 20151020T13:13:29.000Z). Sim

Transaction

A Transaction é uma representação com todos os pagamentos que foram realizados em uma Order. O objetivo é utilizá-la para consultar os pagamentos (transactions) que foram efetuados em uma Order.

Campo Tipo Descrição Obrigatório
id Texto “UUID” que identifica unicamente a transação. Sim
external_id Texto Identificador unico ordem. Sim
status Texto Status da transação (CONFIRMED, PENDING e CANCELLED). Sim
terminal_number Número Número do terminal da Cielo LIO em que o pagamento foi realizado. Sim
authorization_code Número Código de autorização da transação. Sim
number Texto Número Sequencial Único (NSU) da transação. Sim
amount Número Valor da transação. Exemplo: O valor de R$ 10,00 é representado como 1000. Sim
transaction_type Texto Tipo da transação (PAYMENT e CANCELLATION). Sim

Card

O Card é uma representação do cartão que foi utilizado para realizar o pagamento/transação.

Campo Tipo Descrição Obrigatório
brand Texto Bandeira do cartão (VISA e MASTER). Sim
mask Número Número do cartão mascarado Sim

Payment Product

O Payment Product é uma representação da forma de pagamento utilizada para realizar um pagamento. Ex.: Crédito, Débito, etc.

Campo Tipo Descrição Obrigatório
primary_product_name Texto Forma de pagamento (CREDITO ou DEBITO) Sim
secondary_product_name Texto Tipo de pagamento (A VISTA, PARCELADO LOJA ou PARCELADO ADM) Sim
number_of_quotas Número Número de parcelas (0 para pagamentos à vista) Sim

Recursos

POST - Criar um pedido

Esse recurso realiza a criação de um pedido no servidor do Order Manager.

Endpoint:

POST /orders

Dados de entrada:

Campo Tipo Descrição Obrigatório
order Order Informações do pedido. Sim

Exemplo de requisição:

{
    "number": "0992f1d5cee540d9a9648f4d6a9e4aa6",
    "reference": "PEDIDO #1234",
    "status": "DRAFT",
    "items": [{
            "sku": "ede8f84a8b8645cb8e576a593c25c6ed",
            "name": "produto 1",
            "unit_price": 500,
            "quantity": 2,
            "unit_of_measure": "EACH"
        },
        {
            "sku": "c2f5fb9a5542406e8b7917892329cda8",
            "name": "produto 2",
            "unit_price": 1500,
            "quantity": 3,
            "unit_of_measure": "EACH"
        },
        {
            "sku": "b2j4bn6j93461385r5n90453407hjk0",
            "name": "produto 3",
            "unit_price": 550,
            "quantity": 3,
            "unit_of_measure": "EACH"
        },
        {
            "sku": "55329cda842406e8cv2f5gdf96985152d",
            "name": "produto 4",
            "unit_price": 2005,
            "unit_of_measure": "EACH"
        }
    ],
    "notes": "Mesa 1",
    "price": 9155
}

Dados de saída:

Campo Tipo Descrição Obrigatório
id body Identificador do pedido. Sim

Exemplo de resposta:

{
    "id": "2e1d7b07-dcee-4a09-8d09-3bb02d94169d"
}

GET - Consultar pedido

Esse recurso é utilizado para obter informações sobre um pedido específico. O id do pedido é utilizado para realizar a chamada.

Endpoint:

GET /orders/

Dados de entrada:

Campo Tipo Descrição Obrigatório
id path parameter Identificador do pedido. Sim

Exemplo de requisição:

GET

Dados de saída:

Campo Tipo Descrição Obrigatório
order Order Informações sobre o pedido consultado. Não

Exemplo de resposta:

{
    {
    "id": "b4d8a7dc-4250-48a3-bf18-d560d4508368",
    "number": "0992f1d5-cee5-40d9-a964-8f4d6a9e4aa6",
    "reference": "LOJA SUCO #1",
    "status": "ENTERED",
    "notes": "Mesa 6",
    "price": 5250,
    "created_at": "2016-09-06T19:09:49Z",
    "updated_at": "2016-09-06T19:09:49Z",
    "order_type": "PAYMENT",
    "merchant": "0010920335960001",
    "source_id": "4QeQD63ZeKsz",
    "items": [{
            "id": "0687f00a-0aea-48f7-85d0-64bc31977734",
            "sku": "0000001",
            "name": "Suco Detox",
            "unit_price": 800,
            "quantity": 1,
            "unit_of_measure": "EACH"
        },
        {
            "id": "cf561196-4e4c-436b-816b-80190e9a705f",
            "sku": "0000010",
            "name": "Suco de Uva",
            "unit_price": 450,
            "quantity": 5,
            "unit_of_measure": "EACH"
        },
        {
            "id": "16b4b10b-9967-477b-91a2-ecc02e6ff40c",
            "sku": "0000011",
            "name": "Suco de Tomate",
            "unit_price": 500,
            "quantity": 2,
            "unit_of_measure": "EACH"
        },
        {
            "id": "8500c747-1740-47cf-908a-3ab0f8b44193",
            "sku": "0000100",
            "name": "Suco de Abacaxi",
            "unit_price": 400,
            "quantity": 3,
            "unit_of_measure": "EACH"
        }
    ],
    "transactions": []
    }
}

GET - Consultar todos os Pedidos

Esse recurso é utilizado para obter a lista e as informações de todos os pedidos cadastrados no Order Manager.

Endpoint:

GET /orders/

Dados de entrada:

Campo Tipo Descrição Obrigatório
merchant_id query parameter Token que identifica o estabelecimento comercial Não
number query parameter Número do pedido Não
reference query parameter Referência definida na criação do pedido Não
status query parameter Status do pedido (ENTERED, RE-ENTERED, PAID, CANCELED e CLOSED) Não
terminal_number query parameter Número lógico Não
page query parameter número da página requistada (iniciando em 0) Não
page_size query parameter quantidade de items por página Não
last_query_date query parameter Data inicial Não

Exemplo de requisição:

GET

Dados de saída:

Campo Tipo Descrição Obrigatório
order Order Informações sobre o pedido consultado. Não

Exemplo de resposta:

{
    "id": "b4d8a7dc-4250-48a3-bf18-d560d4508368",
    "number": "0992f1d5-cee5-40d9-a964-8f4d6a9e4aa6",
    "reference": "LOJA SUCO #1",
    "status": "ENTERED",
    "notes": "Mesa 6",
    "price": 5250,
    "created_at": "2016-09-06T19:09:49Z",
    "updated_at": "2016-09-06T19:09:49Z",
    "order_type": "PAYMENT",
    "merchant": "0010920335960001",
    "source_id": "4QeQD63ZeKsz",
    "items": [{
            "id": "0687f00a-0aea-48f7-85d0-64bc31977734",
            "sku": "0000001",
            "name": "Suco Detox",
            "unit_price": 800,
            "quantity": 1,
            "unit_of_measure": "EACH"
        },
        {
            "id": "cf561196-4e4c-436b-816b-80190e9a705f",
            "sku": "0000010",

            "name": "Suco de Uva",
            "unit_price": 450,
            "quantity": 5,
            "unit_of_measure": "EACH"
        },
        {
            "id": "16b4b10b-9967-477b-91a2-ecc02e6ff40c",
            "sku": "0000011",
            "name": "Suco de Tomate",
            "unit_price": 500,
            "quantity": 2,
            "unit_of_measure": "EACH"
        },
        {
            "id": "8500c747-1740-47cf-908a-3ab0f8b44193",
            "sku": "0000100",
            "name": "Suco de Abacaxi",
            "unit_price": 400,
            "quantity": 3,
            "unit_of_measure": "EACH"
        }
    ],
    "transactions": []
}

Na consulta de pedidos, é possível informar os parâmetro acima citados, para identificar as ordens criadas conforme mostrado no exemplo abaixo:

https://api.cielo.com.br/order-management/v1/orders/?reference=EXEMPLO_DE_REFERENCE

PUT- Alterar status de um pedido

Esse recurso realiza a alteração do status de um pedido criado. O id do pedido é utilizado para realizar a chamada.

As possíveis alterações de status são:

Endpoint:

PUT /orders/?operation=

Dados de entrada:

Campo Tipo Descrição Obrigatório
id path parameter Identificador do pedido. Sim
operation query parameter Operação que deve ser executada. As possíveis operações são: place (Liberar um pedido para pagamento), pay (deixar um pedido como pago) e close (Fechar um pedido). Sim

Exemplo de requisição:

PUT

Dados de saída:

Campo Tipo Descrição Obrigatório
N/A      

Exemplo de resposta:

N/A

O retorno 200 dessa operação representa sucesso na requisição.

DELETE - Excluir um pedido

Esse recurso é utilizado para excluir um pedido do servidor do Order Manager. O id do pedido é utilizado para realizar a chamada.

Somente os pedidos com status DRAFT podem ser excluídos.

Endpoint:

DELETE /orders/

Dados de entrada:

Campo Tipo Descrição Obrigatório
id path parameter Identificador do pedido. Sim

Exemplo de requisição:

DELETE

Dados de saída:

Campo Tipo Descrição Obrigatório
N/A      

Exemplo de resposta:

N/A

O retorno 200 dessa operação representa sucesso na requisição.

POST - Adicionar Item/Itens em um Pedido

Esse recurso é utilizado para adicionar um ou mais itens em um pedido já criado. O id do pedido é utilizado para realizar a chamada.

Somente os pedidos com status DRAFT podem ter adição de itens.

Endpoint:

POST /orders//items

Dados de entrada:

Campo Tipo Descrição Obrigatório
id path parameter Identificador do pedido. Sim

Exemplo de requisição:

{
    "sku": "ede8f84a8b8645cb8e576a593c25c6ed",
    "name": "produto 1"
    "unit_price": 500,
    "quantity": 2,
    "unit_of_measure": "EACH"
}

Dados de saída:

Campo Tipo Descrição Obrigatório
N/A      

Exemplo de resposta:

N/A

O retorno 200 dessa operação representa sucesso na requisição.

GET - Consultar os itens de um pedido

Esse recurso é utilizado para consultar os itens presentes em um pedido. O id do pedido é utilizado para realizar a chamada.

Endpoint:

GET /orders//items

Dados de entrada:

Campo Tipo Descrição Obrigatório
id path parameter Identificador do pedido. Sim

Exemplo de requisição:

GET

Dados de saída:

Campo Tipo Descrição Obrigatório
orderItems Lista (OrderItem) Lista de itens de um pedido. Sim

Exemplo de resposta:

[{
        "id": 1,
        "sku": "ede8f84a8b8645cb8e576a593c25c6ed",
        "name": "produto 1"
        "unit_price": 500,
        "quantity": 2,
        "unit_of_measure": "EACH"
    },
    {
        "id": 2,
        "sku": "c2f5fb9a5542406e8b7917892329cda8",
        "name": "produto 1"
        "unit_price": 1500,
        "quantity": 3,
        "unit_of_measure": "EACH"
    }
]

PUT - Alterar um item em um pedido

Esse recurso permite alterar informações de um item de um pedido. O id do pedido e o id_item são utilizados para realizar a chamada.

Somente os pedidos com status DRAFT podem ter itens alterados.

Endpoint:

PUT /orders//items/

Dados de entrada:

Campo Tipo Descrição Obrigatório
id path parameter Identificador do pedido. Sim
id_item path parameter Identificador do item do pedido. Sim

Exemplo de requisição:

PUT /items/8484df74-eca6-4850-8e4c-35653af0bd31

{
    "sku": "ede8f84a8b8645cb8e576a593c25c6ed",
    "unit_price": 500,
    "quantity": 2,
    "unit_of_measure": "EACH"
}

Dados de saída:

Campo Tipo Descrição Obrigatório
N/A      

O retorno 200 dessa operação representa sucesso na requisição.

DELETE - Excluir Item de um pedido

Esse recurso é utilizado para excluir um item presente em um pedido. O id do pedido e o id_item são utilizados para realizar a chamada.

Somente os pedidos com status DRAFT podem ter itens alterados.

Endpoint:

DELETE /orders//items/

Dados de entrada:

Campo Tipo Descrição Obrigatório
id path parameter Identificador do pedido. Sim
id_item path parameter Identificador do item do pedido. Sim

Exemplo de requisição:

DELETE

Dados de saída:

Campo Tipo Descrição Obrigatório
N/A      

O retorno 200 dessa operação representa sucesso na requisição.

POST - Adicionar uma Transação

Recurso utilizado somente para Ambiente de Sandbox

Esse recurso permite que o desenvolvedor simule as transações financeiras, adicionando-as manualmente, sendo possível entender o funcionamento em uma Order.

Endpoint:

POST /orders//transactions

Dados de entrada:

Campo Tipo Descrição Obrigatório
Transactions Lista (Transaction) Informações da Transação Sim

Exemplo de requisição:

POST

{
  "external_id": "0b37f0d8-017a-4b11-91b9-ec1bb3e8fed3",
  "status": "CONFIRMED",
  "terminal_number": "12345678",
  "authorization_code": "008619",
  "number": "672836",
  "amount": 2000,
  "transaction_type": "PAYMENT",
  "paymentFields": {
    "primaryProductName": "CREDITO",
    "secondaryProductName": "A VISTA",
    "numberOfQuotas": 0
  },
  "card": {
  "brand": "VISA",
  "mask": "******5487"
  }
}

Dados de saída:

Campo Tipo Descrição Obrigatório
id number Identificador da Transação SIM
{
id: "00219dd0-1c13-46da-91e5-1c313f0d2e83"
}

Em ambiente de Sandbox, onde não há necessidade de ter uma Cielo LIO, e consequentemente não é necessário possuir o número do estabelecimento, faz total sentido fazer essa chamada deste recurso.

Já em ambiente de Produção quem irá criar as transactions é a própria Cielo LIO conforme os pagamentos forem efetuados.

GET - Consultar as transações de um pedido

Esse recurso é utilizado para obter as informações de todas as transações realizadas em um pedido. O id do pedido é utilizado para realizar a chamada. Em ambiente de produção, uma vez que um pagamento for realizado na Cielo LIO a transactions será adicionada automaticamente no pedido e então, será possível obter as informações do pagamento realizado a partir da chamada deste recurso.

Endpoint:

GET /orders//transactions

Dados de entrada:

Campo Tipo Descrição Obrigatório
id path parameter Identificador do pedido. Sim

Exemplo de requisição:

GET

Dados de saída:

Campo Tipo Descrição Obrigatório
transactions Lista (Transaction) Lista de transações de um pedido. SIM

Exemplo de resposta:

[
{
  "id": "442bbdbe-41c8-4e22-83ee-e1a849ed3cb5",
  "external_id": "0b37f0d8-017a-4b11-91b9-ec1bb3e8fed3",
  "status": "CONFIRMED",
  "terminal_number": "77102648",
  "authorization_code": "008619",
  "number": "672836",
  "amount": 2000,
  "transaction_type": "PAYMENT",
  "payment_fields": {
  "primary_product_name": "CREDITO",
  "secondary_product_name": "A VISTA",
    "number_of_quotas": 0
  },
  "card": {
    "brand": "VISA",
    "mask": "************3542"
  }
}
]

Cancelar Pedidos

O cancelamento de pedidos é realizado apenas através da Cielo LIO. Selecione a função Cancelamento de Vendas e digite o CNPJ da empresa (o mesmo que pode ser visualizado através do comprovante de pagamento). O sistema irá solicitar a senha do supervisor. Siga todos os passos indicados nas telas seguintes para o cancelamento da venda. É importante salientar que um cancelamento só pode ser realizado em ser valor integral.

GET - Consultar as transações canceladas de um pedido

Esse recurso é utilizado para obter as informações de todas as transações canceladas em um pedido. O id do pedido é utilizado para realizar a chamada. Em ambiente de produção, uma vez que o cancelamento for realizado na Cielo LIO a transactions será adicionada automaticamente no pedido juntamente com a transaction do pagamento original.

Endpoint:

GET /orders//transactions

Dados de entrada:

Campo Tipo Descrição Obrigatório
id path parameter Identificador do pedido. Sim

Exemplo de requisição:

GET

Dados de saída:

Campo Tipo Descrição Obrigatório
transactions Lista (Transaction) Lista de transações de um pedido. SIM

Exemplo de resposta:

[
  {
    "id": "46019c39-989e-46e9-aa7d-d8e9414396b4",
    "external_id": "95185.99407021694",
    "status": "CONFIRMED",
    "terminal_number": "77102648",
    "authorization_code": "008619",
    "number": "672837",
    "amount": 2000,
    "transaction_type": "CANCELLATION",
    "payment_fields": {
    "primary_product_name": "CREDITO",
    "secondary_product_name": "A VISTA",
    "number_of_quotas": 0
  },
    "card": {
      "brand": "VISA",
      "mask": "************3542"
    }
  },
  {
    "id": "442bbdbe-41c8-4e22-83ee-e1a849ed3cb5",
    "external_id": "0b37f0d8-017a-4b11-91b9-ec1bb3e8fed3",
    "status": "CONFIRMED",
    "terminal_number": "77102648",
    "authorization_code": "008619",
    "number": "672836",
    "amount": 2000,
    "transaction_type": "PAYMENT",
    "payment_fields": {
    "primary_product_name": "CREDITO",
    "secondary_product_name": "A VISTA",
    "number_of_quotas": 0
   },
    "card": {
    "brand": "VISA",
    "mask": "************3542"
    }
  }
]

Fluxo Básico Utilização API Order manager Cielo LIO

Abaixo você encontra um fluxo básico para enviar um pedido para a Cielo LIO utilizando a Integração Remota:

fluxo_basico

Notificações de Mudanças na Order

Para o cadastro da URL onde enviaremos as notificações Entre em contato conosco atráves do nosso time de Suporte a Desenvolvimento informando o seu endpoint

O maior motivo da disponibilização da API RESTful do Order Manager é permitir que aplicações parceiras se integrem à plataforma da Cielo na cloud. Porém, uma vez que as aplicações parceiras submetem pedidos, estes devem ser pagos localmente na própria Cielo LIO. Sendo assim, as aplicações parceiras precisam de uma forma de receber notificações de mudanças do status e das transações realizadas na Order.

Para tal, é necessário que o parceiro disponibilize um Backend RESTful, que irá receber as notificações seguindo o formato abaixo. Uma vez recebidas as informações, o Backend tem a liberdade de ser utilizado da forma mais adequada ao modelo de negócio.

Atenção: Os campos podem sofrer alterações sem aviso prévio, recomendamos que o PARSE do json seja dinâmico para aceitar novos valores em campos que ja enviamos hoje. Exemplo: O campo brand, caso surja novas bandeiras o seu backend precisa estar pronto para essa alteração.

POST - Notificação de Mudança de Status

A cada modificação de status em um pedido, o servidor do Order Manager envia, via comando, as informações para o Backend do parceiro.

Atenção: O backend do parceiro deve possuir o status anterior

Requisição do Order Manager

POST

Exemplo de informação enviada pelo Order Manager

{
	"id":"943f2276-5e2b-44bb-a68a-fd9b6418afa4",
	"items":[
		{
			"id":4389df04-ef19-4217-a969-22cb6e86d8cf",
			""sku"":"1",
			""name"":""TESTE CALLBACK"",
			""uuid"":"438232f04-ef19-4217-a969-22cb6e86d8cf",
			""details"":null,
			""order_id"":943f2276-5e2b-44bb-a68a-fd9b6418afa4",
			"quantity":1,
			"sku_type":null,
			"reference":null,
			"created_at":"2023-01-04T14:20:28Z",
			"unit_price":2392,
			"updated_at":"2023-01-04T14:20:24Z",
			"description":"TESTE CALLBACK",
			"unit_of_measure":"EACH"
		}
	],
	"notes":"TESTE",
	"price":2898,
	"number":"1078069",
	"status":"CLOSED",
	"reference":"REFERENCIA DO PEDIDO",
	"created_at":"2023-04-04T14:33:28Z",
	"updated_at":"2023-04-04T16:19:37Z",
	"transactions":[
		{
			"id":"d7d5cab9-f5b0-4a14-8593-9793a0aae193",
			"card":{
				"mask":"************3026",
				"brand":"MASTERCARD"
			},
			"uuid":"d7d5cab9-f5b0-4a14-8593-9793a0aae193",
			"amount":2392,
			"number":"044976",
			"status":"CONFIRMED",
			"created_at":"2023-04-04T14:34:24Z",
			"updated_at":"2023-04-04T16:19:37Z",
			"description":"",
			"external_id":"7d7d5cab9-f5b0-4a14-8593-9793a0aae193",
			"payment_fields":{
				"pan":"************3332",
				"v40Code":8,
				"typeName":"VENDA A DEBITO",
				"cityState":"SAO PAULO SP",
				"serviceTax":0,
				"statusCode":1,
				"boardingTax":0,
				"hasPassword":false,
				"hasWarranty":false,
				"productName":"DEBITO A VISTA",
				"requestDate":1680618831267,
				"changeAmount":0,
				"documentType":"J",
				"entranceMode":"691010107080",
				"hasSignature":false,
				"merchantCode":"0010225646149400",
				"merchantName":"NOME DO ESTABELECIMENTO",
				"applicationId":"cielo.launcher",
				"totalizerCode":92,
				"upFrontAmount":0,
				"creditAdminTax":0,
				"firstQuotaDate":0,
				"interestAmount":0,
				"isExternalCall":true,
				"numberOfQuotas":0,
				"applicationName":"cielo.launcher.ORDER",
				"avaiableBalance":0,
				"cardCaptureType":3,
				"finalCryptogram":"21FDEF2548665F36",
				"hasConnectivity":true,
				"merchantAddress":"QNM 17 CJH LT28",
				"paymentTypeCode":1,
				"firstQuotaAmount":0,
				"hasSentReference":false,
				"isFinancialProduct":true,
				"primaryProductCode":2000,
				"primaryProductName":"DEBITO",
				"hasSentMerchantCode":false,
				"cardLabelApplication":"Debito Nubank",
				"paymentTransactionId":"d7d5cab9-f5b0-4a14-8593-9793a0aae193",
				"secondaryProductCode":1,
				"secondaryProductName":"A VISTA",
				"originalTransactionId":"0",
				"receiptPrintPermission":1,
				"hasPrintedClientReceipt":false,
				"isDoubleFontPrintAllowed":false,
				"isOnlyIntegrationCancelable":false
			},
			"terminal_number":"238232",
			"transaction_type":"PAYMENT",
			"authorization_code":"123562"
		}
	]
}

POST - Notificação de Transação Realizada

A cada transação/pagamento realizada em um pedido, o servidor do Order Manager envia, via comando, as informações para o Backend do parceiro.

Requisição do Order Manager

POST

Exemplo de informação enviada pelo Order Manager

{
  "id": "f0f0f0f0-f0f0-f0f0-f0f0-f0f0f0f0f0f0",
  "order_id": "f0f0f0f0-f0f0-f0f0-f0f0-f0f0f0f0f0f0",
  "trasaction": {
    "id": "f0f0f0f0-f0f0-f0f0-f0f0-f0f0f0f0f0f0",
    "external_id": "f0f0f0f0-f0f0-f0f0-f0f0-f0f0f0f0f0f0",
    "description": "",
    "status": "CONFIRMED",
    "terminal_number": "###324625",
    "authorization_code": "0#1#133",
    "number": "##50##",
    "amount": "1",
    "transaction_type": "PAYMENT",
    "payment_fields": {
      "primary_product_name": "CREDITO",
      "secondary_product_name": "A VISTA",
      "number_of_quotas": "0"
    },
    "card": {
      "brand": "MASTERCARD",
      "mask": "************0566"
    }
  }
}

Notificações dos pedidos

Política de retentativa

Bloqueio de notificações para o EC

Desbloqueio de notificações para o EC

FAQ

Integrações

Integração Local

Essa é a integração de APP embarcado na LIO, utilizando os seus recursos: Pagamento, impressão e cancelamento. O seu Aplicativo instalado na LIO, se integra com o módulo de pedidos e pagamentos da Cielo LIO através do Cielo LIO Order Manager SDK.

É possível desenvolver utilizando Java e Kotlin e se integrar a nossa SDK e também utilizando linguagens hibridas com Deep Link, segue abaixo as respectivas documentações:

Documentação Integração Local Nativa.

Existe algum aplicativo de exemplo disponível?

Disponibilizamos no GitHub um aplicativo Sample de forma que o desenvolvedor consiga ver como funciona as chamadas para utilização do SDK. 

Download do aplicativo Sample.

É necessário colocar todos os itens do pedido na order?

A Cielo LIO funciona com o conceito de Pedido (Order). Assim, o procedimento deve ser sempre o exemplificado no SDK:

Se você tem uma variedade de produtos, é interessante criar itens separados para status de relatório na Cielo LIO do lojista.

Integração Remota

Na Integração Remota você utiliza o seu PDV(Sistema Desktop ou Web) para gerar os pedidos e enviar para a Cielo LIO efetuar o recebimento.   Documentação Integração Remota.

Preciso me cadastrar para realizar testes?

Sim, é fundamental o cadastro no portal para que você possa obter os tokens de acesso e testar as suas aplicações.

Integração Híbrida

O processo de integração híbrida é um pouco diferente da integração com o SDK (Integração Local). Para parceiros que não estão integrando com a linguagem nativa Java ou Kotlin a integração hibrida via deep link é uma opção.

Documentação Integração Hibrida.

O que eu preciso para colocar a integração em produção?

Se você já realizou todos os testes em Sandbox e deseja enviar pedidos para a Cielo LIO, entre em contato  conosco por meio de um ticket, preenchendo os dados necessários para receber os tokens de produção.

Acesse o link.

Também é necessário incluir a tag abaixo no arquivo AndroidManifest.xml do seu aplicativo para que seu aplicativo hibrido esteja disponível para todos os terminais:


<meta-data 
        android:name = "cs_integration_type"
        android:value="uri"/>

Preciso de uma máquina Cielo LIO para realizar os testes de integração local?

Não é necessário ter uma máquina Cielo LIO para realizar os testes.

A Cielo disponibiliza um aplicativo que simula o ambiente da Cielo LIO em qualquer dispositivo Android, permitindo que o desenvolvedor realize os testes nos métodos do SDK e faça o debug da sua aplicação durante o desenvolvimento e a integração com o Cielo LIO Order Manager SDK, sem a necessidade de possuir um hardware da Cielo LIO.

Download do Emulador: aqui no link

Preciso me cadastrar para realizar testes?

Sim, é fundamental o cadastro no portal para que você possa obter os tokens de acesso e testar as suas aplicações.

PIX

Como habilitar o pagamento PIX?

Para que seja possível efetivar um pagamento utilizando a forma de pagamento PIX, é necessário que o estabelecimento tenha esse tipo de pagamento habilitado.

Siga as instruções através desse link. Após essa habilitação via Site Cielo o estabelecimento estará apto a trabalhar com a modalidade PIX.

Duvidas Gerais Cielo LIO

Como posso adquirir um equipamento LIO para desenvolvimento ?

Os desenvolvedores que desejam obter uma Cielo LIO, deverão seguir os passos abaixo:

Clique Aqui para solicitar sua LIO.

Se meu aplicativo já funciona na Cielo LIO v2, ele vai funcionar também na Cielo LIO On?

Sim, se você já tem um aplicativo rodando na Cielo LIO V2, ele também funcionará na Cielo LIO On.

Como faço para integrar com a Cielo LIO?

Construimos um portal dedicado aos desenvolvedores para facilitar a integração da sua solução com a Lio -> http://desenvolvedores.cielo.com.br Nesse portal você pode:

Posso utilizar impressoras para conectar na Cielo LIO?

Sim. Impressoras com conexão via Bluetooth podem ser usadas pelo aplicativo do parceiro que está rodando na Cielo LIO para realizar a impressão de algum comprovante ou recibo necessário para a operação do negócio do parceiro/cliente.

Já existem parceiros que estão utilizando impressoras Bluetooth das marcas Zebra, Datex, Leopardo e outras para se integrar com a Cielo LIO! Todos os protocolos de comunicação e pareamento ficam sob responsabilidade do aplicativo do parceiro.

Quais são as formas de comunicação da Cielo LIO?

A Cielo LIO possui entrada para um SIM Card que permite realizar a comunicação via rede móvel 4G. Com fall-back para 3G e 2G e GPRS respectivamente. Além disso, ela possui como tecnologia de comunicação o Wi-Fi.

Quais são as conexões disponíveis na Cielo LIO?

As entradas USB da Cielo LIO são utilizadas única e exclusivamente para realizar o carregamento na bateria do aparelho. O Bluetooth da Cielo LIO pode ser utilizado para realizar a comunicação e a troca de informações com dispositivos externos.

Caso necessite trocar a máquina LIO, o catálogo cadastrado migra automaticamente para a nova máquina recebida?

Não migra. Para que o catálogo fique na nuvem, o cliente precisará de um aplicativo que tenha essa funcionalidade.

Como faço para atualizar/baixar aplicativos na LIO?

A Cielo Lio precisa estar conectada a internet 4G ou WI-FI

Com sua LIO em mãos siga as orientações abaixo:

Como faço para criar uma conta no site da Cielo?

Basta acessar o site Cielo http://www.cielo.com.br.

Minha LIO não está baixando um app

Verificar se sua LIO está com bateria acima de 50% e com 4G ou WI-FI. Se estiver com todos os requisitos citados acima e mesmo assim o app não baixou abra um chamado no portal dos desenvolvedores.

Dev Console - Cielo Store (Loja Publica) X Loja Privada

Fiz meu cadastro! O que devo fazer agora?

O desenvolvedor deverá escolher o tipo de Loja que deseja disponibilizar seu app.

Aplicativo de Loja Pública

Os aplicativos públicos são indicados para aqueles desenvolvedores e parceiros que desejam disponibilizar e escalar sua aplicação e permitir o download na Cielo LIO distribuídos nos estabelecimentos comerciais no Brasil via Vitrine da Cielo Store.

Aplicativo Privado na Loja Privada

Os aplicativos privados são indicados para desenvolvedores que querem permitir a distribuição de soluções personalizadas para um cliente específico. É necessário solicitar a criação da Loja Privada para então ser possível fazer o upload de um aplicativo de Loja Privada no Dev Console. A partir da Loja Privada criada, o desenvolvedor poderá publicar seu aplicativo no Dev Console selecionando sua loja, esta ação é essencial para realizar a distribuição de aplicativos privados. Clique aqui para solicitar a criação da Loja Privada.

Quais são os Browsers/Navegadores recomendados para Upload de aplicativo na Cielo Store?

Recomendamos utilizar o Google Chrome ou Mozilla Firefox preferencialmente para realizar o upload de aplicativos na Cielo Store.

Como faço para me cadastrar na Cielo?

É necessário a abertura de solicitação no Portal de Desenvolvedores > Suporte > Cielo Lio > Envie sua pergunta > Solicitação LIO DEV / Credenciamento EC Cielo.

Como posso liberar o meu aplicativo desenvolvido aos clientes Loja Privada?

Após o aplicativo passar pela etapa de certificação e ser aprovado pelo time especialista interno da Cielo, o próprio desenvolvedor será notificado e deverá promover o app para produção sendo assim todos os EC’s que tiverem associados a loja privada irão receber o aplicativo. Clique Aqui para solicitar a criação da Loja Privada e tirar suas dúvidas de como fazer a associação de um EC a uma loja privada.

Como posso liberar o meu aplicativo desenvolvido aos clientes Loja Publica?

Após o aplicativo passar pela etapa de certificação e ser aprovado pelo time especialista interno da Cielo, o próprio desenvolvedor será notificado e deverá promover o app para produção, sendo assim o mesmo ficará disponível na Loja Cielo Store para seus clientes.

Preciso ser cadastrado na Cielo para receber o pagamento dos aplicativos?

Sim, é necessário ter uma conta no site Cielo o pagamento é realizado em agenda financeira, precisa se cadastrar para ter um estabelecimento comercial (EC). Basta acessar o site Cielo http://www.cielo.com.br.

O que eu preciso para colocar meu aplicativo em produção?

Se seu aplicativo já foi certificado, você deve promovê-lo em Produção no Dev Console. Dev Console > Selecionar App > Selecionar Versão Certificada > Clicar em “Enviar para Produção”.

Como recebo o pagamento dos aplicativos?

O pagamento será feito em agenda financeira. É necessário ter uma conta no site Cielo. Caso não tenha, acesse o site Cielo http://www.cielo.com.br.

Tenho algum custo para colocar meu aplicativo na Cielo Store?

Não! A integração com a Cielo LIO é gratuita.

O que é a Cielo Store (Loja Publica)?

Toda vez que você precisa acessar o app do Banco ou daquela loja preferida ou de entrega de comida, você acessa a loja de aplicativos (Play Store ou App Store) do seu celular e realiza o download desse app, certo?

O mesmo acontece com a Cielo LIO. Através da Cielo STORE, os estabelecimentos comerciais podem escolher entre os mais de 50 apps disponíveis o aplicativo que melhor atende suas necessidades, seja unificar sistemas, realizar gestão de vendas, time e estoque etc. em um único clique.

Quais as etapas existentes para publicar meu aplicativo?

1 - Etapa de desenvolvimento

Após passar pelo upload de um novo aplicativo ou nova versão, o aplicativo fica automaticamente com o status “Em Desenvolvimento”. Nesse estágio o desenvolvedor consegue realizar testes do seu aplicativo em uma Cielo LIO e caso precise fazer alguma correção, basta publicar uma nova versão do aplicativo pelo Dev Console e então atualizar na Cielo LIO.

2 - Etapa de Certificação

Uma vez concluído os testes, o desenvolvedor envia o aplicativo para Certificação. Nessa etapa o time de Certificação da Cielo entra em ação e irá validar o fluxo de funcionamento do aplicativo de acordo com a sessão Critérios de Certificação de Aplicativos deste documento.

3 - Etapa de Produção

Assim que o aplicativo for aprovado na certificação, o desenvolvedor poderá promover para produção.

Como faço para mudar o nome do meu aplicativo?

Não é possível alterar o nome de um aplicativo. Caso seja necessário, é preciso criar um novo aplicativo com package name diferente e seguir o processo normal de upload de aplicativo na Cielo Store.

É possível editar as informações do meu aplicativo já publicado na Cielo Store?

Sim, é possível. Basta alterar as informações dentro do formulário no Dev Console, submeter uma nova versão e encaminhá-la para Certificação. Após o APP ser certificado e aprovado, é necessário promover o APP para produção e sendo assim o APP fica atualizado e disponível na Cielo Store.

Como faço para baixar aplicativos na Cielo LIO?

Com sua LIO em mãos siga as orientações abaixo:

Vale lembrar que sua LIO precisa está dentro dos requisitos bateria acima de 50% e com 4G ou WI-FI estável. A partir desse momento todos os aplicativos disponibilizados para essa LIO serão baixados e instalados na e ficarão visíveis na aba Apps.

Qual a diferença entre Loja Pública e Loja Privada?

Na Loja Pública, o aplicativo ficará disponível na Cielo Store para todos os clientes que possuem LIO. O cliente deverá escolher o aplicativo que deseja contratar e fazer o download. O modelo de Loja Privada a distribuição do aplicativo é feita pelo desenvolvedor. O aplicativo é instalado somente para o EC que está cadastrado em uma loja especifica. O aplicativo que está na Loja Privada não estará disponível na Loja Pública.

O que é a Loja Privada?

É uma solução desenvolvida para quem precisa de um sistema de gestão integrado personalizado. Integrando com a LIO ON você pode ter acesso a todas as informações em um lugar só, consegue fazer um gerenciamento de vendas, controle de estoque, fluxo de caixa, emissão de nota fiscal e muito mais. Para saber quais apps temos entre em contato conosco!

Como faço para cancelar a assinatura do aplicativo?

Como um aplicativo da loja pública é cobrado?

Os aplicativos são cobrados mensalmente diretamente na agenda financeira do EC que contratou o aplicativo.

Como faço para consultar minha comissão referente a aplicativos de Loja Publica?

Entre no Site Cielo com suas credenciais > Recebíveis > Detalhado > Selecionar uma ou duas datas. Serão exibidos os valores pagos e a data com a descrição “Repasse ao desenvolvedor sobre a compra de aplicativo no Cielo Store”. Cada linha exibida é referente a uma assinatura ativa.