# Crea tokens en tu servidor

La app necesita un token de autenticación POS para aceptar pagos. Tu servidor obtiene el token de la API de MONEI con tu clave API y envía el token a la app.

Nunca pongas la clave API en la app

La clave API se queda en tu servidor. Cualquiera que extraiga una clave API de una app puede usar tu cuenta de MONEI. La app solo recibe el token.

## Solicita un token[​](#request-a-token "Enlace directo al Solicita un token")

Llama a [Create POS Auth Token](https://docs.monei.com/es/apis/rest/pos-auth-token-create.md) desde tu servidor:

* cURL
* Node.js

```
curl -X POST https://api.monei.com/v1/pos/auth-token \

  -H "Authorization: $MONEI_API_KEY" \

  -H "Content-Type: application/json" \

  -d '{"storeId": "<ID de la tienda de MONEI>"}'
```

server.js

```
import {Monei} from '@monei-js/node-sdk';



const monei = new Monei(process.env.MONEI_API_KEY);



const {token} = await monei.posAuthToken.create({storeId: '<ID de la tienda de MONEI>'});

// Envía solo `token` a la app.
```

Respuesta:

```
{"token": "<jwt>"}
```

Envía a la app solo el valor del campo `token`. No envíes el cuerpo JSON completo. El SDK no puede usarlo.

Protege con tu propia autenticación el endpoint que da los tokens a tu app, para que solo tus dispositivos obtengan tokens.

## Campos del cuerpo[​](#body-fields "Enlace directo al Campos del cuerpo")

Los dos campos son opcionales.

| Campo           | Valor                                                                                                                                                                                                                                                                                 |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `storeId`       | El ID de MONEI de la [tienda](https://docs.monei.com/es/manage-account/stores-and-points-of-sale.md#stores) donde está el dispositivo. MONEI registra los pagos en esta tienda. La tienda debe pertenecer a la cuenta de la clave API. Si no, los pagos fallan con "Store not found". |
| `pointOfSaleId` | El ID de un [punto de venta](https://docs.monei.com/es/manage-account/stores-and-points-of-sale.md#points-of-sale) que creaste en MONEI. Nunca uses aquí un identificador del dispositivo. Si no envías `storeId`, la tienda se obtiene del punto de venta.                           |

Encuentras el ID de la tienda en [MONEI Dashboard > Configuración > Tiendas](https://dashboard.monei.com/settings/stores). Consulta [Tiendas y puntos de venta](https://docs.monei.com/es/manage-account/stores-and-points-of-sale.md).

## Reglas del token[​](#token-rules "Enlace directo al Reglas del token")

* **Un token para cada dispositivo.** Guarda en caché el token de cada dispositivo. Nunca obtengas un token nuevo para cada pago.
* **Una cuenta para cada token.** Un token pertenece a la cuenta de la clave API que lo creó. Todos los pagos con el token van a esa cuenta.
* **Renueva antes de que caduque.** Un token es válido durante 24 horas. Obtén un token nuevo antes de que caduque. Después, llama otra vez a `prepare` en la app con el token nuevo. Consulta [Prepara el lector](https://docs.monei.com/es/monei-pay/in-app-tap-to-pay/accept-payments.md#prepare).
* **Varias cuentas de MONEI.** Si tienes más de una cuenta de MONEI (por ejemplo, entidades jurídicas distintas), cada dispositivo usa la clave API de la cuenta a la que pertenece su tienda. Usa una cuenta en cada dispositivo. MONEI todavía no ha probado un cambio a otra cuenta en un mismo dispositivo.
* **Prueba y producción.** Una clave API del modo de prueba da un token de prueba. Una clave API de producción da un token de producción. No uses tokens de prueba y de producción en el mismo dispositivo. Consulta [Modo de prueba](https://docs.monei.com/es/monei-pay/in-app-tap-to-pay/test-and-go-live.md#test-mode).

## Ciclo de vida del token[​](#token-lifecycle "Enlace directo al Ciclo de vida del token")

<!-- -->

1. Al iniciarse, la app pide a tu servidor el token del dispositivo.
2. Tu servidor devuelve el token en caché, u obtiene uno nuevo de MONEI.
3. La app llama a `prepare` con el token. El SDK guarda el token solo en memoria, así que llama a `prepare` después de cada inicio.
4. Antes de que el token caduque, la app obtiene un token nuevo.
5. La app llama otra vez a `prepare` con el token nuevo.

Si el token caduca antes de que la app lo renueve, `prepare` y `acceptPayment` lanzan `tokenExpired`. No se produce ningún pago. Obtén un token nuevo, llama a `prepare` y vuelve a intentarlo.

## Preguntas frecuentes[​](#common-questions "Enlace directo al Preguntas frecuentes")

### ¿Puedo usar un token en varios dispositivos?[​](#one-token-several-devices "Enlace directo al ¿Puedo usar un token en varios dispositivos?")

No. Usa un token para cada dispositivo y guárdalo en caché para ese dispositivo.

### ¿Por qué fallan los pagos con "Store not found"?[​](#store-not-found "Enlace directo al ¿Por qué fallan los pagos con \"Store not found\"?")

El `storeId` de la solicitud del token no pertenece a la cuenta de la clave API. Usa una tienda de la misma cuenta, o usa la clave API de la cuenta a la que pertenece la tienda.

### ¿Necesito un token nuevo para cada pago?[​](#token-per-payment "Enlace directo al ¿Necesito un token nuevo para cada pago?")

No. Un token es válido durante 24 horas, para todos los pagos de ese dispositivo. Renuévalo antes de que caduque.
