# Autenticar Requisições

A segurança na Get Smart API Cloud é garantida por meio de uma assinatura digital incluída em cada requisição e resposta.  Este guia explica como gerar essa assinatura usando sua Merchant Secret Key (Chave Secreta do Estabelecimento) e como verificar as respostas enviadas pelo servidor.

## A Lógica de Assinatura

A API não utiliza um Bearer token padrão ou Basic Auth. Em vez disso, ela utiliza um mecanismo de assinatura customizado baseado no algoritmo de hash **SHA-256**.

Cada envelope de mensagem JSON contém dois campos de nível superior:

1. `info`: O payload real de dados.  
2. `signature`: O hash criptográfico que verifica o payload `info`.

### O Algoritmo

Para gerar uma assinatura válida, siga esta sequência específica:

1. **Extrair o Payload:** Pegue todo o conteúdo do objeto JSON `info`.  
2. **Minimizar o JSON:** Certifique-se de que a string JSON esteja "minimizada" (remova todos os espaços em branco extras, tabulações e quebras de linha). Ela deve começar com `{` e terminar com `}`.  
3. **Adicionar o Segredo:** Adicione a sua **Merchant Secret Key** diretamente ao final da string JSON minimizada.  
4. **Hash:** Calcule o hash **SHA-256** desta string combinada.  
5. **Formato:** O hash resultante (string hexadecimal) é a sua assinatura.

## Exemplo Passo a Passo

Vamos percorrer o processo de geração utilizando os dados de exemplo fornecidos no manual de integração.

**Credenciais:**

* **Código do Estabelecimento:** `777888991`  
* **Chave Secreta:** `AAABBB`

### Passo 1: Construir o Objeto `info`

```json
{
  "comercio": "777888991",
  "timestamp": "20250428 111217",
  "terminal": 1,
  "notificacion": {
    "urlNotificacion": "[http://www.miservicio.es/servicio/notificaciones/tpvpc](http://www.miservicio.es/servicio/notificaciones/tpvpc)",
    "correoNotificacion": "email@comercio.es"
  },
  "datosOperacion": {
    "importe": "15.00",
    "factura": "FACTURA1"
  }
}
```

### Passo 2: Minimizar a String JSON

Serialize o objeto em uma string sem espaçamento:

```json
{"comercio":"777888991","timestamp":"20250428 111217","terminal":1,"notificacion":{"urlNotificacion":"[http://www.miservicio.es/servicio/notificaciones/tpvpc](http://www.miservicio.es/servicio/notificaciones/tpvpc)","correoNotificacion":"email@comercio.es"},"datosOperacion":{"importe":"15.00","factura":"FACTURA1"}}
```

### Passo 3: Adicionar a Chave Secreta

Adicione a chave `AAABBB` ao final:

```json
{"comercio":"777888991","timestamp":"20250428 111217","terminal":1,"notificacion":{"urlNotificacion":"[http://www.miservicio.es/servicio/notificaciones/tpvpc](http://www.miservicio.es/servicio/notificaciones/tpvpc)","correoNotificacion":"email@comercio.es"},"datosOperacion":{"importe":"15.00","factura":"FACTURA1"}}AAABBB
```

### Passo 4: Calcular o Hash SHA-256

Passar a string acima por uma calculadora SHA-256 resulta em: `0ED5D16230C0E2683CF304A713154B90D887D592EF72437AA214CBA305B00646`

### Passo 5: Formar a Requisição Final

Coloque o hash no campo `signature`:

```json
{
  "info": {
    ... (the JSON object from Step 1) ...
  },
  "signature": "0ED5D16230C0E2683CF304A713154B90D887D592EF72437AA214CBA305B00646"
}
```

## Verificando Respostas

Quando a API responde, ela inclui uma `signature` calculada usando a **mesma Chave Secreta**. Para verificar se a resposta é autêntica e não foi adulterada:

1. Extraia o objeto `info` da resposta.  
2. Execute exatamente os mesmos passos de geração de assinatura (Minimizar -> Adicionar Chave -> Hash).  
3. Compare o hash calculado com a `signature` recebida na resposta.

<Callout type="tip">

Sempre verifique a assinatura da resposta antes de confiar nos códigos de status ou resultados da transação dentro do bloco `info`.

</Callout>

## Solução de Problemas de Assinatura

O erro mais comum é `TPC0101: Firma Incorrecta` (Assinatura Incorreta).

| Causa Comum | Solução |
| :---- | :---- |
| **Formatação JSON** | Certifique-se de que está fazendo o hash da string *exata* que está enviando. Algumas bibliotecas JSON adicionam espaços ou reordenam chaves. A assinatura é sensível à representação específica em nível de byte. |
| **Codificação de Caracteres** | Certifique-se de que a string esteja codificada em **UTF-8** antes de fazer o hash. |
| **Confusão de Chaves** | Verifique se você está usando a chave correta para o ambiente (Chave de Teste para URL de Sandbox, Chave de Produção para URL de Produção). |

## Próximos Passos

Agora que você pode se autenticar, você está pronto para explorar a arquitetura principal ou implementar fluxos de pagamento específicos.

* [**Arquitetura da API Cloud**](/pt/get-smart/get-smart-api-cloud/core-concepts/api-cloud-architecture): Entenda a natureza síncrona vs. assíncrona do sistema.  
* [**Processar Pagamentos em Etapa Única**](/pt/get-smart/get-smart-api-cloud/integration-guides/process-single-step-payments): Aplique esta lógica de assinatura a uma transação de pagamento real.