# Autenticar solicitudes

La seguridad en Get Smart API Cloud se garantiza mediante una firma digital incluida en cada solicitud y respuesta. Esta guía explica cómo generar esta firma utilizando tu clave del comercio y cómo verificar las respuestas enviadas por el servidor.

## La lógica de la firma

La API no utiliza un Bearer token estándar ni Basic Auth. En su lugar, utiliza un mecanismo de firma personalizado basado en el algoritmo de hash **SHA256**.

Cada envolvente de mensaje JSON contiene dos campos de nivel superior:

1. `info`: El payload de datos real.  
2. `signature`: El hash criptográfico que verifica el payload `info`.

### El algoritmo

Para generar una firma válida, sigue esta secuencia específica:

1. **Extraer el payload:** Toma todo el contenido del objeto JSON `info`.  
2. **Minimizar el JSON:** Asegúrate de que la cadena JSON esté "minimizada" (elimina todos los espacios en blanco adicionales, tabulaciones y saltos de línea). Debe comenzar con `{` y terminar con `}`.  
3. **Añadir el secreto:** Añade tu **clave del comercio** directamente al final de la cadena JSON minimizada.  
4. **Hash:** Calcula el hash **SHA256** de esta cadena combinada.  
5. **Formato:** El hash resultante (cadena hexadecimal) es tu firma.

## Ejemplo paso a paso

Vamos a repasar el proceso de generación utilizando los datos de ejemplo proporcionados en el manual de integración.

**Credenciales:**

* **Código de comercio:** `777888991`  
* **Clave del comercio:** `AAABBB`

### Paso 1: Construir el 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"
  }
}
```

### Paso 2: Minimizar la cadena JSON

Serializa el objeto en una cadena sin espacios:

```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"}}
```

### Paso 3: Añadir la clave del comercio

Añade la clave `AAABBB` al 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
```

### Paso 4: Calcular el hash SHA256

Al pasar la cadena anterior por una calculadora SHA256 se obtiene: `0ED5D16230C0E2683CF304A713154B90D887D592EF72437AA214CBA305B00646`

### Paso 5: Formar la solicitud final

Coloca el hash en el campo `signature`:

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

## Verificar respuestas

Cuando la API responde, incluye una `signature` calculada utilizando la **misma clave del comercio**. Para verificar que la respuesta es auténtica y no ha sido alterada:

1. Extrae el objeto `info` de la respuesta.  
2. Realiza exactamente los mismos pasos de generación de firma (Minimizar -> Añadir clave -> Hash).  
3. Compara el hash calculado con la `signature` recibida en la respuesta.

<Callout type="tip">

Verifica siempre la firma de la respuesta antes de confiar en los códigos de estado o los resultados de la transacción dentro del bloque `info`.

</Callout>

## Solución de problemas de firma

El error más común es `TPC0101: Firma Incorrecta` (Incorrect Signature).

| Causa común | Solución |
| :---- | :---- |
| **Formato JSON** | Asegúrate de que estás calculando el hash de la cadena *exacta* que estás enviando. Algunas bibliotecas JSON añaden espacios o reordenan claves. La firma es sensible a la representación específica a nivel de bytes. |
| **Codificación de caracteres** | Asegúrate de que la cadena esté codificada en **UTF-8** antes de calcular el hash. |
| **Confusión de claves** | Verifica que estás utilizando la clave correcta para el entorno (Clave de test para la URL de Sandbox, Clave de producción para la URL de Producción). |

## Próximos pasos

Ahora que puedes autenticarte, estás listo para explorar la arquitectura principal o implementar flujos de pago específicos.

* [**Arquitectura de API Cloud**](/es/get-smart/get-smart-api-cloud/core-concepts/api-cloud-architecture): Comprende la naturaleza síncrona frente a la asíncrona del sistema.  
* [Procesar un pago](/es/get-smart/get-smart-api-cloud/integration-guides/process-single-step-payments): Aplica esta lógica de firma a una transacción de pago real.