# Crie um pagamento em etapa única

Este guia mostra como criar um fluxo de pagamento automatizado que reduz a interação do usuário. Você pré-configura os parâmetros de pagamento e pula as telas de seleção manual. Com um pagamento em etapa única, o terminal processa a transação rapidamente, com o mínimo de toques do usuário.

## Antes de começar

Antes de começar, confirme que você tem:

* Leitura de como executar uma [chamada de Polling](/pt/app2app/first-steps-a2a/create-polling-guide) (`getnet://payment/v1/polling`) antes de iniciar a transação, para garantir que não há transações pendentes nem processos travados.
* Getnet payment app instalado no terminal Android.
* Um `callerId` único para correlacionar a requisição com a resposta.

<Callout type="warning">

pagamentos em etapa única funcionam melhor quando combinados com o modo de operação calculado (`operationMode = "1"`), no qual sua aplicação faz todos os cálculos de juros antes de enviar a requisição.

</Callout>

## Passo 1: configure e envie o Intent de pagamento

Para criar um fluxo em etapa única, configure o Intent com todos os parâmetros obrigatórios e as flags de automação. A tabela abaixo descreve todos os parâmetros que você pode usar:

| Parâmetro | Tipo | Obrigatório | Descrição |
| :--- | :--- | :--- | :--- |
| `amount` | String | Sim | Valor da transação (com duas casas decimais implícitas, ex.: "10000" = \$100.00) |
| `originalAmount` | String | Sim | Valor em moeda local para realizar a transação. |
| `tip` | String | Não | Valor da gorjeta a ser somado ao total da transação. A representação decimal é a mesma do parâmetro amount (ex.: "500" = \$5.00) |
| `waiterCode` | String | Condicional | Código do garçom para atribuição da gorjeta. Obrigatório quando há gorjeta. |
| `receiptCode` | String | Sim | Código de identificação a ser impresso no comprovante |
| `callerId` | String | Sim | Identificador único para correlacionar a requisição com a resposta |
| `paymentMethod` | String | Não | `"1"` para cartão, `"2"` para QR Code. Pula a tela de seleção do meio de pagamento. |
| `installments` | String | Não | Número de parcelas desejado (somente cartão de crédito) |
| `planId` | String | Não | ID do plano de parcelamento. Verifique os planos disponíveis no seu mercado. |
| `interest` | String | Não | Indica se o plano de parcelamento tem juros (`"true"`) ou é sem juros (`"false"`) |
| `operationMode` | String | Não | `"1"` para modo calculado (sua aplicação trata os juros), `"0"` para manual (o terminal aplica as regras de negócio). Consulte o guia Estratégia de cálculo de juros. |
| `skipConfirmation` | String | Não | Defina como `"true"` para pular a tela de revisão de parcelas e juros. `"false"` (padrão) exibe a tela normalmente - o usuário precisa interagir para prosseguir. |
| `skipReceipt` | String | Não | Defina como `"true"` para ocultar a tela de visualização do comprovante do cliente após a aprovação. `"false"` (padrão) exibe a tela normalmente. |
| `allowPrintCurrentTransaction` | String | Não | Defina como `"true"` para a Getnet cuidar da impressão do comprovante (comportamento padrão). Consulte o guia Responsabilidade de impressão. |

Veja um exemplo básico com os parâmetros obrigatórios:

```kotlin
private val REQUEST_CODE = 1001

val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/payment"))
intent.putExtra("amount", "10000")              // $100.00
intent.putExtra("originalAmount", "10000")
intent.putExtra("receiptCode", "987654")
intent.putExtra("callerId", "req_001")

startActivityForResult(intent, REQUEST_CODE)
```

## Passo 2: trate a resposta

O terminal retorna a resposta via `onActivityResult`. Verifique o campo `result` para confirmar o sucesso:

```kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        val result = data?.extras?.getString("result")
        
        when (result) {
            "0" -> {
                // Transaction approved
                val nsu = data?.extras?.getString("nsu")
                val authCode = data?.extras?.getString("authorizationCode")
                val amount = data?.extras?.getString("amount")
                // Handle success
            }
            else -> {
                // Transaction failed or cancelled
                val resultDetails = data?.extras?.getString("resultDetails")
                // Handle error
            }
        }
    }
}
```

**Parâmetros de resposta**

A resposta do terminal inclui os seguintes campos principais:

| Parâmetro | Tipo | Descrição |
| :--- | :--- | :--- |
| result | String | Resultado da transação: `"0"` para sucesso; outros valores indicam falha ou cancelamento. Consulte a referência Códigos de resultado. |
| resultDetails | String | Mensagem detalhada sobre o resultado da transação (ex.: "APPROVED", descrições de erro) |
| amount | String | Valor final cobrado com duas casas decimais implícitas |
| tip | String | Valor da gorjeta somado à transação (se informado) |
| waiterCode | String | Código do garçom para atribuição da gorjeta (se informado) |
| receiptCode | String | Código de identificação impresso no comprovante |
| callerId | String | O identificador único enviado na requisição para correlacionar com a resposta |
| nsu | String | Código de autorização da transação Getnet - único por terminal (não pode se repetir no mesmo dia) |
| authorizationCode | String | Código de autorização fornecido pelo emissor do cartão |
| paymentType | String | Tipo de pagamento usado: crédito, débito, voucher etc. |
| brand | String | Bandeira do cartão (ex.: "VISA", "MASTERCARD") |
| cardBin | String | Primeiros 8 dígitos do cartão (BIN) |
| cardLastDigits | String | Últimos 4 dígitos do cartão usado |
| inputType | String | Forma de leitura do cartão: `"021"` (magnético), `"051"` (chip), `"071"` (chip por aproximação), `"801"` (magnético - fallback) |
| gmtDateTime | String | Data e hora GMT da transação (formato: MMDDhhmmss, GMT UTC 0) |
| installments | String | Número de parcelas processadas (se aplicável) |
| planId | String | ID do plano de parcelamento usado na transação (se aplicável) |
| interest | String | Indica se houve aplicação de juros: `"true"` (com juros) ou `"false"` (sem juros) |
| automationSlip | String | Dados do comprovante em formato JSON (retornado quando `allowPrintCurrentTransaction = "false"`). Consulte o guia Responsabilidade de impressão. |

## Próximos passos

Depois de criar um pagamento com sucesso, você pode explorar:

* [Crie um pagamento parcelado](/pt/app2app/payment-guides-a2a/create-installments-and-plan) - processe pagamentos com cartão de crédito em planos de parcelamento
* [Estratégia de cálculo de juros](/pt/app2app/core-concept-a2a/interest-calculation-strategy) - entenda os modos de operação para o cálculo de parcelas
* [Reembolso e cancelamento](/pt/app2app/core-concept-a2a/refund-and-cancellation) - reverta ou cancele transações anteriores
* [Responsabilidade de impressão](/pt/app2app/core-concept-a2a/printing-responsibility) - trate a impressão personalizada de comprovantes na sua aplicação
* [Códigos de resultado e estruturas de dados](/pt/app2app/reference-a2a/result-codes-data-structure) - lista completa dos códigos de status da transação