store: pagar también con Stripe y SumUp (tarjeta), además del saldo PD/PV

Selector de forma de pago en el carrito (Saldo PD/PV · Stripe · SumUp), como el
resto de servicios. Con tarjeta, el carrito se convierte a euros (100 PD = 1 €,
200 PV = 1 €), se guarda como pedido y se entrega tras confirmarse el pago.

- BD: tabla home_store_order (ref, cuenta, personaje, items, importe) para no
  depender del límite de metadata de la pasarela (sql/home_store_order.sql).
- lib/store: storeEuroTotal, createStoreOrder, fulfillStoreOrder.
- paid-services: servicio 'store' (fulfill = enviar el pedido por order_ref);
  la entrega la dispara service-success/reconciliación/webhook como los demás.
- /api/store/send: rama provider stripe/sumup (crea pedido + checkout, mínimo
  1 €/0,50 €) además del pago con saldo.
- StoreBrowser: selector Saldo/Stripe/SumUp; con tarjeta redirige a la pasarela.
- i18n Store (payMethod/payBalance/payStripe/paySumUp/confirmCard/amountTooLow)
  y Paid.store (title/success). Verificado: euros 200PD+28PV=2,14 €, pedido y
  fulfill por order_ref (SOAP real pendiente, worldserver caído).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-15 00:14:01 +00:00
parent 5a903ef627
commit f0b006404c
7 changed files with 215 additions and 13 deletions
+14 -2
View File
@@ -364,6 +364,11 @@
"title": "Renombrar hermandad",
"pay": "Renombrar por {price} €",
"success": "La hermandad ha sido renombrada a \"{name}\". Puede que los miembros conectados deban reconectar para verlo."
},
"store": {
"title": "Tienda",
"pay": "Comprar por {price} €",
"success": "¡Objetos enviados al personaje {name}! Revisa el correo dentro del juego."
}
},
"SecurityToken": {
@@ -1955,10 +1960,17 @@
"deliveryFailed": "No se pudieron enviar los objetos (servidor de juego no disponible). Se te ha devuelto el saldo.",
"invalidCharacter": "El personaje no es válido.",
"emptyCart": "Tu carrito está vacío.",
"generic": "Ha ocurrido un error. Inténtalo de nuevo."
"generic": "Ha ocurrido un error. Inténtalo de nuevo.",
"amountTooLow": "El importe mínimo para pagar con tarjeta es {min} €."
},
"newsTitle": "Novedades",
"newsIntro": "Lista de adiciones realizadas en base a las sugerencias de la comunidad en nuestro foro.",
"newsDate": "Noviembre 2024"
"newsDate": "Noviembre 2024",
"payMethod": "Forma de pago",
"payBalance": "Saldo PD/PV",
"payStripe": "Tarjeta (Stripe)",
"paySumUp": "Tarjeta (SumUp)",
"confirmCard": "¿Pagar {eur} € con tarjeta y enviar los objetos a {character}?",
"amountTooLow": "El importe mínimo para pagar con tarjeta es {min} €."
}
}