# Início Rápido: Sua Primeira Transação

Este guia ajuda você a criar sua primeira transação de pagamento com sucesso utilizando a integração Get Smart App2App. Você criará um Intent, enviará uma solicitação de pagamento e tratará o resultado da transação — tudo em poucos minutos.

## O que você vai construir

Neste tutorial, você criará um método Android simples que gera um intent de pagamento, adiciona os parâmetros de transação necessários, lança a aplicação Get Smart e trata o resultado da transação.

## Requisitos

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

- A aplicação Get Smart instalada em seu dispositivo de teste
- Um projeto Android configurado com uma Activity funcional
- Familiaridade básica com desenvolvimento Android e Intents

<Callout type="tip">

Certifique-se de que a aplicação Get Smart esteja atualizada para a versão mais recente para garantir a compatibilidade.

</Callout>

## Passo 1: Definir o Código de Solicitação

Primeiro, adicione uma constante à sua Activity para identificar esta solicitação de pagamento:

```java
public class MainActivity extends AppCompatActivity {
    // Request code to identify the payment transaction
    private static final int REQUEST_CODE_PAYMENT = 1001;

    // ... rest of your Activity code
}
```

## Passo 2: Criar o Método de Pagamento

Adicione um método para iniciar a transação de pagamento:

```java
private void startPayment(double amount, String invoice) {
    // 1. Create the Intent with the specific action name
    Intent intent = new Intent("es.android.redsys.mPOS.movil.tpvAndroid_PAYMENT_REQUEST");

    // 2. Add the required parameters
    intent.putExtra("amount", amount);
    intent.putExtra("invoice", invoice);
    intent.putExtra("type", 1); // 1 = Sale transaction

    // 3. Launch the Get Smart app with error handling
    try {
        startActivityForResult(intent, REQUEST_CODE_PAYMENT);
    } catch (ActivityNotFoundException e) {
        // The Get Smart app is not installed
        showErrorDialog();
    }
}

private void showErrorDialog() {
    new AlertDialog.Builder(this)
        .setTitle("Payment App Not Found")
        .setMessage("Please ensure the Get Smart application is installed and updated.")
        .setPositiveButton("OK", null)
        .show();
}
```

<Callout type="note">

O código de solicitação `REQUEST_CODE_PAYMENT` é uma constante inteira definida por você. Você usará este mesmo código no método `onActivityResult` para identificar qual solicitação está retornando.

</Callout>

## Passo 3: Tratar o Resultado da Transação

Sobrescreva o método `onActivityResult` para receber o desfecho da transação:

```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_CODE_PAYMENT) {
        if (resultCode == RESULT_OK && data != null) {
            // Transaction completed - check if it was authorized
            String result = data.getStringExtra("RESULT");

            if ("AUTORIZADA".equals(result)) {
                // Payment successful!
                String authNumber = data.getStringExtra("AUTORIZATION_NUMBER");
                String orderNumber = data.getStringExtra("ORDER");

                showSuccessMessage("Payment approved! Auth: " + authNumber);
            } else {
                // Payment denied
                String errorMsg = data.getStringExtra("ERROR_MSG");
                showErrorMessage("Payment denied: " + errorMsg);
            }
        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the transaction
            showInfoMessage("Transaction cancelled by user");
        }
    }
}

private void showSuccessMessage(String message) {
    Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}

private void showErrorMessage(String message) {
    Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}

private void showInfoMessage(String message) {
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
```

<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 se o pagamento foi realmente aprovado.

</Callout>

## Passo 4: Acionar o Pagamento

Adicione um manipulador de clique de botão (ou método de gatilho) para iniciar o pagamento:

```java
// Example: Button click handler
public void onPayButtonClick(View view) {
    // Process a payment of 10.50 euros
    startPayment(10.50, "ORDER-001");
}
```

<Callout type="tip">

Substitua o valor fixo pelo valor real da sua transação com base no pedido do cliente.

</Callout>

Aqui está o código completo em um só lugar:

```java
public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_CODE_PAYMENT = 1001;

    private void startPayment(double amount, String invoice) {
        Intent intent = new Intent("es.android.redsys.mPOS.movil.tpvAndroid_PAYMENT_REQUEST");
        intent.putExtra("amount", amount);
        intent.putExtra("invoice", invoice);
        intent.putExtra("type", 1); // Sale

        try {
            startActivityForResult(intent, REQUEST_CODE_PAYMENT);
        } catch (ActivityNotFoundException e) {
            new AlertDialog.Builder(this)
                .setTitle("Payment App Not Found")
                .setMessage("Please install the Get Smart application.")
                .setPositiveButton("OK", null)
                .show();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE_PAYMENT) {
            if (resultCode == RESULT_OK && data != null) {
                String result = data.getStringExtra("RESULT");

                if ("AUTORIZADA".equals(result)) {
                    String authNumber = data.getStringExtra("AUTORIZATION_NUMBER");
                    Toast.makeText(this, "Payment approved! Auth: " + authNumber,
                                   Toast.LENGTH_LONG).show();
                } else {
                    String errorMsg = data.getStringExtra("ERROR_MSG");
                    Toast.makeText(this, "Payment denied: " + errorMsg,
                                   Toast.LENGTH_LONG).show();
                }
            } else if (resultCode == RESULT_CANCELED) {
                Toast.makeText(this, "Transaction cancelled", Toast.LENGTH_SHORT).show();
            }
        }
    }
}
```

Parabéns! Você criou com sucesso sua primeira transação de pagamento usando a integração Get Smart App2App. Este exemplo completo demonstra os componentes essenciais necessários para processar pagamentos: criação do Intent, tratamento de respostas e gerenciamento de cenários de erro. Você pode agora construir sobre esta base para adicionar recursos de pagamento mais sofisticados à sua aplicação.

## Resolução de Problemas

Se você encontrar problemas durante a integração ou em tempo de execução, consulte a tabela abaixo:

| Problema / Exceção | Descrição e Causas Potenciais | Ação Recomendada |
| :--- | :--- | :--- |
| **`ActivityNotFoundException`** | A aplicação **Get Smart** não está instalada no dispositivo. | Instale o app via seu sistema de gerenciamento de dispositivos ou entre em contato com um representante Get Smart. |
| **`RESULT_CANCELED`** | O usuário saiu manualmente da interface ou pressionou o botão de voltar. | Trate isso como um cancelamento padrão do usuário; garanta que sua UI retorne a um estado neutro. |
| **Nenhum dado em `onActivityResult`** | Os dados do Intent estão `null`. Isso ocorre se o app travou, o dispositivo ficou sem memória ou o sistema encerrou o processo. | Registre os detalhes do erro e solicite ao usuário que tente a transação novamente. |
| **Pagamento "DENEGADA"** | O gateway de pagamento recusou a transação (ex: saldo insuficiente, cartão expirado ou conta bloqueada). | Analise o campo `ERROR_MSG` e exiba-o ao usuário para que ele saiba por que o cartão foi rejeitado. |

## O que você aprendeu

Neste tutorial, você aprendeu como:

- Criar e configurar um Intent de pagamento
- Lançar a aplicação Get Smart
- Tratar resultados de transação
- Implementar o tratamento de erros adequado

## Próximos Passos

Agora que você tem uma integração funcional:

- Saiba como processar estornos em [Processar uma Transação de Estorno](/pt/get-smart/get-smart-app2app/transaction-guides/transactions/refund-a-payment)
- Explore todos os parâmetros disponíveis em [Referência de Parâmetros de Requisição](https://docs.globalgetnet.com/pt/products/local-processor-spain/get-smart-app2app?doc=getsmart-app2app-request-reference)
- Entenda o fluxo completo da transação em [Fluxo da Transação](/pt/get-smart/get-smart-app2app/core-concepts/transaction-flow)