From d3461976cfc7b7298a6f88ac8b9e87e9e74eb7f2 Mon Sep 17 00:00:00 2001 From: adevopg Date: Wed, 15 Jul 2026 11:41:27 +0000 Subject: [PATCH] =?UTF-8?q?store:=20el=20concepto=20del=20cobro=20incluye?= =?UTF-8?q?=20tambi=C3=A9n=20la=20IP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tienda · BNet inna@inna.cl · Cuenta 15#1 · Innadin · IP 213.94.48.99 · Grito de la sirena (45327) x2 La IP ya se capturaba, pero solo se guardaba en home_stripelog.acore_ip. OJO: meterla en el concepto SÍ se la manda a la pasarela, cosa que antes no pasaba (ni Stripe ni SumUp la recibían). Va a propósito, para identificar al pagador en su panel si hay fraude o una devolución a mano. Se omite si no se conoce y también el 0.0.0.0 de relleno, que no aporta nada. Verificado contra checkouts reales de Stripe (test): IPv4 con 1 ítem = 100 chars; IPv6 (39 chars) con 1 ítem = 124; IPv6 con 30 ítems = 172, recortando los ítems. Todos por debajo del límite de 200. Co-Authored-By: Claude Opus 4.8 (1M context) --- web-next/app/api/store/send/route.ts | 1 + web-next/lib/store.ts | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/web-next/app/api/store/send/route.ts b/web-next/app/api/store/send/route.ts index b43e54b..fa94b11 100644 --- a/web-next/app/api/store/send/route.ts +++ b/web-next/app/api/store/send/route.ts @@ -62,6 +62,7 @@ export async function POST(request: Request) { bnetEmail: session.bnetEmail, account: session.username, character, + ip, }) const metadata = { service: 'store', order_ref: ref } diff --git a/web-next/lib/store.ts b/web-next/lib/store.ts index 4d7a0be..9b97707 100644 --- a/web-next/lib/store.ts +++ b/web-next/lib/store.ts @@ -208,7 +208,12 @@ export interface PricedCart { * su panel, así que es lo único que tendrán Stripe/SumUp para identificar un * pago si hay que reclamar o devolver algo a mano. * - * Formato: `Tienda · BNet · Cuenta · · Nombre (id) x2, …` + * Formato: `Tienda · BNet · Cuenta · · IP · Nombre (id) x2, …` + * + * OJO: la IP va aquí a propósito (identificar al pagador si hay fraude o una + * devolución a mano), pero esto se la manda a la pasarela; hasta ahora solo se + * guardaba en `home_stripelog.acore_ip`. Se omite si no se conoce, y también el + * 0.0.0.0 de relleno, que no dice nada. * * Se recorta a `MAX_CONCEPT`: Stripe y SumUp limitan el campo (~250-255), y un * carrito de 100 líneas se pasaría de largo. Se recortan solo los ÍTEMS, nunca @@ -219,13 +224,15 @@ const MAX_CONCEPT = 200 export function storeConcept( cart: PricedCart, - opts: { bnetEmail?: string; account?: string; character: string }, + opts: { bnetEmail?: string; account?: string; character: string; ip?: string }, ): string { + const ip = opts.ip && opts.ip !== '0.0.0.0' ? opts.ip : '' const head = [ 'Tienda', opts.bnetEmail ? `BNet ${opts.bnetEmail}` : null, opts.account ? `Cuenta ${opts.account}` : null, opts.character, + ip ? `IP ${ip}` : null, ] .filter(Boolean) .join(' · ')