# Inicio rápido: Tu primera transacción

Esta guía te ayuda a procesar tu primera transacción de pago utilizando Get Mini App2App. Crearás un Intent, iniciarás la aplicación Get Mini y gestionarás la respuesta, todo en unos minutos.

## Requisitos

Antes de empezar, asegúrate de tener:

* La **aplicación Get Mini** instalada en tu dispositivo Android
* Un **dispositivo PIN pad compatible** emparejado y listo
* Un **entorno de desarrollo Android** con el proyecto de tu aplicación
* La guía de [Requisitos previos y configuración](/es/get-mini/get-mini-app2app/first-steps/prerequisites-and-setup) completada

<Callout type="tip">

Asegúrate de que el PIN pad está conectado y que la aplicación Get Mini está correctamente configurada antes de realizar las pruebas.

</Callout>

## Paso 1: Registrar el `ActivityResultLauncher`

Primero, registra un `ActivityResultLauncher` en tu Activity o Fragment. Esto gestionará la devolución de llamada cuando la aplicación Get Mini complete la transacción.

```java
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import android.content.Intent;
import android.app.Activity;

public class MainActivity extends AppCompatActivity {

    private ActivityResultLauncher<Intent> paymentLauncher;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Register the Activity Result Launcher
        paymentLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                if (result.getResultCode() == Activity.RESULT_OK) {
                    // Payment successful
                    Intent data = result.getData();
                    if (data != null) {
                        String authNumber = data.getStringExtra("AUTHORIZATION_NUMBER");
                        String order = data.getStringExtra("ORDER");

                        // Display success message to user
                        Toast.makeText(this,
                            "Payment Successful! Auth: " + authNumber,
                            Toast.LENGTH_LONG).show();
                    }
                } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                    // Payment failed or cancelled
                    Intent data = result.getData();
                    if (data != null) {
                        String errorMsg = data.getStringExtra("ERROR_MSG");
                        String state = data.getStringExtra("STATE");

                        // Display error message to user
                        Toast.makeText(this,
                            "Payment Failed: " + errorMsg,
                            Toast.LENGTH_LONG).show();
                    }
                }
            }
        );
    }
}
```

## Paso 2: Crear e iniciar el Intent de pago

A continuación, crea un método para construir el Intent de pago e inícialo con el launcher registrado.

```java
private void processPayment(double amount, String invoiceNumber) {
    // Create the payment Intent
    Intent paymentIntent = new Intent("es.redsys.paysys.mPOSRedsys_PAYMENT_REQUEST");

    // Add required parameters
    paymentIntent.putExtra("amount", amount);
    paymentIntent.putExtra("invoice", invoiceNumber);

    try {
        // Launch the Get Mini application
        paymentLauncher.launch(paymentIntent);
    } catch (ActivityNotFoundException e) {
        // Handle case where Get Mini app is not installed
        showInstallDialog();
    }
}

private void showInstallDialog() {
    String playStoreUrl = "[https://play.google.com/store/apps/details?id=es.android.redsys.Get](https://play.google.com/store/apps/details?id=es.android.redsys.Get) Mini.movil";

    new AlertDialog.Builder(this)
        .setTitle("Get Mini Not Found")
        .setMessage("The Get Mini app must be installed to process payments.")
        .setPositiveButton("Install", (dialog, which) -> {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(playStoreUrl));
            startActivity(intent);
        })
        .setNegativeButton("Cancel", null)
        .show();
}
```

## Paso 3: Lanzar el pago

Por último, llama a tu método `processPayment` cuando el usuario inicie un pago (por ejemplo, cuando pulse un botón de "Pagar ahora").

```java
// Example: Process a payment of €10.50 with invoice number "ORD-12345"
Button payButton = findViewById(R.id.pay_button);
payButton.setOnClickListener(v -> {
    processPayment(10.50, "ORD-12345");
});
```

## Paso 4: Probar tu integración

Ejecuta tu aplicación en un dispositivo con la aplicación Get Mini instalada:

1. Inicia tu aplicación
2. Pulsa el botón de pago
3. La aplicación Get Mini debería iniciarse y pedirte que insertes o acerques una tarjeta
4. Completa la transacción en el PIN pad
5. Tu aplicación recibe la devolución de llamada con el resultado de la transacción

## Solución de problemas

**Aplicación Get Mini no encontrada**: Si ves una excepción `ActivityNotFoundException`, la aplicación Get Mini no está instalada. Sigue la guía [Gestionar la disponibilidad de la aplicación](/es/get-mini/get-mini-app2app/transaction-guides/response-handling/handle-app-availability) para indicar a los usuarios que la instalen.

**Transacción cancelada**: La aplicación Get Mini devuelve `RESULT_CANCELED` cuando una transacción falla o es cancelada por el usuario. Comprueba el extra `ERROR_MSG` para obtener más detalles.

**PIN pad no conectado**: Asegúrate de que el dispositivo PIN pad está correctamente emparejado por Bluetooth y que la aplicación Get Mini está configurada para utilizarlo.

## Próximos pasos

¡Enhorabuena! Has procesado tu primera transacción de pago. Para obtener más información:

* [Devolver un pago](https://docs.globalgetnet.com/es/products/local-processor-spain/get-mini?doc=getmini-app2app-processing-a-refund) - Aprende a devolver un pago anterior
* [Gestionar los resultados de la transacción](/es/get-mini/get-mini-app2app/transaction-guides/response-handling/handle-transaction-results) - Guía detallada sobre el procesamiento de datos de respuesta
* [Gestión de tickets certificados](/es/get-mini/get-mini-app2app/core-concepts/receipt-management) - Aprende a mostrar y compartir tickets certificados de transacciones
* [Parámetros de solicitud](/es/get-mini/get-mini-app2app/reference/request-parameters) - Referencia completa de todas las acciones y parámetros de Intent