> For the complete documentation index, see [llms.txt](https://docs.payments.thalescloud.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payments.thalescloud.io/nfc-wallet-sdk-android/es/implement-nfc-wallet/make-payment/implement-contactless-payments/4.-support-manual-mode.md).

# 4. Admitir modo manual

## Resumen

Complete este paso si planea admitir el **modo manual** experiencia de pago.

Si no admite el modo manual, omita a [Realizar la verificación CDCVM](/nfc-wallet-sdk-android/es/implement-nfc-wallet/make-payment/implement-contactless-payments/5.-perform-cdcvm-verification.md).

## Flujo de secuencia

En esta experiencia de pago:

1. El usuario final desbloquea el dispositivo.
2. El usuario final abre su aplicación de monedero digital.
3. El usuario final selecciona la tarjeta para pagar.
4. La aplicación solicita al usuario final que se autentique.
5. El usuario final realiza un toque dentro del `keyValidityPeriod`.
6. La transacción se realiza con la tarjeta de pago seleccionada.
7. Después de que se complete el pago, o cuando `keyValidityPeriod` caduque, NFC Wallet SDK vuelve a la tarjeta de pago predeterminada para el siguiente pago.

## Integración del SDK

Llamar `PaymentBusinessService.startAuthentication(...)` para iniciar una transacción en modo manual.

Esta llamada activa el servicio de pago NFC Wallet. NFC Wallet SDK gestiona la transacción usando el flujo de devolución de llamada estándar para pagos sin contacto.

Las siguientes devoluciones de llamada de `ContactlessPaymentServiceListener` se llamarán en este orden:

1. `onTransactionStarted`
2. `onAuthenticationRequired`
3. `onReadyToTap`
4. `onTransactionCompleted`

```java
// 01 - Cambiar temporalmente la tarjeta predeterminada a la tarjeta seleccionada, si es necesario.
DigitalizedCard originalDefault = null;

// Obtener la tarjeta seleccionada por el usuario final.
DigitalizedCard selectedCard = getSelectedCard();

// Si la tarjeta seleccionada no es la tarjeta predeterminada, tome nota de la tarjeta predeterminada original,
// luego establezca la tarjeta seleccionada como predeterminada, antes de continuar con el pago.
if (!isDefault(selectedCard)) {
    originalDefault = getDefaultCard();  // Guardar la tarjeta predeterminada original.
    setDefaultCard(selectedCard);        // Establecer la tarjeta seleccionada como la nueva predeterminada.
}

// 02 - Definir el listener para manejar los eventos del flujo de pago sin contacto.
private PaymentServiceListener paymentServiceListener = new ContactlessPaymentServiceListener() {
    @Override
    public void onAuthenticationRequired(PaymentService paymentService,
                                          CHVerificationMethod cvm, long cvmResetTimer) {
        // 04 - Activar la autenticación según el método CDCVM.
        startInputCvmActivity(cvm);
    }

    @Override
    public void onTransactionCompleted(TransactionContext ctx) {
        // 05a - Después de una transacción exitosa, revertir a la tarjeta predeterminada original, si es necesario.
        setDefaultCard(originalDefault);
    }

    @Override
    public void onError(TransactionContext transactionContext,
                        PaymentServiceErrorCode errorCode, String msg) {
        // 05b - Después de una transacción fallida, revertir a la tarjeta predeterminada original, si es necesario.
        setDefaultCard(originalDefault);
    }

    @Override
    public void onTransactionStarted() {
    }

    @Override
    public void onReadyToTap(PaymentService service) {
    }
};


// 03 - Activar la autenticación antes del pago.
final PaymentBusinessService paymentBusinessService = PaymentBusinessManager.getPaymentBusinessService();
paymentBusinessService.startAuthentication(paymentServiceListener, PaymentType.CONTACTLESS);

```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.payments.thalescloud.io/nfc-wallet-sdk-android/es/implement-nfc-wallet/make-payment/implement-contactless-payments/4.-support-manual-mode.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
