# Seguridad

#### Firma

Todas las llamadas a la API de Vita Business deben firmarse utilizando el algoritmo HMAC-SHA256, y el contenido de la firma incluida en el encabezado de `Autorización` como se documenta a continuación. Este encabezado debe tener como prefijo la versión de firma y la función hash utilizada, que actualmente es **V2-HMAC-SHA256**.

| Header          | Tipo   | Descripción                                                                      |
| --------------- | ------ | -------------------------------------------------------------------------------- |
| x`-date`        | String | ISO8601 Datetime with Timezone. Ejemplo `2018-07-12T13:46:28.629Z`               |
| x`-login`       | String | Business xLogin                                                                  |
| x`-api-key`     | String | Business xTransKey                                                               |
| `Content-Type`  | String | application/json                                                                 |
| `Authorization` | String | \<auth version>, Signature: \<hmac(secretKey, "`X-Login`+`X-Date`+RequestBody")> |

#### Ejemplo de cabecera de Authorization

```
Authorization: V2-HMAC-SHA256, Signature: 80ebe700c5db952bd4c60ae53fe1971ec6e4fe84dc0922b67eca6b3e18707260
```

#### Ejemplos de generación de firmas HAMC en los lenguajes mas populares

{% tabs %}
{% tab title="Ruby" %}

```
RequestBody = hash.sort.join
signature = OpenSSL::HMAC.hexdigest('sha256', secretKey, "#{$X-Login}#{$X-Date}#{RequestBody}")

```

{% endtab %}

{% tab title="Otros lenguajes" %}

| Lenguaje      | Código                                                                                    |
| ------------- | ----------------------------------------------------------------------------------------- |
| PHP           | `$signature = hash_hmac("sha256", "$X-Login$X-Date$RequestBody", $secretKey);`            |
| Python        | `signature = hmac.new(secretKey, X-Login+X-Date+RequestBody, hashlib.sha256).hexdigest()` |
| {% endtab %}  |                                                                                           |
| {% endtabs %} |                                                                                           |

{% hint style="info" %}
En la **zona de integraciones** de la cuenta **Vita Wallet del comercio**, puede encontrar un **botón** para solicitar las credenciales de acceso para **Vita Business**, haremos llegar un correo con las instrucciones.
{% endhint %}

![](https://164440378-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOy15OO5xtMKsn6jPlP0l%2Fuploads%2F0323j3m2fqIiVvboOpvf%2Fojo.png?alt=media\&token=7c500f2f-fe0b-4739-862f-13a7488ee155)

{% hint style="warning" %}
Para hacer uso de los servicios de Vita Business **tendrá** que registrar las **direcciones IP** en la zona de integración, una vez que sus pruebas sean exitosas, deberá comunicarse con nosotros a **<soporte@vitawallet.io>** para registrar las direcciones IP de su comercio en el entorno **productivo**.\
\
**NOTA**\
Las direcciones IP en el entorno productivo **DEBEN** ser **FIJAS** (no deben variar).
{% endhint %}

{% hint style="warning" %}
El **hash** de **request** se acumuló en una sola cadena de todos los pares **clave-valor,** ordenados **alfabéticamente** y **concatenados sin separadores.**

Si el **body** del **request** es nulo, entonces la firma debe calcularse sin el **RequestBody.**

**Ejemplo**\
\
`hash = { "order": "xyz", "amount": 400 }`\
`RequestBody = hash.sort.join`\
`# amount400orderxyz`
{% endhint %}
