store: el concepto del cobro dice quién compra y qué
Ponía "Compra en la tienda (1 objeto)", que no identifica nada. Ahora: Tienda · BNet inna@inna.cl · Cuenta 15#1 · Innadin · Grito de la sirena (45327) x2 Cuenta Battle.net, cuenta de juego, personaje, y el nombre de cada ítem con su id. Es lo único que Stripe/SumUp enseñan en su panel, así que es lo que hay para identificar un pago cuando toca reclamar o devolver algo a mano. Se recorta a 200 caracteres porque las dos pasarelas limitan el campo (~250) y un carrito grande se pasaría. Se recortan solo los ÍTEMS ("+37 más"), nunca la cabecera: quién ha pagado importa más que el listado, que además queda entero en home_store_order. El recorte quita ítems hasta que quepa TODO con el sufijo incluido; comprobarlo antes de añadir el "+N más" se pasaba igual (206 chars con 12 ítems, visto en un checkout real). priceStoreCart trae ahora también el nombre del ítem, que no leía. Verificado contra checkouts reales de Stripe (test) con 1, 12 y 40 ítems: 82, 167 y 168 caracteres. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { randomUUID } from 'crypto'
|
||||
import { getSession } from '@/lib/session'
|
||||
import { getGameCharacters } from '@/lib/characters'
|
||||
import { priceStoreCart, purchaseStoreCart, storeEuroTotal, createStoreOrder, type StoreCartLine } from '@/lib/store'
|
||||
import { priceStoreCart, purchaseStoreCart, storeEuroTotal, createStoreOrder, storeConcept, type StoreCartLine } from '@/lib/store'
|
||||
import { CARD_MIN_EUR } from '@/lib/store-pricing'
|
||||
import { createCheckoutSession } from '@/lib/stripe'
|
||||
import { createSumUpCheckout, sumupConfigured } from '@/lib/sumup'
|
||||
@@ -56,10 +56,13 @@ export async function POST(request: Request) {
|
||||
|
||||
const site = process.env.SITE_URL || ''
|
||||
const ip = (request.headers.get('x-forwarded-for') || '').split(',')[0].trim() || '0.0.0.0'
|
||||
// Objetos comprados = suma de copias, no número de líneas: 15 copias de un
|
||||
// mismo ítem son "15 objetos", no "1 objeto".
|
||||
const units = cart.lines.reduce((s, l) => s + l.copies, 0)
|
||||
const productName = `Compra en la tienda (${units} objeto${units === 1 ? '' : 's'})`
|
||||
// Concepto con quién compra y qué: es lo único que verá la pasarela en su
|
||||
// panel para identificar el pago (ver `storeConcept`).
|
||||
const productName = storeConcept(cart, {
|
||||
bnetEmail: session.bnetEmail,
|
||||
account: session.username,
|
||||
character,
|
||||
})
|
||||
const metadata = { service: 'store', order_ref: ref }
|
||||
|
||||
if (provider === 'sumup') {
|
||||
|
||||
Reference in New Issue
Block a user