Integra Battlepay con SumUp (órdenes battlepay_orders)

- pagos_sumup.py: crear_checkout_battlepay(reference,...) y obtener_checkout()
- battlepay_view: lista las órdenes PENDING de la cuenta de juego
- battlepay_pay_view: crea checkout SumUp para una orden concreta (checkout_reference=reference)
- sumup_webhook: marca la orden PAID (valida estado contra la API de SumUp si falta)
- plantillas account/battlepay.html y partials/pago_sumup.html
- sql/battlepay_sumup.sql (tablas battlepay_orders/battlepay_price) y docs actualizados

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-12 16:48:16 +00:00
parent 215061776b
commit 0fef9ac35b
7 changed files with 317 additions and 60 deletions
+35 -7
View File
@@ -81,14 +81,42 @@ guardan `bnet_id` y `bnet_email` para cambios de contraseña/email.
3. Registrar una cuenta desde la web y comprobar el email de activación.
4. Activar y **probar login en el cliente 3.4.3** (ver nota de verificación).
## Battlepay / SumUp (tienda del cliente)
Integración de la tienda nativa del cliente (Battlepay) con la pasarela SumUp,
usando las tablas `battlepay_orders` / `battlepay_price` del source
(`sql/battlepay_sumup.sql`, aplicar sobre la BD `auth`).
**Flujo:**
1. En el juego, el jugador pulsa *Comprar*; si el producto tiene precio en
`battlepay_price`, el worldserver crea una orden `PENDING` en
`battlepay_orders` (con `account_id` = id de cuenta de juego y una
`reference` única).
2. En la web, `/es/battlepay/` lista las órdenes `PENDING` de la cuenta de juego
seleccionada y permite pagarlas.
3. `/es/battlepay/pay/` crea un checkout de SumUp usando la `reference` de la
orden como `checkout_reference`.
4. El webhook `/es/sumup-webhook/` marca la orden como `PAID`
(`paid_at = UNIX_TIMESTAMP()`), validando el estado contra la API de SumUp si
hace falta.
5. El worldserver entrega el producto y marca la orden `DELIVERED`.
**Código:** `home/pagos_sumup.py` (`crear_checkout_battlepay`, `obtener_checkout`),
vistas `battlepay_view` / `battlepay_pay_view` / `sumup_webhook` en `home/views.py`,
plantillas `account/battlepay.html` y `partials/pago_sumup.html`.
> Nota: `battlepay_orders.account_id` es el **id de cuenta de juego**
> (`account.id`), mientras que `battlePayCredits` (créditos del sistema clásico
> de puntos) vive en la **cuenta bnet** (`battlenet_accounts.id`); se unen por
> `account.battlenet_account`. Esta pasarela usa las órdenes en €, no los créditos.
**Configuración necesaria:**
- Aplicar `sql/battlepay_sumup.sql` en la BD `auth` y rellenar `battlepay_price`
con tus `product_id` reales.
- Configurar el webhook de SumUp apuntando a `https://<tu-dominio>/es/sumup-webhook/`.
- Enlazar `/es/battlepay/` desde el menú de «Mi cuenta» (opcional).
## Pendiente / opcional
- **Battlepay/SumUp**: el source trae `battlePayCredits` (en `battlenet_accounts`)
y las tablas `battlepay_orders` / `battlepay_price` (`sql/custom/battlepay_sumup.sql`).
Ojo: `battlepay_orders.account_id` es el **id de cuenta de juego**
(`account.id`), mientras que `battlePayCredits` está en la **cuenta bnet**
(`battlenet_accounts.id`); se unen por `account.battlenet_account`. La
integración de la pasarela con estas tablas se puede abordar como paso
siguiente.
- Mostrar el email (en lugar de `<bnetId>#1`) como nombre visible en
«Mi cuenta» es un retoque cosmético opcional.