# Quick Start: Your First Transaction

This guide helps you process your first payment transaction using Get Mini App2App. You'll create an Intent, launch the Get Mini app, and handle the response—all in a few minutes.

## Requirements

Before you begin, ensure you have:

* **Get Mini application** installed on your Android device
* **Compatible PIN pad device** paired and ready
* **Android development environment** with your application project
* Completed the [Prerequisites and Setup](/en/get-mini/get-mini-app2app/first-steps/prerequisites-and-setup) guide

<Callout type="tip">

Make sure the PIN pad is connected and the Get Mini app is properly configured before testing.

</Callout>

## Step 1: Register the Activity Result Launcher

First, register an `ActivityResultLauncher` in your Activity or Fragment. This will handle the callback when the Get Mini app completes the transaction.

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

## Step 2: Create and Launch the Payment Intent

Next, create a method to build the payment Intent and launch it with the registered launcher.

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

## Step 3: Trigger the Payment

Finally, call your `processPayment` method when the user initiates a payment (e.g., when they tap a "Pay Now" button).

```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");
});
```

## Step 4: Test Your Integration

Run your application on a device with the Get Mini app installed:

1. Launch your application
2. Tap the payment button
3. The Get Mini app should launch and prompt you to insert or tap a card
4. Complete the transaction on the PIN pad
5. Your app receives the callback with the transaction result

## Troubleshooting

**Get Mini app not found**: If you see an `ActivityNotFoundException`, the Get Mini app is not installed. Follow the [Handle App Availability](/en/get-mini/get-mini-app2app/transaction-guides/response-handling/handle-app-availability) guide to direct users to install it.

**Transaction cancelled**: The Get Mini app returns `RESULT_CANCELED` when a transaction fails or is cancelled by the user. Check the `ERROR_MSG` extra for details.

**PIN pad not connected**: Ensure the PIN pad device is properly paired via Bluetooth and the Get Mini app is configured to use it.

## Next Steps

Congratulations! You've processed your first payment transaction. To learn more:

* [Refund a Payment](https://docs.globalgetnet.com/en/products/local-processor-spain/get-mini?doc=getmini-app2app-processing-a-refund) - Learn how to refund a previous payment
* [Handle Transaction Results](/en/get-mini/get-mini-app2app/transaction-guides/response-handling/handle-transaction-results) - Detailed guide on processing response data
* [Certified Ticket Management](/en/get-mini/get-mini-app2app/core-concepts/receipt-management) - Learn how to display and share transaction tickets
* [Request Parameters](/en/get-mini/get-mini-app2app/reference/request-parameters) - Complete reference of all Intent actions and parameters