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": "Rename guild",
"pay": "Rename for {price} €",
"success": "The guild has been renamed to \"{name}\". Online members may need to reconnect to see it."
},
"store": {
"title": "Store",
"pay": "Buy for {price} €",
"success": "Items sent to character {name}! Check your in-game mail."
}
},
"SecurityToken": {
@@ -1955,10 +1960,17 @@
"deliveryFailed": "The items could not be sent (game server unavailable). Your balance has been refunded.",
"invalidCharacter": "Invalid character.",
"emptyCart": "Your cart is empty.",
"generic": "An error occurred. Please try again."
"generic": "An error occurred. Please try again.",
"amountTooLow": "The minimum amount to pay by card is {min} €."
},
"newsTitle": "News",
"newsIntro": "List of additions made based on the community's suggestions in our forum.",
"newsDate": "November 2024"
"newsDate": "November 2024",
"payMethod": "Payment method",
"payBalance": "PD/VP balance",
"payStripe": "Card (Stripe)",
"paySumUp": "Card (SumUp)",
"confirmCard": "Pay {eur} € by card and send the items to {character}?",
"amountTooLow": "The minimum amount to pay by card is {min} €."
}
}