# Criar um Pagamento Pré-autorizado

Este guia orienta você no processamento de uma transação de pré-autorização usando a aplicação Get Smart. A pré-autorização permite bloquear um valor específico no cartão de um cliente sem capturar os fundos imediatamente. Isso é normalmente utilizado em hotéis, aluguel de carros ou cenários onde o preço final do serviço ainda está pendente.

## Requisitos

Antes de começar, certifique-se de que você possui:

* **Perfil de estabelecimento com suporte a pré-autorização** - Entre em contato com o suporte da Get Smart para verificar se sua conta suporta este tipo de transação
* **Aplicação Get Smart** instalada e configurada no dispositivo Android
* **Permissão para lançar Intents externos** em sua aplicação

<Callout type="warning">

Nem todos os perfis de estabelecimento suportam pré-autorização. Verifique com a Get Smart se sua conta está configurada para transações de pré-autorização antes de implementar este recurso.

</Callout>

## Processo da Transação de Pré-autorização

Esta seção guia você pelo processo de duas etapas para pré-autorizar e confirmar um pagamento com a integração Get Smart App2App. O fluxo de trabalho envolve duas chamadas de Intent distintas: a pré-autorização para reter os fundos e a confirmação para capturá-los.

### Passo 1: Executar a Pré-autorização

Uma transação de pré-autorização bloqueia fundos no cartão do cliente sem capturá-los imediatamente. Você deve criar um Intent com o tipo de transação `10` para iniciar a retenção. A aplicação Get Smart processa a pré-autorização e retorna um ID de pedido (`ORDER`) que você deve armazenar para a confirmação posterior.

A tabela abaixo lista os parâmetros que você precisa incluir em seu Intent de pré-autorização:

| Parâmetro | Tipo   | Obrigatório | Descrição                                          |
| :-------- | :----- | :------- | :----------------------------------------------- |
| `amount`  | double | Sim       | O valor a ser retido no cartão                   |
| `type`    | int    | Sim       | Definido como `10` para transações de Pré-autorização |
| `invoice` | String | Não       | Número do pedido ou identificador opcional para rastreamento |

O exemplo de código a seguir mostra como criar e lançar um Intent de pré-autorização:

```java
// Define o código de requisição para o tratamento do resultado
static final int REQUEST_CODE_PREAUTH = 2001;

// Inicializa o Intent com a ação Get Smart
Intent intent = new Intent("es.android.redsys.mPOS.movil.tpvAndroid_PAYMENT_REQUEST");

// Adiciona os parâmetros de pré-autorização
intent.putExtra("amount", 100.00);
intent.putExtra("type", 10); // 10 = Pré-autorização
intent.putExtra("invoice", "PRE-AUTH-001");

// Lança o Intent
try {
    startActivityForResult(intent, REQUEST_CODE_PREAUTH);
} catch (ActivityNotFoundException e) {
    // Trata a ausência da aplicação Get Smart
    new AlertDialog.Builder(this)
        .setTitle("App Get Smart não encontrado")
        .setMessage("Por favor, instale e configure a aplicação Get Smart.")
        .setPositiveButton("OK", null)
        .show();
}
```

### Passo 2: Armazenar e Confirmar a Pré-autorização

Quando a pré-autorização é bem-sucedida, o app Get Smart retorna um parâmetro `ORDER` através do callback `onActivityResult`. Você deve armazenar este ID de pedido para confirmar e capturar o pagamento mais tarde. As pré-autorizações geralmente expiram após 7 a 30 dias, dependendo do emissor do cartão, portanto, você deve confirmar a captura dentro deste prazo.

Para finalizar o pagamento, envie uma solicitação de confirmação usando o tipo de transação `11` e inclua o ID do pedido original (`original_order`). O valor da confirmação pode ser igual ou inferior ao valor pré-autorizado, dependendo da configuração do seu contrato de estabelecimento.

A tabela abaixo lista os parâmetros para o Intent de confirmação:

| Parâmetro        | Tipo   | Obrigatório | Descrição                                                           |
| :--------------- | :----- | :------- | :------------------------------------------------------------------ |
| `amount`         | double | Sim       | O valor a ser capturado (igual ou inferior ao valor pré-autorizado) |
| `type`           | int    | Sim       | Definido como `11` para Confirmação de Pré-autorização              |
| `original_order` | String | Sim       | O ID de pedido (`ORDER`) retornado da pré-autorização                |

O exemplo de código a seguir mostra como tratar o resultado da pré-autorização e, posteriormente, confirmar a captura:

```java
// Trata o resultado da pré-autorização
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    if (requestCode == REQUEST_CODE_PREAUTH) {
        if (resultCode == RESULT_OK && data != null) {
            // Pré-autorização bem-sucedida - armazena o ID do pedido
            String orderId = data.getStringExtra("ORDER");
            String authCode = data.getStringExtra("AUTHORIZATION");
            
            // Armazena o orderId para confirmação posterior
            savePreAuthOrderId(orderId);
        }
    } else if (requestCode == REQUEST_CODE_CONFIRM) {
        if (resultCode == RESULT_OK && data != null) {
            // Confirmação bem-sucedida
            String orderId = data.getStringExtra("ORDER");
            // Processar pagamento confirmado
        }
    }
}

// Mais tarde, quando estiver pronto para capturar os fundos
private void confirmPreAuthorization(String originalOrderId, double captureAmount) {
    static final int REQUEST_CODE_CONFIRM = 2002;
    
    Intent intent = new Intent("es.android.redsys.mPOS.movil.tpvAndroid_PAYMENT_REQUEST");
    intent.putExtra("amount", captureAmount);
    intent.putExtra("type", 11); // 11 = Confirmação de Pré-autorização
    intent.putExtra("original_order", originalOrderId); // Obrigatório
    
    try {
        startActivityForResult(intent, REQUEST_CODE_CONFIRM);
    } catch (ActivityNotFoundException e) {
        // Trata a ausência da aplicação Get Smart
    }
}
```

<Callout type="note">

Algumas configurações de estabelecimento permitem confirmar um valor inferior ao originalmente autorizado (captura parcial). Verifique seu contrato para validar se este recurso está disponível para sua conta.

</Callout>

### Próximos Passos

Agora que você processou com sucesso uma transação de pré-autorização, você pode explorar mais recursos da integração Get Smart App2App:

* [Referência de Parâmetros de Resposta](/pt/get-smart/get-smart-app2app/reference/response-parameters) - Especificações completas dos campos de resposta
* [Estornar um Pagamento](/pt/get-smart/get-smart-app2app/transaction-guides/transactions/refund-a-payment) - Aprenda como reverter transações
* [Referência de Parâmetros de Requisição](/pt/get-smart/get-smart-app2app/reference/request-parameters) - Especificações completas de parâmetros