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
| id | nombre | metodos |
|---|---|---|
demo | Negocio Demo | yappy,solana,paypal,tarjeta |
demo-devnet | Negocio 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