> For the complete documentation index, see [llms.txt](https://ftcoders.first-tech.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ftcoders.first-tech.com/first-tech-ttp-sdk-pt/area-do-desenvolvedor/reagindo-as-mensagens.md).

# Reagindo às mensagens

Aqui, obtemos a referência ao LiveData onMessage e começamos a observá-lo:

{% hint style="info" %} <mark style="color:$warning;">É importante observar o onMessage dentro do ciclo de vida correto, garantindo que não haja vazamentos de memória ou reações inesperadas.</mark>
{% endhint %}

```
private fun setupObserver() {
   mppProviderViewModel.onMessage.observe(this, ::onMessage)
}
```

O MPPPProviderViewModel  fornece o LiveData onMessage, que receberá um objeto 'estendido' da classe MPPViewData'extended' object from the `MPPViewData` class.&#x20;

> Nota: Algumas classes MPPViewData contêm objetos que ajudam a entender a mensagem que deve ser exibida em uma etapa específica..

E reagimos aos eventos da seguinte forma

```
  private fun onMessage(viewData: MPPViewData?) {
        viewData?.let {
            when (viewData) {
                MPPViewData.TerminalInitializingViewData -> {
                    showLoadingDialog("Inicializando terminal")
                    binding.tvMessage.text = "Inicializando terminal"
                }

                MPPViewData.TerminalInitializingErrorViewData -> {
                    showFeedbackDialog("Erro ao inicializar terminal")
                    progressDialog.dismiss()
                }

                MPPViewData.TerminalInitializingSuccessViewData -> {
                    progressDialog.dismiss()
                    binding.tvMessage.text = "Inicialização concluída"
                }
                
                //Mapear todos os cenários de MPPViewData

            }
        }
    }
```

Neste projeto, usamos o conceito de Sealed Classes para uma abstração mais eficiente. Abaixo, listamos todos os objetos que podem ser retornados em onMessage e seus respectivos significados.

| Class                                         | Descrição do uso                                                                                                                                    |
| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| TerminalInitializingViewData                  | O terminal iniciou o processo de inicialização.                                                                                                     |
| TerminalInitializingErrorViewData             | O terminal concluiu o processo de inicialização com um erro.                                                                                        |
| TerminalInitializingSuccessViewData           | O terminal concluiu com sucesso o processo de inicialização.                                                                                        |
| TerminalNotCreatedViewData                    | A instância do terminal ainda não foi criada.                                                                                                       |
| TerminalCreatingViewData                      | A instância do terminal está sendo criada.                                                                                                          |
| TerminalCreatedSuccessViewData                | A instância do terminal foi criada com sucesso.                                                                                                     |
| TerminalCreatedErrorViewData                  | A instância do terminal não foi criada.                                                                                                             |
| TerminalSessionCreatingViewData               | A sessão de pagamento está sendo criada.                                                                                                            |
| TerminalSessionCreatedSuccessViewData         | A sessão de pagamento foi criada com sucesso.                                                                                                       |
| TerminalSessionCreatedErrorViewData           | A sessão de pagamento não foi criada.                                                                                                               |
| TerminalSessionTimeoutViewData                | A sessão de pagamento expirou.                                                                                                                      |
| TerminalPaymentStartingViewData               | O processo de transação foi iniciado.                                                                                                               |
| TerminalPaymentProcessingViewData             | A transação está sendo processada.                                                                                                                  |
| TerminalPaymentCancelledViewData              | A transação foi cancelada.                                                                                                                          |
| TerminalPaymentSuccessViewData                | A transação foi concluída com sucesso.                                                                                                              |
| TerminalPaymentErrorViewData                  | A transação foi concluída com erro.                                                                                                                 |
| TerminalPaymentFinishedViewData               | O processo inteiro foi concluído.                                                                                                                   |
| TerminalRefundViewData                        | Etapa onde será retornada a lista de transações ou o recibo de cancelamento.                                                                        |
| TerminalPaymentValueBelowMinimunLimitViewData | O valor do pagamento está abaixo do valor minimo(Necessário setar um valor minimo para o funcionamento desse recurso).                              |
| PaymentInformationInvalidViewData             | As condições da transação estão incorretas(ex: uma transação de débito está com números de parcelas acima de 1).                                    |
| OperationErrorViewData                        | Durante o fluxo de listagem ou de reembolso,caso ocorra algum erro durante a requisição com back-end,será notificado esse viewData para tratamento. |

A seguir, explicaremos com mais detalhes as mensagens retornadas na interface onMessage, que são extensões do objeto MPPViewData.

As classes não detalhadas abaixo não possuem variáveis internas. Nesses casos, siga as orientações descritas na Tabela 2 – Lista de Retorno OnMessage.

{% stepper %}
{% step %}

### TerminalCreatedErrorViewData | TerminalSessionCreatedErrorViewData&#x20;

* `cause` → Objeto Throwable retornado pelo SDK de pagamento, usado apenas para depuração.
* `logMessage` → Conversão de cause para uma String.
  {% endstep %}

{% step %}

### TerminalPaymentProcessingViewData

`uiMessage` → Enumeração de todos os cenários possíveis durante o processamento de informações do cartão, incluindo:

* APPROVED
* NOT\_AUTHORISED
* PLEASE\_ENTER\_PIN
* PROCESSING\_ERROR
* PRESENT\_CARD
* CARD\_READ\_OK\_PLEASE\_REMOVE
* APPROVED\_PLEASE\_SIGN
* AUTHORISING\_PLEASE\_WAIT
* TRY\_ANOTHER\_CARD
* CLEAR\_DISPLAY
* SEE\_PHONE
* PRESENT\_CARD\_AGAIN
* HOLD\_STILL
* UNKNOWN

Uma mensagem padrão é fornecida para exibição na tela, mas os desenvolvedores têm a liberdade de personalizá-la, desde que cumpram as regulamentações da ABECS.
{% endstep %}

{% step %}

### TerminalPaymentCancelledViewData

`reason` → Enumeração de cenários de erro que ocorrem durante a leitura e captura de informações do cartão, incluindo

* TRANSACTION\_WAS\_TERMINATED
* USER\_CANCELLED\_PIN\_PAD
* SESSION\_DEACTIVATED
* DEVICE\_STATE\_FAILURE
* TIME\_CHECK\_ERROR
* UNKNOWN

Uma mensagem padrão é fornecida para exibição na tela, mas os desenvolvedores têm a liberdade de personalizá-la, desde que cumpram as regulamentações da ABECS.
{% endstep %}

{% step %}

### TerminalPaymentSuccessViewData

`result` → `TransactionCompleted` objeto contendo todos os detalhes do pagamento

> **Note:** Isso não garante que a transação foi concluída com sucesso, pois podem ter ocorrido problemas com o adquirente. Todos os campos serão explicados nas seções seguintes.

#### **cardHolder**

Quando disponível, retorna a bandeira do cartão utilizada para a transação:

* MASTERCARD
* VISA
* AMERICAN\_EXPRESS
* DISCOVER
* EFTPOS
* UNKNOWN

#### **discretionaryTagData**

Retorna as Tags EMV lidas pelo SDK. Dois métodos são fornecidos para melhor abstração:

* `getDiscretionaryTagDataHashMap()` → Retorna um array de chave-valor contendo EMVTag e seu valor.
* `getDiscretionaryTagDataPrintable()` → Mesma função acima, mas retorna uma String formatada para exibição.

#### **metaData**

Um ByteArray de metadados retornado pelo backend. Dois métodos estão disponíveis para melhor interpretação::

* `getMetaDataTranslated()` → Retorna um objeto Metadata analisado com informações adicionais.
* `getMetaDataString()` → mesmo que o método acima, mas retorna uma String formatada em JSON.

#### **processingResult**

Este objeto, como uma SealedClass, pode ter duas abstrações:

#### **TransactionApproved**

cardScheme → Quando disponível, retorna a bandeira do cartão utilizada na transação:/

* MASTERCARD
* VISA
* AMERICAN\_EXPRESS
* DISCOVER
* EFTPOS
* UNKNOWN

#### **TransactionNotAuthorised**

reason → Enumeração de motivos de falha na autorização, incluindo:

* ONLINE\_DECLINED
* OFFLINE\_DECLINED
* INVALID\_AUTHORISATION\_DATA
* NO\_CARD\_APPLICATION
* NO\_CARD\_APPLICATION\_SELECTOR\_MISMATCHED
* PROCESSING\_ERROR
* CARD\_ERROR
* UNKNOWN

Uma mensagem padrão é fornecida para exibição na tela, mas os desenvolvedores têm a liberdade de personalizá-la, desde que cumpram as regulamentações da ABECS.

#### **serviceTransactionId**

Um identificador único para a transação (UUID).

#### **uiMessage**

Enumeração de todos os cenários possíveis durante o processamento de informações do cartão:

* ONLINE\_DECLINED
* OFFLINE\_DECLINED
* INVALID\_AUTHORISATION\_DATA
* NO\_CARD\_APPLICATION
* NO\_CARD\_APPLICATION\_SELECTOR\_MISMATCHED
* PROCESSING\_ERROR
* CARD\_ERROR
* UNKNOWN

#### **subMessage**

Tradução para Português Uma enumeração de submensagens que também devem ser exibidas quando retornadas, seguindo os padrões ABECS./
{% endstep %}

{% step %}

### TerminalPaymentErrorViewData

Retornado quando um erro de pagamento é detectado.

* `errorCause` → Enumeração de possíveis falhas
* `exception` → Throwable retornado pelo SDK de pagamento, usado apenas para depuração
* `discretionaryTagData` → Retorno de chave-valor das Tags EMV lidas pelo SDK.

Uma mensagem padrão é fornecida para exibição na tela, mas os desenvolvedores têm a liberdade de personalizá-la desde que cumpram as regulamentações da ABECS.
{% endstep %}
{% endstepper %}


---

# 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://ftcoders.first-tech.com/first-tech-ttp-sdk-pt/area-do-desenvolvedor/reagindo-as-mensagens.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.
