Pago alojado

Solicita en Configuración, espera la aprobación, luego crea una sesión y envía a los compradores a una página de pago de RMT. Cumples después de order.paid. Los socios aprobados pagan el 4% del monto bloqueado.

Acepta pagos desde tu propia tienda. RMT.GG es el comerciante registrado. Usa la API de Vendedores para enviar a los compradores a una página de pago de RMT.

Cómo funciona el pago alojado

RMT.GG sigue siendo el comerciante registrado. Tu tienda asociada envía un monto bloqueado y una moneda. El comprador paga en nuestra página alojada. Después del pago, entregas en tu tienda. Los pedidos se completan automáticamente para que se pueda realizar la liquidación de la billetera.

  • El comprador paga exactamente el monto y la moneda que envías. No lo aumentamos.
  • Tu tarifa de vendedor es del 4% de ese monto bloqueado. Las publicaciones en el mercado se mantienen en el habitual 5%.
  • Las tarifas de procesamiento de tarjetas, PayPal y criptomonedas son absorbidas por la plataforma en este flujo.

Se requiere lista blanca

Solicita en Configuración, Pago alojado, y espera la aprobación del administrador. Las claves API no aprobadas reciben CHECKOUT_PARTNER_NOT_APPROVED.

Solicita y obtén aprobación

Después de la aprobación, crea una clave API con checkout:write y un webhook JSON para checkout.completed en la página de configuración de pago alojado. Hasta la aprobación, las APIs de pago alojado permanecen bloqueadas.

  1. 1Abre Configuración → Pago alojado y envía la URL de tu tienda más una breve nota sobre cómo usarás el pago.
  2. 2Espera a que un administrador apruebe. Verás una insignia de pendiente hasta entonces.
  3. 3Después de la aprobación, crea una clave API y un webhook JSON para checkout.completed en Configuración → Pago alojado.

API de Vendedor

Usa esto desde cualquier tienda o tu propio servidor. Crea una sesión con POST /api/v1/checkout/sessions. Envía checkout:write y un Idempotency-Key. Redirige al comprador a hosted_url. Escucha order.paid, luego cumple en tu tienda.

Crea una sesión de pago alojado

bash
curl -X POST -H "Authorization: Bearer rmt_sk_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: inv-12345" \
  https://rmt.gg/api/v1/checkout/sessions \
  -d @session.json

sesion.json

javascript
{
  amount: 10, // required when items is omitted
  currency: "USD", // optional; defaults to USD
  itemName: "Gold pack", // required when items is omitted; alias title
  description: "1000 gold for account example", // optional
  imageUrl: "https://cdn.shop.example/gold.png", // optional, HTTPS only
  categorySlug: "games", // send with offering, or omit both
  offering: "Mods", // send with categorySlug
  email: "[email protected]", // optional
  returnUrl: "https://your-shop.example/thanks", // optional
  cancelUrl: "https://your-shop.example/cancel", // optional
  invoiceId: "12345" // optional
}

Múltiples líneas bloqueadas con entrega opcional (session.json)

javascript
{
  currency: "USD",
  invoiceId: "12345", // optional
  items: [ // required when amount is omitted
    {
      name: "Gold pack", // required per line
      description: "1000 gold", // optional
      amount: 10, // required per line
      quantity: 1, // optional, default 1
      imageUrl: "https://cdn.shop.example/gold.png", // optional, HTTPS only
      delivery: [ // optional
        { name: "Code", type: "text", value: "XXXX-YYYY" } // name and value required; type is optional
      ]
    }
  ]
}
  • Envía la cantidad más itemName (o título) para un solo artículo, o un array items[] no vacío. La moneda predeterminada es USD. Campos opcionales: descripción, URL de imagen HTTPS, correo electrónico (pre-llena la página de pago), returnUrl, cancelUrl, invoiceId, categorySlug más offering (envía ambos o ninguno), y metadata. itemName es el encabezado de la página de pago; descripción es el texto más largo debajo. El comprador debe confirmar un correo electrónico válido antes de pagar. Después del pago, el comprador permanece en la confirmación de RMT.GG para que pueda copiar los campos de entrega. Si estableces returnUrl y hay campos de entrega, continuarán a tu tienda desde esa pantalla. Si no hay ninguno, los enviamos de vuelta después de una breve cuenta regresiva. Si omites returnUrl o cancelUrl, el comprador permanece en la página de pago de RMT.GG después del pago, cancelación o expiración.
  • En caso de éxito, añadimos el uid del pedido a returnUrl como ?order= cuando esa URL es HTTPS (o localhost).
  • Repetir valores de Idempotency-Key o invoiceId reutiliza la misma sesión en lugar de crear un duplicado.
  • itemName y la descripción aparecen solo en la página de pago de RMT. El pago con tarjeta, PayPal y criptomonedas utiliza etiquetas codificadas de catálogo como Juegos · Complementos, nunca el título de tu tienda. Establece un valor predeterminado en Configuración, Pago alojado, o envía categorySlug y oferta en la sesión.
  • Las sesiones duran 24 horas. Después de eso, la página de pago no puede completarse, las sesiones de Stripe y PayPal en curso se cierran, y enviamos POST checkout.canceled con el motivo expirado.
  • items[] es la alternativa de múltiples líneas a un solo amount más itemName. Cada línea necesita nombre y amount. Con items, amount puede ser omitido y se calcula a partir de las líneas, o debe coincidir con la suma si lo envías. La cantidad está bloqueada en rmt.gg: los compradores no pueden agregar, eliminar o cambiar líneas. imageUrl debe ser HTTPS; no lo recuperamos. Los campos de entrega opcionales (texto, contraseña o área de texto) necesitan un nombre y un valor. Se muestran después del pago en la página de confirmación y Compras. La solicitud GET pública de sesión incluye valores de entrega solo después del pago. La solicitud GET del vendedor y los webhooks nunca los incluyen.

Verificar estado del pago

Escucha primero por checkout.completed. Si un webhook se retrasa, OBTEN la sesión. paid es verdadero cuando el comprador ha pagado. Puedes buscar por uid de sesión o por el invoiceId que enviaste.

  • OBTEN /api/v1/checkout/sessions/{uid} usando el uid devuelto cuando creaste la sesión.
  • OBTEN /api/v1/checkout/sessions?invoiceId=YOUR_INVOICE_ID si almacenaste tu propio id de factura en su lugar.

Buscar por id de factura

bash
curl -H "Authorization: Bearer rmt_sk_live_…" \
  https://rmt.gg/api/v1/checkout/sessions?invoiceId=inv-12345

Digiseller y tiendas similares

Sáltate esto si creas checkouts con la API de Vendedor. Úsalo cuando tu tienda (por ejemplo, Digiseller) envíe al comprador aquí a través de un método de pago personalizado. Digiseller publica en nuestra URL de Pago, nosotros tomamos el pago, luego Digiseller verifica la URL de Estado.

  1. 1Copia la URL de Pago, la URL de Estado y el secreto de pago desde Configuración → Checkout alojado.
  2. 2Pégalos en Digiseller como un método de pago personalizado. Mantén el secreto privado.
  3. 3Digiseller luego envía a los compradores a nosotros para pagar, y verifica la URL de Estado para pagado o no pagado.
  • item_name (o título) es el encabezado en la página de pago. description es el texto más largo debajo. Si ambos nombres se omiten, se utiliza description como encabezado.

Ejemplo de solicitud que envía Digiseller

json
{
  "invoice_id": "12345",
  "amount": "10.00",
  "currency": "USD",
  "item_name": "Paquete de oro",
  "description": "1000 de oro para el ejemplo de cuenta",
  "signature": "…"
}

Prefiere un webhook JSON

La URL de Estado es para Digiseller. Si cumples desde tu propio servidor, agrega un webhook JSON y escucha por checkout.completed. También puedes OBTENER la sesión como respaldo.

webhooks JSON

El checkout alojado no utiliza una API de webhook separada. Bajo Desarrollador, apunta un endpoint HTTPS JSON a los mismos eventos que las ventas del mercado. Después del pago, hacemos un POST a order.paid. Después de un reembolso, hacemos un POST a order.refunded. Empareja la venta con externalInvoiceId (tu invoiceId) o partnerSessionUid.

payload de order.paid (campos de checkout alojado)

json
{
  "id": "whd_…",
  "type": "order.paid",
  "created": "2026-08-14T12:00:00.000Z",
  "data": {
    "order": {
      "uid": "ord_…",
      "status": "PAGADO",
      "partnerSessionUid": "…",
      "externalInvoiceId": "inv-12345",
      "partnerSource": "api"
    }
  }
}
  • source es la API para sesiones de la API de Vendedores.
  • La firma opcional utiliza X-RMT-Timestamp y X-RMT-Signature. Verifica HMAC de la misma manera que cualquier otro webhook de vendedor.
  • checkout.canceled incluye la razón buyer_canceled cuando el comprador abandona la página de pago sin pagar, o la razón expired cuando el TTL de la sesión de 24 horas expira sin pagar.
  • checkout.items lista líneas bloqueadas (name, description, amount, quantity, imageUrl). Los valores de entrega nunca se incluyen en los webhooks.

No cumplas dos veces

Digiseller también recibe su propio callback de pago. Si también escuchas por checkout.completed, cumple el pedido solo una vez. Las sesiones de la API de Vendedor nunca envían ese callback de Digiseller.

Correo electrónico de invitado y recibos

Los compradores deben ingresar un correo electrónico en la página de pago para que podamos enviar el recibo y la factura de impuestos. Las cuentas de RMT coincidentes se adjuntan sin iniciar sesión el comprador.

  • Si el correo electrónico ya pertenece a una cuenta de RMT, el pedido aparece en las Compras de esa cuenta. No se establece ninguna cookie de inicio de sesión en la página de pago.
  • Un nuevo correo electrónico crea un usuario ligero, por lo que los recibos y el inicio de sesión posterior aún funcionan.
  • Se requiere correo electrónico para completar el pago. Tu tienda aún debe escuchar el evento checkout.completed.

Monedas y límites

Usa una moneda ISO soportada como USD o EUR. El pago con tarjeta funciona mejor en USD o EUR. Las criptomonedas y PayPal pueden funcionar con otras monedas cuando el proveedor las acepta.

No en esta versión

No hay SDK de iframe, dominio de página de pago personalizado o saldo de billetera en la página de pago alojada. Los compradores utilizan el pago con tarjeta, PayPal o redirección de pago con cripto.

Antes de que salgas en vivo

Lista de verificación de staging

Las pruebas unitarias cubren tarifas, HMAC y reutilización. Revisa esta lista en staging antes de enviar compradores reales.

  • Solicita, confirma la insignia de pendiente y luego haz que un administrador apruebe. Las credenciales aparecen solo cuando son aprobadas. Una clave no aprobada en POST /api/v1/checkout/sessions devuelve 403.
  • Crea una sesión con itemName, descripción y categorySlug más la oferta (o un predeterminado guardado). Abre hosted_url. El encabezado es el nombre del artículo; la descripción está debajo. La página de pago no tiene navegación superior ni barra lateral. Paga con tarjeta en USD o EUR. Las páginas de tarjeta, PayPal y criptomonedas deben mostrar una etiqueta de catálogo como Juegos · Complementos, no el título de tu tienda.
  • Confirma que checkout.completed incluye invoiceId, checkout.uid y source, luego cumple en tu tienda. Cancela la página de pago y confirma checkout.canceled con reason buyer_canceled. Deja que una sesión pase más de 24 horas y confirma que checkout.canceled con reason expired no puede ser pagado.
  • Para Digiseller, pega la URL de Pago, la URL de Estado y el secreto de pago en un método de pago personalizado. Confirma que Digiseller puede ver el estado pagado, y que cumples el pedido solo una vez.
  • Paga con un correo electrónico de RMT existente: el pedido se registra en Compras y se envía un recibo, sin cookie de inicio de sesión. Un nuevo correo electrónico crea un usuario ligero. Se requiere correo electrónico en la página de pago.
  • La oferta sintética oculta no debe aparecer en la búsqueda del mercado. En un host con lista de espera, /pay/:uid y las rutas del adaptador aún funcionan.
  • Envía imageUrl opcional y items[] si necesitas una imagen del producto o múltiples líneas bloqueadas. Confirma que la página de pago no tenga controles de cantidad. Después del pago, los campos de entrega aparecen en Compras y en la página de pedidos. Solo URLs de imágenes HTTPS.

Guías relacionadas

Solicita el pago alojado

Abre Configuración → Pago alojado para solicitar, o salta a la referencia de API después de que seas aprobado.