Getnet DocsGetnet Docs

Inicio rápido: Tu primera transacción

Esta guía te ayuda a crear tu primera transacción de pago con éxito utilizando la integración Get Smart App2App. Crearás un Intent, enviarás una solicitud de pago y gestionarás el resultado de la transacción, todo ello en pocos minutos.

Qué va a construir

En este tutorial, crearás un método sencillo de Android que genera un intent de pago, añade los parámetros de transacción requeridos, lanza la aplicación Get Smart y gestiona el resultado de la transacción.

Requisitos

Antes de comenzar, asegúrate de tener:

  • La aplicación Get Smart instalada en tu dispositivo de prueba
  • Un proyecto de Android configurado con una Activity funcional
  • Familiaridad básica con el desarrollo de Android e Intents

Asegúrate de que la aplicación Get Smart esté actualizada a la última versión para garantizar la compatibilidad.

Paso 1: Definir el código de solicitud

En primer lugar, añade una constante a tu Activity para identificar esta solicitud de pago:

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
}

Paso 2: Crear el método de pago

Añade un método para iniciar la transacción de pago:

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();
}

El código de solicitud REQUEST_CODE_PAYMENT es una constante entera definida por ti. Utilizarás este mismo código en el método onActivityResult para identificar qué solicitud está retornando.

Paso 3: Gestionar el resultado de la transacción

Sobrescribe el método onActivityResult para recibir el desenlace de la transacción:

@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();
}

RESULT_OK no significa que el pago haya sido autorizado. Solo significa que la aplicación Get Smart completó su proceso. Debes comprobar el extra RESULT para determinar si el pago fue realmente aprobado.

Paso 4: Activar el pago

Añade un manejador de clic de botón (o método de activación) para iniciar el pago:

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

Sustituye el importe fijo por el importe real de tu transacción basado en el pedido del cliente.

Aquí tienes el código completo en un solo lugar:

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();
            }
        }
    }
}

¡Enhorabuena! Has creado con éxito tu primera transacción de pago utilizando la integración Get Smart App2App. Este ejemplo completo demuestra los componentes esenciales necesarios para procesar pagos: la creación del Intent, la gestión de respuestas y el control de escenarios de error. Ahora puedes partir de esta base para añadir funciones de pago más sofisticadas a tu aplicación.

Resolución de problemas

Si encuentra problemas durante la integración o en tiempo de ejecución, consulta la siguiente tabla:

Problema / ExcepciónDescripción y posibles causasAcción recomendada
ActivityNotFoundExceptionLa aplicación Get Smart no está instalada en el dispositivo.Instala la aplicación a través de tu sistema de gestión de dispositivos o ponte en contacto con un representante de Get Smart.
RESULT_CANCELEDEl usuario salió manualmente de la interfaz o pulsó el botón de retroceso.Gestiona esto como una cancelación estándar del usuario; asegúrate de que tu interfaz de usuario vuelva a un estado neutro.
Sin datos en onActivityResultLos datos del Intent son null. Esto ocurre si la aplicación se bloqueó, el dispositivo se quedó sin memoria o el sistema cerró el proceso.Registra los detalles del error y pide al usuario que intente la transacción de nuevo.
Pago “DENEGADA”La transacción fue rechazada (p. ej., fondos insuficientes, tarjeta caducada o cuenta bloqueada).Analiza el campo ERROR_MSG y muéstralo al usuario para que sepa por qué se rechazó la tarjeta.

Qué ha aprendido

En este tutorial, has aprendido a:

  • Crear y configurar un Intent de pago
  • Lanzar la aplicación Get Smart
  • Gestionar los resultados de la transacción
  • Implementar un control de errores adecuado

Próximos pasos

Ahora que tienes una integración funcional: