RSPayDocs

Integracion

Dos caminos: por API (si ya tienes backend) o con el boton embebible (pegas una linea en tu web y listo).

Prueba el flujo completo sin cobrar nada (negocio de mentira, pago simulado en sandbox).

Opcion A - Boton embebible (sin backend)

Pega el script una vez y usa <rs-pay-button> donde quieras. El boton crea la orden, abre el checkout en un modal elegante y te avisa por eventos.

<script src="https://pay.rsanjur.com/rs-pay.js"></script>

<rs-pay-button
  monto="12.50"
  concepto="Pedido #1042"
  api-key="rsp_TU_API_KEY"
  tema="auto"
></rs-pay-button>

Resultado:

// la pagina se entera del resultado (sin backend)
var btn = document.querySelector('rs-pay-button');
btn.onSuccess = function (e) { console.log('pagado', e.orden.id); };
btn.onCancel  = function ()  { console.log('el cliente cerro el checkout'); };
btn.onError   = function (e) { console.log('error', e.error); };

// equivalente por eventos del DOM:
btn.addEventListener('rs-pay:success', function (e) { /* e.detail.orden */ });

Variantes: variante="primary|light|dark" y tamano="sm|md|lg". Ver el kit de marca.

Opcion B - 1. Crear orden (servidor)

# 1) crear la orden (desde tu servidor, con tu API key)
curl -sS -X POST https://pay.rsanjur.com/api/orders \
  -H 'X-Api-Key: ***' \
  -H 'content-type: application/json' \
  -d '{"concepto":"Consulta dental","monto_cents":4500,"moneda":"USD","callback_url":"https://minegocio.com/api/rs-pay/webhook","metodos_permitidos":["yappy","solana"]}'

# respuesta
{ "id":"RS...", "token":"...", "url_pago":"https://pay.rsanjur.com/p/<token>", "estado":"pendiente", "expira_en":"..." }

2. Redirigir y esperar

// 2) redirige al cliente a url_pago (o abre el checkout en un iframe)
window.location.href = orden.url_pago;

// 3) espera el estado: por webhook (recomendado) o por polling
//    GET /api/orders/<token>  ->  { estado: 'pendiente'|'pagado'|'expirado'|'cancelado' }

3. Webhook de salida

// 4) webhook de salida: POST a tu callback_url
//   headers: X-RS-Pay-Event: orden.pagado
//            X-RS-Pay-Orden: RS...
//            X-RS-Pay-Signature: hmac_sha256_hex(cuerpo, callback_secret)
{ "orden": { "id":"RS...", "concepto":"Consulta dental", "monto_cents":4500,
             "moneda":"USD", "metodo":"solana", "estado":"pagado", "pagado_en":"..." },
  "estado": "pagado" }

4. Verificar firma

// verificar la firma del callback (Node)
import crypto from 'crypto';
const esperado = crypto.createHmac('sha256', CALLBACK_SECRET).update(rawBody).digest('hex');
// compara en tiempo constante
if (!crypto.timingSafeEqual(Buffer.from(esperado), Buffer.from(req.headers['x-rs-pay-signature'] || ''))) return res.status(401).end();

API

POST /api/orders (header X-Api-Key) crea la orden.
GET /api/orders/:token estado (?verificar=1 fuerza la revision on-chain de Solana).
GET /p/:token checkout publico.
GET /rs-pay.js boton embebible.
POST /api/webhook/yappy IPN de Yappy.

Comercios de prueba

idnombremetodos
demoNegocio Demoyappy,solana,paypal,tarjeta
demo-devnetNegocio Demo (devnet)solana

Pide tu API key al operador. La API key nunca sale en esta pagina.

RS Pay · cobros para negocios · hecho por rsanjur.com