# Fluxo da Transação

Esta página detalha o fluxo completo da transação para a integração Get Smart App2App, desde a iniciação até a conclusão.

## Visão Geral

A integração App2App segue um modelo síncrono de requisição-resposta onde sua aplicação inicia uma transação, a aplicação Get Smart a processa e o controle retorna à sua aplicação com o resultado.

## Ciclo de Vida da Transação

Uma transação completa passa por quatro fases distintas. Compreender cada fase ajuda a implementar o tratamento de erros adequado e a gerenciar a experiência do usuário de forma eficaz.

**Fase 1: Inicialização**

Sua aplicação prepara a requisição de transação reunindo os dados (valor, tipo, número do pedido), criando um Intent com o nome da ação específica e adicionando os parâmetros necessários como extras do Intent.

**Fase 2: Lançamento**

Sua aplicação lança o Intent usando `startActivityForResult` e transfere o controle para a aplicação Get Smart. Se o app Get Smart não estiver instalado, uma `ActivityNotFoundException` é lançada e deve ser tratada por sua aplicação.

**Fase 3: Processamento**

A aplicação Get Smart assume o controle para exibir a interface de pagamento, ler o cartão, comunicar-se com o gateway de pagamento para autorização, gerenciar a impressão de comprovantes e preparar o Intent de resultado com os detalhes da transação.

**Fase 4: Conclusão**

O controle retorna à sua aplicação através do callback `onActivityResult`. Sua aplicação verifica o código de requisição, checa o código de resultado para determinar se o fluxo foi concluído ou cancelado, analisa os dados de resposta dos extras do Intent e processa o desfecho de acordo com sua lógica de negócio.

## Diagrama de Fluxo Detalhado

O diagrama a seguir ilustra o fluxo completo da transação, mostrando a sequência de operações e a troca de dados entre sua aplicação e a aplicação Get Smart.

![](https://static-devportal-ux.sensedia-eng.com/Pagonxt/staging/documentations/diagram-transaction-flow-1773249436988-em2wphse.png)

## Códigos de Resultado

Os resultados das transações são comunicados através de dois níveis de códigos de status: os códigos de resultado padrão do Android indicam se o fluxo foi concluído, enquanto os valores de resultado específicos da transação indicam se o pagamento foi autorizado.

**Códigos de resultado Android**

O parâmetro `resultCode` padrão do Android indica o status de conclusão:

| Código de Resultado | Significado                                                                         |
| ------------------- | ----------------------------------------------------------------------------------- |
| `RESULT_OK`         | O app Get Smart concluiu seu fluxo e retornou um resultado (autorização ou negação) |
| `RESULT_CANCELED`   | O usuário cancelou a operação ou o app abortou o fluxo                              |

<Callout type="warning">

`RESULT_OK` **não** significa que o pagamento foi autorizado. Significa apenas que o app Get Smart concluiu seu processo. Você deve verificar o extra `RESULT` para determinar o status da autorização.

</Callout>

**Valores de Resultado da Transação**

O extra `RESULT` no Intent de resposta contém o desfecho da transação:

| Valor          | Significado                                         |
| -------------- | --------------------------------------------------- |
| `"AUTORIZADA"` | O pagamento foi autorizado com sucesso pelo gateway |
| `"DENEGADA"`   | O pagamento foi negado ou falhou                    |

## Tipos de Transação

A integração App2App suporta dois tipos principais de transação, cada um com parâmetros e casos de uso específicos.

**Venda (Venta)**

Uma transação de compra padrão onde o valor é cobrado no cartão do cliente e um código de autorização é retornado em caso de sucesso. Defina o parâmetro de tipo como `1`.

**Estorno/Devolução (Devolución)**

Uma devolução ou reversão de uma transação anterior. O valor do estorno pode ser parcial ou total. Defina o parâmetro de tipo como `2` e inclua o parâmetro `original_order` com o número do pedido da transação que está sendo estornada.

## Manuseio de Comprovantes

A impressão de comprovantes é gerenciada inteiramente pela aplicação Get Smart, eliminando a necessidade de sua aplicação gerenciar hardware de impressão ou formatação de recibos.

**Comprovante do Estabelecimento** - Impresso automaticamente após uma transação bem-sucedida. Contém detalhes da transação e assinaturas necessárias para manutenção de registros.

**Comprovante do Cliente** - O app Get Smart apresenta uma opção para imprimir o comprovante do cliente. O cliente ou o estabelecimento podem escolher se desejam imprimir.

O callback `onActivityResult` é acionado apenas após a conclusão de todos os fluxos de impressão.

## Cenários de Erro

Compreender os cenários de erro comuns ajuda você a implementar um tratamento de erros robusto e fornecer feedback claro aos usuários quando as transações não puderem ser concluídas.

**Aplicação não instalada** - Se o app Get Smart não estiver instalado, o Android lança uma `ActivityNotFoundException`. Sua aplicação deve capturar essa exceção e exibir uma mensagem apropriada ao usuário.

**Transação Negada** - Se o gateway de pagamento negar a transação, o `resultCode` será `RESULT_OK`, o extra `RESULT` será `"DENEGADA"`, e os extras `RESPCODE` e `ERROR_MSG` conterão os detalhes da negação.

**Cancelamento pelo Usuário** - Se o usuário cancelar a transação, o `resultCode` será `RESULT_CANCELED`. Nenhuma transação foi tentada e não ocorreu autorização ou negação.

## Considerações de Tempo

Os tempos de processamento das transações variam com base em diversos fatores, e sua aplicação deve ser projetada para lidar com essas variações de forma graciosa.

**Duração da Transação** - O tempo varia com base no método de leitura do cartão (chip é mais lento que por aproximação), conectividade de rede, impressão de comprovantes e tempo de interação do usuário. Sua aplicação não deve expirar (timeout) enquanto aguarda o resultado. O callback `onActivityResult` do Android sempre será acionado quando o app Get Smart concluir.

**Ciclo de Vida da Activity** - Enquanto o app Get Smart está ativo, sua Activity pode ser pausada ou parada, e o sistema pode recuperar recursos se a memória estiver baixa. Certifique-se de que sua Activity possa lidar adequadamente com a recriação após a conclusão do pagamento.

## Próximos Passos

* Saiba como criar um pagamento de etapa única em [Criar um Pagamento de Etapa Única](/pt/get-smart/get-smart-app2app/transaction-guides/transactions/create-a-single-step-payment)
* Entenda como tratar resultados em [Tratar Resultados da Transação](/pt/get-smart/get-smart-app2app/transaction-guides/transactions/handle-transaction-results)
* Revise todos os parâmetros de resposta em [Referência de Parâmetros de Resposta](https://docs.globalgetnet.com/pt/products/local-processor-spain/get-smart-app2app?doc=getsmart-app2app-response-api-reference)