# Tokenizar credenciales de tarjeta

Esta guía explica cómo generar tokens de autenticación utilizando el `AuthRepository`. Los tokens permiten que tu aplicación se autentique de forma segura con servicios de terceros o sistemas de backend en nombre del comercio, sin manejar directamente datos sensibles de tarjetas.

## Prerrequisitos

* El TPV debe estar inicializado mediante `InitializationRepository`.
* Debes tener acceso al `AuthRepository`.

---

## Generación de un token

Para recuperar un token, utiliza la función `getToken`. Esta función se comunica con el **Get Smart SDK Payment Service** para emitir un token seguro utilizable por un tercero.

### Pasos

1. **Llamar a `getToken`**: Invoca la función suspend en tu instancia de `AuthRepository`.
2. **Gestionar el Resultado**: La función devuelve un `RepositoryResult<AuthResult>`. Debes manejar el estado `Success` que contiene la interfaz sellada `AuthResult`.

### Ejemplo de código

```kotlin
suspend fun retrieveToken() {
    // 1. Call getToken
    val result = authRepository.getToken()

    // 2. Handle the result
    when (result) {
        is RepositoryResult.Success -> {
            // The request was successful, check the specific AuthResult
            when (val authOutcome = result.data) {
                is AuthResult.AuthInfo -> {
                    println("✅ Token Retrieved Successfully")
                    println("Token: ${authOutcome.token}")
                    println("Merchant ID: ${authOutcome.merchantId}")
                    println("FUC: ${authOutcome.fuc}")
                    println("Terminal: ${authOutcome.terminal}") // Available in TpvInfo, context dependent
                }
                is AuthResult.TokenNotFound -> {
                    println("❌ Token Not Found: ${authOutcome.message}")
                }
            }
        }
        is RepositoryResult.ConnectionError -> {
            println("❌ Connection Error: Ensure the service is running.")
        }
        is RepositoryResult.ProtocolError -> {
            println("❌ Protocol Error: ${result.type}")
        }
        is RepositoryResult.Cancelled -> {
            println("❌ Operation Cancelled: ${result.message}")
        }
    }
}
```

---

## Resolución de problemas

* **TokenNotFound**: Esto puede indicar un problema de configuración con los parámetros del comercio en el host.

## Próximos pasos

* [**Gestionar Ajustes del Dispositivo**](/es/get-smart/get-smart-sdk/integration-guides/device-and-quality-assurance/manage-device-settings): Personaliza la interfaz y el idioma del servicio.