> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Transacciones idempotentes y patrones de reintento en Economy v2

> Use IdempotencyId en las escrituras de inventario de PlayFab Economy v2 para reintentar de forma segura tras errores de red y evitar compras o concesiones duplicadas.

<Info>
  Economy v2 ya está disponible con carácter general. Para obtener soporte técnico y enviar comentarios, vaya al [foro de PlayFab](https://community.playfab.com).
</Info>

Los errores de red, los tiempos de espera agotados y las solicitudes duplicadas son inevitables en los juegos en producción. Economy v2 proporciona **IdempotencyId** para evitar transacciones duplicadas. Esta característica garantiza que una operación se procese solo una vez, aunque la misma solicitud se envíe varias veces.

Para el control de simultaneidad optimista (garantizar que una escritura solo se realice correctamente si el inventario no ha cambiado desde la última lectura), consulte [ETags y control de simultaneidad](/services/playfab/economy-monetization/economy-v2/tutorials/etags-and-concurrency-control).

## Requisitos previos

* Una [cuenta de desarrollador de PlayFab](https://developer.playfab.com/en-us/sign-up).
* Un título creado en [Game Manager](https://developer.playfab.com/).
* Al menos un artículo de catálogo publicado y una moneda virtual.

## Funcionamiento

Cuando incluye un `IdempotencyId` en una solicitud de escritura de inventario, PlayFab almacena ese identificador durante **14 días**. Si llega otra solicitud con el mismo `IdempotencyId`, PlayFab devuelve el resultado de la solicitud original sin procesar la operación de nuevo.

## API compatibles

`IdempotencyId` se admite en todas las API de escritura de inventario:

* [AddInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/add-inventory-items)
* [SubtractInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/subtract-inventory-items)
* [PurchaseInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/purchase-inventory-items)
* [TransferInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/transfer-inventory-items)
* [DeleteInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/delete-inventory-items)
* [UpdateInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/update-inventory-items)
* [ExecuteInventoryOperations](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/execute-inventory-operations)

## Ejemplo: compra segura con reintento

En este escenario, un jugador compra una espada láser. El cliente genera un `IdempotencyId` único (por ejemplo, un GUID) antes de enviar la solicitud:

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "{{PlayerID}}"
    },
    "Item": {
        "Id": "{{LaserSwordID}}"
    },
    "Amount": 1,
    "PriceAmounts": [
        {
            "ItemId": "{{DiamondCurrencyID}}",
            "Amount": 5
        }
    ],
    "IdempotencyId": "b7e3f1a2-9c4d-4e8f-a1b2-3c4d5e6f7a8b"
}
```

Si el cliente no recibe respuesta (por ejemplo, por un tiempo de espera de red agotado), puede reintentar de forma segura exactamente la misma solicitud con el mismo `IdempotencyId`. PlayFab reconoce el duplicado y devuelve el resultado original. Al jugador se le cobra solo una vez.

## Procedimientos recomendados

* **Genere un identificador único por operación lógica**: use un GUID o UUID. No reutilice el mismo identificador para operaciones diferentes.
* **Genere el identificador en el lado cliente antes del primer intento**: esta práctica garantiza que todos los reintentos usen el mismo identificador.
* **No cambie el cuerpo de la solicitud entre reintentos**: usar el mismo `IdempotencyId` con un cuerpo de solicitud diferente provoca un error de conflicto.
* **Los identificadores expiran a los 14 días**: después de ese plazo, el mismo identificador puede volver a usarse para una nueva operación.

## Las API de canje son automáticamente idempotentes

Las API de canje de los marketplaces (`RedeemAppleAppStoreInventoryItems`, `RedeemGooglePlayInventoryItems`, `RedeemMicrosoftStoreInventoryItems`, `RedeemSteamInventoryItems`) no requieren un `IdempotencyId`. Son idempotentes de forma inherente. Cada recibo o token del marketplace solo puede canjearse una vez. Una segunda llamada con el mismo recibo devuelve un resultado correcto, pero no concede nada.

## Escenarios comunes

| Escenario                                                                 | Enfoque recomendado                                                                                                                    |
| ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Compra en el lado cliente (el jugador compra un artículo)                 | Genere un GUID antes del primer intento y reintente con el mismo identificador si se agota el tiempo de espera.                        |
| Concesión de recompensas en el lado servidor (finalización de una misión) | Use un identificador determinista derivado de la misión y el jugador (por ejemplo, `questId-playerId`) para evitar concesiones dobles. |
| Canje en el marketplace                                                   | No se necesita `IdempotencyId`: las API de canje son automáticamente idempotentes.                                                     |

## Consulte también

* [ETags y control de simultaneidad](/services/playfab/economy-monetization/economy-v2/tutorials/etags-and-concurrency-control)
* [Información general del inventario](/services/playfab/economy-monetization/economy-v2/inventory#idempotency)
* [Prevención del fraude](/services/playfab/economy-monetization/economy-v2/fraud-prevention)
* [ExecuteInventoryOperations](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/execute-inventory-operations)


## Related topics

- [ETags y control de simultaneidad en Economy v2](/es/services/playfab/economy-monetization/economy-v2/tutorials/etags-and-concurrency-control.md)
- [Tablas de botín y botín aleatorio en Economy v2](/es/services/playfab/economy-monetization/economy-v2/tutorials/drop-tables-and-randomized-loot.md)
- [Prevención de fraude, canje y validación de recibos](/es/services/playfab/economy-monetization/economy-v2/fraud-prevention/index.md)
- [Información general de Economy v2](/es/services/playfab/economy-monetization/economy-v2/overview.md)
- [Preguntas frecuentes sobre Economy versión 2 (V2)](/es/services/playfab/economy-monetization/economy-v2/faq.md)
