# Tokenizar Credenciais de Cartão

Este guia explica como gerar tokens de autenticação utilizando o `AuthRepository`. Os tokens permitem que sua aplicação se autentique de forma segura com serviços de terceiros ou sistemas de backend em nome do estabelecimento, sem a necessidade de manipular diretamente dados sensíveis de cartões.

## Pré-requisitos

* O TPV deve estar inicializado via `InitializationRepository`.
* Você deve ter acesso ao `AuthRepository` (via Dagger Hilt ou `RepositoryProvider`).

---

## Gerando um Token

Para recuperar um token, utilize a função `getToken`. Esta função comunica-se com o **Get Smart SDK Payment Service** para emitir um token seguro utilizável por terceiros.

### Passos

1. **Chamar `getToken`**: Invoque a função suspend em sua instância de `AuthRepository`.
2. **Tratar o Resultado**: A função retorna um `RepositoryResult<AuthResult>`. Você deve tratar o estado de `Success`, que contém a interface selada `AuthResult`.

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

---

## Entendendo a Resposta

A interface selada `AuthResult` fornece dois desfechos possíveis:

| Desfecho    | Classe         | Descrição                                                                                             |
| :---------- | :------------- | :---------------------------------------------------------------------------------------------------- |
| **Sucesso** | `AuthInfo`      | Contém o token, fuc, merchantId, merchantName, merchantCountry e merchantCurrency.                    |
| **Falha** | `TokenNotFound` | Indica que um token válido não pôde ser gerado ou encontrado. Contém uma string de mensagem de erro. |

---

## Resolução de Problemas

* **ConnectionError**: Se você receber este erro, verifique se o **Get Smart SDK Payment Service** está instalado e em execução no dispositivo.
* **TokenNotFound**: Isso pode indicar um problema de configuração nos parâmetros do estabelecimento no host da Getnet.

## Próximos Passos

* [**Gerenciar Configurações do Dispositivo**](/pt/get-smart/get-smart-sdk/integration-guides/device-and-quality-assurance/manage-device-settings): Personalize a interface e o idioma do serviço.
* [**Consultar Histórico de Transações**](): Aprenda a buscar operações passadas utilizando o identificador ou filtros de data.