logo
logo

Introdução

Essa integração permitirá que você processe pagamentos e gerencie estornos diretamente a partir do seu aplicativo, melhorando a experiência do seu usuário.
O objetivo principal é proporcionar a você a capacidade de:
  • Realizar Transações de Pagamento: Com o APP iFood Pago, você poderá efetuar pagamentos usando diversos métodos de pagamento (Débito, Crédito, Pix, Voucher).
  • Processar Estornos: Realizar estornos em transações quando necessário.
  • Acompanhar as transações: Receber informações sobre o status das transações conforme eles ocorrem em seu aplicativo.
  1. Iniciar uma transação a. Você deverá criar um deeplink com informações codificadas em Base64, como método de pagamento, valor da transação, ID e demais informações.b. A transação será capturada e processada pelo APP iFood Pago, que redirecionará para uma URL que você nos informará.
  2. Processar um estorno a. Para realizar um estorno, você precisa gerar um link semelhante com o ID da transação a ser estornada e demais informações.b. O App do iFood Pago redirecionará para a URL que você fornecer, com o status da transação após completar o estorno.
Compatibilidade do ArquivoA Maquinona usa a versão do Android 10 e tem algumas restrições/limitações impostas por PCI.
  • Tamanho do aplicativo: Seu aplicativo não pode ter mais de 200MB.
  • Versão do Aplicativo: Cada nova versão do aplicativo deve ter um número único.
PermissõesDescrição
ACCESS_BACKGROUND_LOCATIONPermite o acesso à localização em segundo plano.
ACCESS_COARSE_LOCATIONPermite o acesso à localização aproximada.
ACCESS_FINE_LOCATIONPermite o acesso à localização precisa.
ACCESS_MEDIA_LOCATIONPermite o acesso a qualquer localização geográfica armazenada na coleção compartilhada do usuário.
ACCESS_NETWORK_STATEPermite o acesso a informações sobre redes.
ACCESS_WIFI_STATEPermite o acesso a informações sobre redes Wi-Fi.
BATTERY_STATSPermite que o aplicativo colete estatísticas da bateria.
BLUETOOTHPermite que o aplicativo se conecte a dispositivos Bluetooth pareados.
BLUETOOTH_ADMINPermite que o aplicativo descubra e pareie dispositivos Bluetooth.
BROADCAST_STICKYPermite que o aplicativo transmita intents "sticky".
CAMERAPermite o acesso ao dispositivo de câmera.
FLASHLIGHTPermissão de lanterna obsoleta - Coberta pela permissão de CÂMERA.
FOREGROUND_SERVICEPermite que o aplicativo use Service.startForeground.
GET_ACCOUNTSPermite o acesso à lista de contas no Serviço de Contas.
INTERNETPermite que o aplicativo abra sockets de rede.
READ_EXTERNAL_STORAGEPermite que o aplicativo leia o armazenamento externo.
READ_PHONE_STATEPermite acesso somente à leitura ao estado do telefone, incluindo informações da rede celular atual, o status de qualquer chamada em andamento e uma lista de qualquer PhoneAccounts registrados no dispositivo.
RECEIVE_BOOT_COMPLETEDPermite que o aplicativo receba o Intent.ACTION_BOOT_COMPLETED que é transmitido após o sistema terminar de inicializar.
RECORD_AUDIOPermite que o aplicativo grave áudio.
SET_ALARMPermite que o aplicativo transmita um Intent para definir um alarme para o usuário.
USE_BIOMETRICPermite que o aplicativo use modalidades biométricas suportadas pelo dispositivo.
USE_FINGERPRINTEsta permissão foi descontinuada no nível de API 28. Os aplicativos devem solicitar USE_BIOMETRIC em vez disso.
VIBRATEPermite o acesso ao recurso de vibração.
WAKE_LOCKPermite o uso de PowerManager WakeLocks para manter o processador ativo ou a tela acesa.
WRITE_EXTERNAL_STORAGEPermite que o aplicativo escreva no armazenamento externo.
Qualquer aplicativo que peça permissões diferentes das listadas acima não funcionará no nosso hardware.Além disso:
  • Aplicativos que funcionam como "launchers" não são permitidos.
  • Não é permitido usar a flag testOnly no arquivo AndroidManifest.xml.
  • Não é permitido criar serviços de acessibilidade.
  • O modo de depuração (debug) não está disponível nos terminais.
  • Não há navegadores instalados nos terminais.
  • Os terminais não têm Google Play Services instalados.
  • Não é possível reverter para versões anteriores de um aplicativo; você pode apenas atualizá-lo ou desinstalá-lo.
  • Prefira soluções que não usem WebView, mas o terminal é compatível com a versão 123.0.6312.0.

Compatibilidade do Aplicativo

A nossa Maquinona roda uma versão do Android 10 com algumas limitações impostas por PCI.• Sua aplicação não pode ter mais de 200 mb; • A versão de cada release precisa ser única; • Lista com as permissões compatíveis com o terminal:
PermissionDescription
ACCESS_BACKGROUND_LOCATIONAllows access to location in the background.
ACCESS_COARSE_LOCATIONAllows access to approximate location.
ACCESS_FINE_LOCATIONAllows access to precise location.
ACCESS_MEDIA_LOCATIONAllows access to any geographic locations persisted in the user's shared collection.
ACCESS_NETWORK_STATEAllows access to information about networks.
ACCESS_WIFI_STATEAllows access to information about Wi-Fi networks.
BATTERY_STATSAllows the app to collect battery statistics.
BLUETOOTHAllows the app to connect to paired Bluetooth devices.
BLUETOOTH_ADMINAllows the app to discover and pair Bluetooth devices.
BROADCAST_STICKYAllows the app to broadcast sticky intents.
CAMERAAllows access to the camera device.
FLASHLIGHTDeprecated flashlight permission - Covered by CAMERA.
FOREGROUND_SERVICEAllows the app to use Service.startForeground.
GET_ACCOUNTSAllows access to the list of accounts in the Accounts Service.
INTERNETAllows the app to open network sockets.
READ_EXTERNAL_STORAGEAllows the app to read from external storage.
READ_PHONE_STATEAllows read-only access to phone state, including the current cellular network information, the status of any ongoing calls, and a list of any PhoneAccounts registered on the device.
RECEIVE_BOOT_COMPLETEDAllows the app to receive the Intent.ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting.
RECORD_AUDIOAllows the app to record audio.
SET_ALARMAllows the app to broadcast an Intent to set an alarm for the user.
USE_BIOMETRICAllows the app to use device-supported biometric modalities.
USE_FINGERPRINTThis permission was deprecated in API level 28. Apps should request USE_BIOMETRIC instead.
VIBRATEAllows access to the vibration feature.
WAKE_LOCKAllows using PowerManager WakeLocks to keep the processor from sleeping or the screen from dimming.
WRITE_EXTERNAL_STORAGEAllows the app to write to external storage.
Qualquer permissão solicitada fora dessa lista torna o APP inválido e incapaz de rodar no hardware. • Apps categorizados como Launchers não são permitidos. • Flag testOnly no AndroidManifest.xml, não é permitido. • Criação de serviços de acessibilidade não são permitidos. • Os terminais não tem o modo debug. • Não existem browsers instalados no terminal. • Os terminais não possuem Google Play Services instalados. • Não é possível fazer downgrade de uma aplicação, você pode atualizá-lo ou efetuar a desinstalação. • De preferências para soluções não baseadas em WebView, de qualquer forma este terminal é compatível com a versão 123.0.6312.0

Realizar venda

Para iniciar uma transação, seu aplicativo deve chamar o seguinte deeplink:
https://portal.ifood.com.br/make-payment?content={conteudo_base64}
O parâmetro content deve ser um JSON codificado em Base64, conforme o contrato abaixo:
{
  "paymentMethod": "DEBIT", //STRING – DEBIT OR CREDIT OR PIX OR VOUCHER
  "value": 2000, //INTEIRO – VALOR EM CENTAVOS
  "transactionId": "", //STRING ID DA TRANSAÇÃO (PARA FINS DE CONTROLE)
  "tableId": "", //STRING NÚMERO DE MESA QUE ESTÁ TRANSACIONANDO
  "printReceipt": true, //BOOLEAN QUE DEFINE A IMPRESSÃO OU NÃO DO COMPROVANTE
  "urlToReturn": "", //NULLABLE
  "sendResultInSameIntent": false //BOOLEAN QUE DEFINE SE O RETONRO PARA O APP SERÁ VIA UMA NOVA INTENT OU VIA INTENT RESULT
}
  • paymentMethod: Método de pagamento que será processado. Valores possíveis: DEBIT, CREDIT, PIX, VOUCHER.
  • value: Valor da transação em centavos. Exemplo: Para R$ 20,00, envie 2000.
  • transactionId: ID da transação do seu sistema interno, retornado após a finalização do pagamento.
  • tableId: Número da mesa que está realizando o pagamento. Este valor é opcional e retornado após a transação.
  • printReceipt: Define se o comprovante será impresso pelo POS.
  • urlToReturn: URL para onde o APP da Maquinona irá redirecionar após a transação, enviando as informações do resultado. Ex:
    • https://anota.ai/payment-result?result= ➔ Aqui é definido o deeplink que o APP da Maquinona irá chamar quando finalizar a transação. No exemplo acima, o dentro do result será enviado um JSON em Base64 com as informações definidas via contrato.
  • sendResultInSameIntent: Define se o retorno para o APP que está chamando será via Intent Result.
https://portal.ifood.com.br/make-payment?content=eyAicGF5bWVudE1ldGhvZCI6ICJERUJJVCIsICJ2YWx1ZSI6IDIwMDAwLCAidHJhbnNhY3Rpb25JZCI6ICJ0cmFuc2FjdGlvbklkUmV0b3JuYWRvIiwgInRhYmxlSWQiOiAidGFibGVJZCIsICJwcmludFJlY2VpcHQiOiB0cnVlLCAidXJsVG9SZXR1cm4iOiAiaHR0cHM6Ly9hbm90YS5haS5jb20uYnIvcGF5bWVudC1yZXN1bHQ/cmVzdWx0PSIsICJzZW5kUmVzdWx0SW5TYW1lSW50ZW50IjogZmFsc2V9
O conteúdo do Base64 do exemplo acima tem o seguinte conteúdo:
{
  "paymentMethod": "DEBIT",
  "value": 20000,
  "transactionId": "transactionIdRetornado",
  "tableId": "tableId",
  "printReceipt": true,
  "urlToReturn": "https://anota.ai.com.br/payment-result?result=",
  "sendResultInSameIntent": false
}
Após a finalização da transação, o APP da Maquinona redirecionará para a URL especificada em urlToReturn, enviando um JSON em Base64 com o resultado da transação:
{
  "transactionIdAnotaAi": "", //STRING ID DA TRANSAÇÃO DO ANOTA AI
  "tableIdAnotaAi": "", //STRING NÚMERO DE MESA QUE ESTÁ TRANSACIONANDO
  "transactionIdAdyen": "", //nullable
  "status": "", //STRING - SUCCESS OR ERROR
  "deviceSerialNumber": "000158224211090",
  "cardBrand": "", //STRING - BANDEIRA DO CARTÃO UTILIZADO PARA REALIZAR O PAGAMENTO
  "errorReason": "" //STRING - RAZÃO DO POSSÍVEL ERRO DA TRANSAÇÃO
}
  • transactionIdAnotaAi: ID da transação retornado do parâmetro transactionId.
  • tableIdAnotaAi: Número da mesa retornado do parâmetro tableId.
  • transactionIdAdyen: ID da transação processada na Adyen (opcional).
  • status: Status da transação, podendo ser SUCCESS ou ERROR.
  • deviceSerialNumber: Número de série do POS que realizou a transação.
  • cardBrand: Bandeira do cartão utilizado na transação.
  • errorReason: Razão do possível erro na transação.
A informação transactionIdAdyen é utilizada para realizar o estorno da transação. Se o seu sistema contempla essa funcionalidade, é necessário que armazene esse valor para posteriormente enviar para o App da Maquinona no Fluxo de Estorno
https://anota.ai/payment-result?result=eyJ0cmFuc2FjdGlvbklkQW5vdGFBaSI6InRyYW5zYWN0aW9uSWRBbm90YUFpIiwidGFibGVJZEFub3RhQWkiOiJ0YWJsZUlkQW5vdGFBaSIsInRyYW5zYWN0aW9uSWRBZHllbiI6IjFjNzRmMGU1LTNmNTctNGI4Ni05MGMxLTlkZjZmZmM4YmE3ZiIsInN0YXR1cyI6IlNVQ0NFU1MiLCAiZGV2aWNlU2VyaWFsTnVtYmVyIjogIjAwMDE1ODIyNDIxMTA5MCIsICJjYXJkQnJhbmQiOiAiTUMiLCAiZXJyb3JSZWFzb24iOiBudWxsfQ==
O conteúdo Base64 decodificado do exemplo acima é:
{
  "transactionIdAnotaAi": "transactionIdAnotaAi",
  "tableIdAnotaAi": "tableIdAnotaAi",
  "transactionIdAdyen": "1c74f0e5-3f57-4b86-90c1-2f6ffc8ba7f",
  "status": "SUCCESS",
  "deviceSerialNumber": "000158224211090",
  "cardBrand": "MC",
  "errorReason": null
}
  1. O aplicativo do terceiro chama o deeplink do APP da Maquinona.
  2. O APP da Maquinona processa a transação.
  3. Após a transação, o APP da Maquinona redireciona para a URL especificada com o resultado da transação.

Realizar estorno

Para iniciar uma transação, seu aplicativo deve chamar o seguinte deeplink:
https://portal.ifood.com.br/make-refund?content={conteudo_base64}
O parâmetro content deve ser um JSON codificado em Base64, conforme o contrato abaixo:
{
  "transactionIdAdyen": "125a0b07-160c-4365-b687-e3b8136851fd", //STRING
  "printReceipt": true, //BOOLEAN QUE DEFINE A IMPRESSÃO OU NÃO DO COMPROVANTE
  "urlToReturn": "https://anota.ai/refund-result?result=", //STRING
  "sendResultInSameIntent": false //BOOLEAN QUE DEFINE SE O RETONRO PARA O APP SERÁ VIA UMA NOVA INTENT OU VIA INTENT RESULT
}
  • transactionIdAdyen: ID da transação processada pela Maquinona e retornada para o seu sistema ao final da ação de pagamentotransação de pagamento.
  • printReceipt: Define se o comprovante será impresso pelo POS.
  • urlToReturn: URL para onde o APP da Maquinona irá redirecionar após a transação, enviando as informações do resultado. Ex:
    • https://anota.ai/refund-result?result= → Aqui é definido o deeplink que o APP da Maquinona irá chamar quando finalizar o estorno. No exemplo acima, o dentro do result será enviado um JSON em Base64 com as informações definidas via contrato.
  • sendResultInSameIntent: Define se o retorno para o APP que está chamando será via Intent Result.
https://portal.ifood.com.br/make-refund?content=eyJ0cmFuc2FjdGlvbklkQWR5ZW4iOiIxMjVhMGIwNy0xNjBjLTQzNjUtYjY4Ny1lM2I4MTM2ODUxZmQiLCJwcmludFJlY2VpcHQiOnRydWUsInVybFRvUmV0dXJuIjoiaHR0cHM6Ly9hbm90YS5haS9yZWZ1bmQtcmVzdWx0P3Jlc3VsdD0iLCAic2VuZFJlc3VsdEluU2FtZUludGVudCI6IGZhbHNlfQ==
O conteúdo do Base64 do exemplo acima tem o seguinte conteúdo:
{
  "transactionIdAdyen": "125a0b07-160c-4365-b687-e3b8136851fd",
  "printReceipt": true,
  "urlToReturn": "https://anota.ai/refund-result?result=",
  "sendResultInSameIntent": false
}
Após a finalização da transação, o APP da Maquinona redirecionará para a URL especificada em urlToReturn, enviando um JSON em Base64 com o resultado da transação:
{
  "status": "", //STRING - SUCCESS OR ERROR
  "deviceSerialNumber": "000158224211090"
}
  • status: Status da transação, podendo ser SUCCESS ou ERROR.
  • deviceSerialNumber: Número de série do POS que realizou a transação.
https://anota.ai/refund-result?result=eyJzdGF0dXMiOiAiU1VDQ0VTUyIsICJkZXZpY2VTZXJpYWxOdW1iZXIiOiAiMDAwMTU4MjI0MjExMDkwIn0=
O conteúdo Base64 decodificado do exemplo acima é:
{
  "status": "SUCCESS",
  "deviceSerialNumber": "000158224211090"
}

Impressão de arquivos

A impressão de qualquer arquivo no POS ser dará em duas etapas:
  1. Na primeira etapa haverá uma requisição para obter um token de autorização para que as impressões possam ser realizadas.
  2. Na segunda etapa, deverá ser realizada uma chamada para nossa API onde deverá ser enviado o token de autorização junto com a imagem em base64 que poderá ser impressa.
O token deve ser gerado a todo dia que deseja realizar uma nova impressão. O token gerado ontem não poderá ser utilizado hoje. O token tem um prazo de expiração de 24h.
Desenho de como funcionará a integração.Abaixo teremos uma descrição mais detalhada de cada uma destas etapas.
A primeira parte será realizada via comunicação entra APP`s. O seu APP deverá chamar o APP da Maquinona para que este obtenha o token de autorização.Para iniciar uma transação, seu aplicativo deve chamar o seguinte deeplink:
https://portal.ifood.com.br/print-file?content={conteudo_base64}
O parâmetro content deve ser um JSON codificado em Base64, conforme o contrato abaixo:
{
  "integrationApp": "integrationApp", //STRING
  "urlToReturn": "https://anota.ai/print-result?result=", //STRING
  "sendResultInSameIntent": false //BOOLEAN QUE DEFINE SE O RETONRO PARA O APP SERÁ VIA UMA NOVA INTENT OU VIA INTENT RESULT
}
  • integrationApp: ID da transação processada pela Maquinona e retornada para o seu sistema ao final da ação de pagame.
  • urlToReturn: URL para onde o APP da Maquinona irá redirecionar após a transação, enviando as informações do resultado. Ex:
    • https://anota.ai/print-result?result= → Aqui é definido o deeplink que o APP da Maquinona irá chamar quando finalizar o estorno. No exemplo acima, o dentro do result será enviado um JSON em Base64 com as informações definidas via contrato.
  • sendResultInSameIntent: Define se o retorno para o APP que está chamando será via Intent Result.
https://portal.ifood.com.br/print-file?content=eyJpbnRlZ3JhdGlvbkFwcCI6IkFub3RhQWkiLCJ1cmxUb1JldHVybiI6Imh0dHBzOi8vYW5vdGEuYWkvcHJpbnQtYXV0aG9yaXphdGlvbj9yZXN1bHQ9IiwgInNlbmRSZXN1bHRJblNhbWVJbnRlbnQiOiBmYWxzZX0=
O conteúdo do Base64 do exemplo acima tem o seguinte conteúdo:
{
  "integrationApp": "AnotaAi",
  "urlToReturn": "https://anota.ai/refund-result?result=",
  "sendResultInSameIntent": false
}
Após a finalização da transação, o APP da Maquinona redirecionará para a URL especificada em urlToReturn, enviando um JSON em Base64 com o resultado da transação:
{
  "status": "", //STRING - SUCCESS OR ERROR
  "hash": "token",
  "createAt": "2025-03-23 18:13:51.070184",
  "deviceSerialNumber": "000158224211090"
}
  • status: Status da transação, podendo ser SUCCESS ou ERROR.
  • hash: Token que será utilizado para realizar a impressão do arquivo na segunda etapa;
  • createAt: Hora de criação do token em nossos servidores (Vale lembrar que temos um fuso +3h, em relação ao horário de Brasília);
  • deviceSerialNumber: Número de série do POS que realizou a transação.
https://anota.ai/print-authorization?result=eyJzdGF0dXMiOiJTVUNDRVNTIiwiaGFzaCI6IjBmMDA2ZmIzNjRlMDY1NmExMDE4ZDMyZmRhZjQwYmMxOWMzOTZlYjE3YTE5ODc2NTAxZDcyNzExYzdlNGQxZjMiLCJjcmVhdGVBdCI6ICIyMDI1LTAzLTIzIDE4OjEzOjUxLjA3MDE4NCIsICJkZXZpY2VTZXJpYWxOdW1iZXIiOiIwMDAxNTgyMjQyMTEwOTAifQ==
O conteúdo Base64 decodificado do exemplo acima é:
{
  "status": "SUCCESS",
  "hash": "0f006fb364e0656a1018d32fdaf40bc19c396eb17a19876501d72711c7e4d1f3",
  "createAt": "2025-03-23 18:13:51.070184",
  "deviceSerialNumber": "000158224211090"
}
Uma vez obtida o token de autorização, poderá ser realizada uma chamada para nossa API passando as informações para que a impressão possa ser realizada. Deverá realizar do seguinte modo:
POST:
https://movilepay-api.ifood.com.br/ifoodpay/mobile/api/print/file
O body da request deve conter as seguintes informações:
{
  "authorizationHash": "TOKEN", //STRING
  "contentBase64": "IMAGEM EM BASE 64" //STRING
}
  • authorizationHash: Deverá ser utilizado o token obtido no passo anterior, onde o APP da Maquinona retornou;
  • contentBase64: Imagem que deseja imprimir em Base64.
    • Vale ressaltar que a imagem deverá atender alguns requisitos da Adyen, quando a resolução como o padrão da imagem: Documentação sobre padrão de impressão da Adyen → Padrão de impressão da Adyen

Emulador para testes

  1. Introdução
  • O que é o Emulador "Small Phone API 30":
    • O emulador "Small Phone API 30" é uma ferramenta que simula um dispositivo móvel com Android 11, usada para testar a aplicação em um ambiente próximo ao de produção. Ele permite que os desenvolvedores validem a funcionalidade e a compatibilidade do aplicativo antes de implantá-lo nos dispositivos físicos.
  1. Por que Usar o Emulador
  • Benefícios para o Parceiro:
    • Testar a aplicação em um ambiente seguro e controlado.
    • Simular o comportamento do aplicativo como se estivesse rodando no dispositivo físico (smartPOS).
    • Detectar e corrigir problemas de compatibilidade e funcionalidade antecipadamente.
  1. Download e Instalação do Android Studio
  • Passo a Passo para Baixar o Android Studio:
    • Acesse o site oficial do Android Studio: Download Android Studio & App Tools - Android Developer
    • Faça o download da versão mais recente do Android Studio para o seu sistema operacional (Windows, macOS ou Linux).
    • Siga as instruções de instalação fornecidas no site para configurar o ambiente de desenvolvimento.
  1. Configuração do Emulador "Small Phone API 30"
  • Criando o Dispositivo Virtual (AVD):
    • Abra o Android Studio e navegue até o "AVD Manager" (Ferramentas > Gerenciador de Dispositivos Virtuais).
    • Clique em "Create Virtual Device" e selecione um dispositivo com tela pequena, por exemplo, "Small Phone".
    • Configure o sistema operacional Android para API 30 (Android 11).
    • Ajuste as configurações, como a orientação (portrait) e resolução de tela, conforme as especificações recomendadas.
    • Clique em "Finish" para concluir a configuração do emulador.
  1. Testando a Aplicação no Emulador
  • Passos para Instalar o APK no Emulador:
    • Inicie o emulador "Small Phone API 30" no Android Studio.
    • Arraste e solte o arquivo APK no emulador ou use a linha de comando para instalar o aplicativo.
    • Execute os testes e verifique o funcionamento conforme as diretrizes.
  1. Orientações Adicionais
  1. Suporte
  • Contato para Suporte Técnico:
    • Caso o parceiro encontre dificuldades para configurar ou usar o emulador, entre em contato com o time de suporte técnico através do e-mail integracaoifoodpago@ifood.com.br ou acesse o portal de ajuda.
  • Contato para Suporte Técnico:
    • Caso o parceiro encontre dificuldades para configurar ou usar o emulador, entre em contato com o time de suporte técnico através do e-mail integracaoifoodpago@ifood.com.br ou acesse o portal de ajuda.

FAQ

Link para FAQ