Poner precio a un catálogo contra una tienda que no controlas
- Publicado el
- • 4 min de lectura•--- vistas
Si revendes, tus precios son una función de los precios de otro. Suena a problema de integración. En realidad es un problema de caché, y equivocarse ahí es como una tienda acaba mintiendo sobre sus precios o cayéndose cuando la tienda de origen tiene una mala tarde.
Por qué fallan los dos enfoques obvios
Consultar al cargar la página. Una página de catálogo con treinta productos se convierte en treinta llamadas HTTP salientes. La carga queda limitada por la más lenta, así que cuando el origen va lento tu tienda va lenta, y cuando está caído tu tienda está caída. Has cogido una dependencia que no puedes arreglar y la has puesto delante de cada visita.
Exportar cada noche. Sin riesgo de latencia, pero la tienda se equivoca durante hasta veinticuatro horas. Las rebajas del origen empiezan y terminan sin avisar, y quien llegue después de que acabe una paga un precio que ya no puedes sostener. O te comes la diferencia en miles de pedidos.
Ninguno es un problema de ajuste fino. Los dos están mal de raíz: uno acopla la disponibilidad, el otro acopla la frescura.
Caché de vida corta
El camino intermedio es poco llamativo y correcto: consultar de forma programada, guardar el resultado y servir desde el almacén. En WordPress eso es un transient con caducidad.
Lo que lo hace funcionar es que la página nunca dispara una consulta. El renderizado lee la caché y solo la caché. Si falta el valor, la página muestra el último precio conocido o esconde el producto; no va a preguntar. La actualización ocurre en cron, fuera de banda, donde una respuesta lenta del origen no le cuesta nada a nadie.
La frescura pasa a ser un dial en lugar de una propiedad de la arquitectura. A un catálogo que cambia a diario le basta una actualización diaria; uno que se mueve cada hora hay que releerlo cada hora. Estás eligiendo cuánto estás dispuesto a equivocarte, que es la forma honesta de esta decisión.
Pregunta por todas las regiones y luego decide
Aquí viene la parte propia de la reventa. El mismo producto suele tener un precio distinto en cada tienda regional, así que «el precio del origen» no es un número. Es un conjunto.
Colapsar ese conjunto en un número es una decisión de negocio, no técnica, y cambia. Tomar el precio regional legítimo más bajo. Tomar una región fija por normativa fiscal. Tomar la mediana más un margen. Cualquiera puede ser correcto, y cuál lo es depende del mercado y de la ley.
Así que ponlo tras una interfaz:
interface IProductPriceStrategy
{
public function choose(array $pricesByCurrency): Price;
}
final class ChooseLowestPriceStrategy implements IProductPriceStrategy { /* … */ }
La estrategia es el único sitio que conoce la regla. Cambiarla es una clase, no una cacería por el código en busca de cada lugar donde se calculó un precio. Esto importa más de lo que parece: las reglas de precio son justo el tipo de lógica que acaba copiada en una plantilla, un endpoint REST y un script de exportación, y luego diverge.
Tipa las respuestas del origen
Parsea a DTOs tipados en vez de leer claves de array sobre la marcha:
$prices = GetPricesResponse::fromArray($body); // lanza si el formato cambió
Si no, una API que renombra un campo te dará null, que se convierte en 0, que se convierte en un producto a precio cero en una tienda en producción. El fallo que quieres es una excepción ruidosa durante la actualización programada, donde no la mira nadie salvo el log. El fallo que obtienes sin DTOs es silencioso y lo descubre un cliente.
Lo que cuesta
La caché es una segunda fuente de verdad, y las segundas fuentes de verdad se desincronizan. Un producto retirado en el origen sigue en tu catálogo hasta que la siguiente actualización lo note. Eso hay que tratarlo de forma explícita: o la actualización reconcilia las bajas, o los productos llevan una marca de «visto por última vez» y los rancios se ocultan.
También hay un problema de arranque en frío. Una caché vacía tras un despliegue significa que ningún producto tiene precio hasta que termine la primera actualización. Calentarla como parte del despliegue es fácil de olvidar y muy visible en producción.
La regla general
Cuando dependes de un sistema que no controlas, decide por separado cuánta frescura necesitas y cuánta disponibilidad. Consultar en línea acopla ambas al otro sistema. La caché te deja comprar disponibilidad pagando con obsolescencia, y el tipo de cambio de esa operación lo eliges tú.
Relacionado
Proyectos

CactusPlay - Tienda de juegos con una red de colaboradores verificados
Antes: los compradores de la CEI comparaban a mano los precios de PlayStation y Xbox entre vendedores dispersos, y cada pedido lo cumplían los propios fundadores. Después: una tienda con catálogo en vivo y un CRM al que podía sumarse cualquier colaborador verificado con datos de pago turcos para tomar pedidos y ganar con ellos. Resultado: más de 20 000 posiciones por hora, cambios de precio que llegan a la tienda y a Yandex.Market sin intervención humana, y un cumplimiento que ya no depende de un solo par de manos.
Artículos
Un widget de soporte que ya sabe con quién habla
Pegar un widget de chat en una plantilla funciona hasta que el tema se actualiza, hasta que hay que cambiar un ajuste o hasta que el widget añade una consulta a la base de datos en cada página. Tres decisiones pequeñas lo arreglan todo.
Que la entrega sea consecuencia del pago, no una tarea que alguien ejecuta
La entrega manual de productos digitales está limitada por el horario laboral y protegida solo por la atención de alguien. Mover la entrega a los eventos del pedido cambia lo que el sistema garantiza, y la API es lo que impide que un segundo canal se convierta en una segunda implementación.
Cobrar a través de una pasarela que pertenece a otro sitio
Cuando la pasarela de pago está contratada por otro sitio, el comprador se marcha y tú tienes que enterarte del resultado de algún modo. Las dos formas en que esta integración suele fallar son una llamada de retorno sin autenticar y dos registros de pedido que se desincronizan.
Disponible para colaboración por contrato
Estoy disponible para colaborar por contrato. Si tiene una idea de proyecto interesante, reserve una llamada por Calendly.
Agenda una llamada de 30 min