Guía de integración · Checkout alojado

Tu producto.
Un enlace para cobrar.

Conecta tu web o aplicación con Kairos Pay. Comparte productos publicados en Kairos Mall y recibe notificaciones firmadas de sus ventas.

Checkout en USDCSDK sin claves en el navegadorFiat pendiente de habilitación

Empieza con tu tienda existente.

Esta versión reutiliza el catálogo, los pedidos y la billetera de tu tienda en el Mall. No requiere abrir otra cuenta de Kairos ni copiar claves privadas.

01 / TIENDA

Habilita tus ventas

Usa tu perfil verificado y cuenta de efectivo activa según la política del Mall. La billetera de la tienda recibe los USDC.

02 / PRODUCTO

Publica en el Mall

Configura precio, disponibilidad y condiciones. Conserva el identificador del producto publicado para tu enlace.

03 / CHECKOUT

Comparte tu enlace

El comprador revisa el producto en Kairos Pay y continúa en Kairos Wallet para completar y autorizar su pedido.

Un catálogo, una fuente de verdad. El enlace identifica el producto. El servidor determina vendedor, precio, inventario y condiciones de cobro. No se aceptan importes ni billeteras de destino proporcionados por el botón.

Añade un botón a tu proyecto.

Desde Mi tienda → Kairos Pay puedes elegir un producto y copiar su enlace, QR o botón. Para integrarlo por código necesitas el ID UUID de un producto real. No se solicita ninguna firma ni se crea un pedido al generar el enlace.

HTML + JavaScriptSDK v1.3
<script src="https://kairos777.com/kairos-pay.js?v=1.3.0"></script>
<div id="comprar"></div>
<script>
  const boton = KairosPay.createCheckoutButton({
    productId: 'UUID_DE_TU_PRODUCTO',
    label: 'Pagar con Kairos Pay'
  });
  document.getElementById('comprar').appendChild(boton);
</script>

Sustituye el marcador por un UUID válido de tu tienda. createCheckoutButton devuelve un enlace accesible y sólo admite productId y label. El destino, la cantidad final y el importe no se configuran en el SDK.

MétodoUso
getCheckoutUrl(productId)Devuelve el enlace HTTPS de checkout para compartirlo en tu web, correo o campaña.
openCheckout(productId)Abre el checkout en la misma pestaña, después de una acción del comprador. No cobra ni confirma una venta.
createCheckoutButton({ productId, label })Crea un elemento <a> listo para insertar. No necesita init(), wallet del vendedor, precio ni clave API.
createMallButton({ productId, label })Conserva el acceso directo existente al producto dentro de Kairos Wallet.
Sin JavaScriptEnlace directo
https://kairos777.com/pay-checkout?product=UUID_DE_TU_PRODUCTO

Los enlaces no aceptan redirecciones arbitrarias, un importe alternativo ni un destinatario de pago. No uses onSuccess del SDK antiguo como prueba de una venta del Mall.

Entrega sólo una venta confirmada.

Abrir una página de retorno, volver a la tienda o ver un hash no demuestra que el vendedor haya recibido el pago.

  1. El comprador autoriza su pedido en la Wallet. Allí se revisan el importe final, la red y los costos aplicables.
  2. Kairos comprueba el pago en la cadena. El pedido se acredita al verificar la transacción, su destinatario y la finalización requerida.
  3. Tu servidor recibe order.paid. Comprueba firma, tienda e identidad del pedido antes de entregar el producto o licencia.
  4. Procesa cada evento una sola vez. Guarda su id en tu base de datos y vincúlalo con tu operación local dentro de una transacción.
Trading Pro Hub: la notificación de pago puede alimentar tu sistema de licencias; la entrega o activación de una licencia debe implementarse y comprobarse en ese sistema. Un clic en el checkout no activa una licencia.

Conecta las notificaciones del negocio.

En Kairos Wallet, abre tu tienda y la sección Kairos Pay → Integraciones · webhooks. Registra la URL HTTPS pública de tu servidor. Guarda el secreto que se muestra una sola vez en la configuración segura del servidor.

CampoContrato de entrega
x-kairos-firmat=TIMESTAMP_MS,v1=HMAC_HEX. HMAC-SHA256 sobre timestamp + "." + cuerpo_original, con el secreto textual de esa suscripción.
x-kairos-eventoTipo de evento. Usa el tipo del cuerpo verificado como autoridad; esta cabecera no sustituye la firma.
Cuerpo JSONid, tipo, tienda, creadoEn y datos. En order.paid, los datos incluyen pedidoId, totalUsdc, txHash y chainId.
ConfirmaciónResponde con HTTP 2xx después de guardar el evento de forma duradera. Los avisos pueden repetirse y no se garantiza su orden de llegada.
ReintentosHasta cinco intentos por entrega. Comprueba el registro de entregas y reconcilia cualquier fallo; no dependas de reintentos ilimitados.

Productos digitales y servicios

El catálogo distingue fisico, digital y servicio. La modalidad queda fijada al crear el pedido. Por compatibilidad, order.shipped también comunica una entrega digital registrada por el vendedor: comprueba datos.requiereEnvio y datos.tipoCumplimiento antes de tratarla como un envío físico. La nota privada de acceso se muestra únicamente al comprador autenticado, no en el webhook. La recepción del comprador es un paso separado.

Verificar la firma en Node.js

Conserva el cuerpo como Buffer antes de procesar JSON. El secreto hexadecimal se usa como texto, sin convertirlo a bytes hexadecimales. El reloj del servidor debe estar sincronizado.

Node.js · función de verificaciónBackend exclusivamente
const crypto = require('node:crypto');

function verifyKairosSignature(rawBody, signature, secret, now = Date.now()) {
  if (!Buffer.isBuffer(rawBody) || rawBody.length > 65536
      || typeof secret !== 'string' || secret.length < 32) return false;
  const parts = /^t=(\d+),v1=([a-f0-9]{64})$/.exec(String(signature || ''));
  if (!parts) return false;
  const timestamp = Number(parts[1]);
  if (!Number.isSafeInteger(timestamp)
      || Math.abs(now - timestamp) > 300000) return false;
  const expected = crypto.createHmac('sha256', secret)
    .update(parts[1] + '.').update(rawBody).digest();
  return crypto.timingSafeEqual(expected, Buffer.from(parts[2], 'hex'));
}

Esta función comprueba autenticidad y antigüedad; no procesa una venta. Después de validarla, analiza el JSON, exige que tienda sea tu dirección de vendedor, valida tipo y contrasta datos.pedidoId y el importe esperado con tu pedido. Registra el evento y la entrega de forma atómica para evitar entregar dos veces. Mantén los secretos fuera del navegador, del repositorio y de los logs.

Administración autenticada

La pantalla de tu tienda usa estas rutas existentes. Todas requieren la firma V2 de la wallet propietaria, vinculada al método, ruta, cuerpo y solicitud. No son endpoints públicos ni utilizan una clave global compartida.

Base: https://api.kairos777.com/api/tienda/mi-tienda/pagos

Ruta relativaOperación
GET /webhooksLista tus suscripciones y eventos admitidos, sin mostrar los secretos.
POST /webhooksRegistra { url, eventos }. La tienda se obtiene de la firma.
GET /webhooks/entregasConsulta el historial de entregas de tu tienda.
POST /webhooks/:id/rotar-secretoRota el secreto de una suscripción propia y muestra el nuevo una sola vez.
DELETE /webhooks/:idDesactiva una suscripción de tu tienda.

Pedidos, reintentos y devoluciones.

SituaciónComportamiento esperado
Pago pendienteNo despaches ni actives una licencia. La Wallet permite seguir el pedido mientras se comprueba el pago.
Resultado de envío inciertoRevisa el mismo pedido y transacción. No solicites otro pago para resolver un retraso de confirmación.
Compra abandonadaCerrar el checkout no confirma, devuelve ni cancela una transacción que ya se haya enviado. El pedido tiene su propio estado y vencimiento.
Pago confirmadoorder.paid informa una venta comprobada. Deduplica por ID del evento y por operación comercial.
Devoluciónorder.refunded se registra tras comprobar la devolución correspondiente. Concilia el importe devuelto; no presupongas que una notificación representa el reembolso total de un pedido.

Qué puedes integrar hoy.

Disponible en este recorridoRequiere habilitación o desarrollo adicional
Productos existentes del Mall, checkout alojado, enlaces, botón para tu web y pago en USDC desde Kairos Wallet.Cobro directo con tarjeta o cuenta bancaria, alta de comercios ante el procesador y sus capacidades de reembolso o disputa.
Notificaciones firmadas por tienda y gestión de pedidos en la Wallet.Checkout embebido con campos de tarjeta del proveedor, suscripciones, facturas fiscales y API general para catálogos externos.
El vendedor recibe USDC en su billetera; la comisión sigue las condiciones del pedido.Depósito automático de estas ventas en la cuenta de efectivo de Bridge.
Tarjetas y fiat. La vista de presentación no procesa tarjetas ni debe solicitar sus datos. Una integración fiat necesita un proveedor autorizado, habilitación de la plataforma y del comercio y pruebas completas. Comprar USDC con un onramp financia la billetera del comprador; después se realiza el pago al vendedor. Son dos operaciones distintas.

Antes de entregar un producto real, comprueba conexión de tienda, compra autorizada, confirmación, webhook duplicado, recuperación de un envío incierto y devolución en el entorno adecuado. Ninguna pantalla de presentación acredita fondos ni demuestra por sí sola aprobación del procesador.