API pública de Aportes
Recibe donaciones y pagos (únicos o recurrentes) desde tu propio sitio. Cada workspace se identifica por su pageId. El dinero se cobra de forma segura y va a la cuenta de pagos del workspace.
Hay dos formas de integrarlo:
- Widget embebible (recomendado) — un
<script>que abre un modal con el formulario de pago (Stripe Payment Element), sin sacar al visitante de tu sitio. - Enlace público — una página de donación alojada que puedes compartir por enlace.
1) Widget embebible
<!-- Botón generado por nosotros -->
<script src="https://cms.begraffic.com/embed/aporte.js"
data-page="PAGE_ID" data-button="BUTTON_ID"></script>El loader pide la config del botón y, al pulsarlo, abre un modal (iframe) o redirige al pago según data-mode.
Modos de uso
- Botón generado: como arriba. Toma etiqueta/color/concepto/monto/recurrencia guardados en el botón.
- Tu propio botón: añade
data-render="false"y marca cualquier elemento con[data-becms-pay]. También puedes dispararlo desde tu JS conBeCMS.openPayment({ page, button, amount }). - Inline (sin botón guardado): fija
data-amount,data-concept,data-type,data-recurringen el<script>.
Atributos data-* (en el <script> o en cada [data-becms-pay])
data-page(obligatorio) — id del workspace.data-button— id de un botón guardado (color/concepto/modo/monto).data-mode—modal(por defecto) oredirect.data-amount— monto fijo (si se omite y el botón es abierto/sugerido, el visitante lo elige).data-recurring—true|false|optional|required.data-type,data-concept,data-color,data-render="false".- Precio elegido por el visitante:
data-amount-from="#selector"lee el valor en vivo de otro input/radio/elemento (igualdata-recurring-from,data-type-from). - Donante ya conocido (salta el paso de contacto):
data-name,data-email,data-phone(teléfono en formato internacional, p. ej.+18095551234). Si van completos (nombre + correo o teléfono), el modal no pide el contacto y pasa directo al pago. Admiten variante en vivodata-name-from/data-email-from/data-phone-fromy tambiénBeCMS.openPayment({ name, email, phone }).
Ejemplos
Que el visitante escriba su monto:
<input type="number" id="monto" placeholder="Tu monto">
<button data-becms-pay data-amount-from="#monto">Donar</button>Varios precios para elegir (toma el seleccionado):
<label><input type="radio" name="monto" value="10"> $10</label>
<label><input type="radio" name="monto" value="25"> $25</label>
<label><input type="radio" name="monto" value="50"> $50</label>
<button data-becms-pay data-amount-from="input[name=monto]:checked">Donar</button>Monto y recurrencia mensual ya listos (el modal abre con todo puesto):
<button data-becms-pay data-amount="25" data-recurring="true">Donar $25/mes</button>Si tu plataforma ya conoce al donante (salta el paso de contacto):
<button data-becms-pay data-amount="50"
data-name="Juan Pérez" data-email="juan@correo.com">Aportar</button>Desde tu propio JavaScript:
<script>
BeCMS.openPayment({ page: 'PAGE_ID', amount: 50, name: 'Juan Pérez', email: 'juan@correo.com' })
</script>El monto y la recurrencia personalizados solo aplican si el botón es inline (sin
data-button) o si el botón guardado está en modo "monto abierto" / con recurrencia permitida. Un botón de monto fijo siempre cobra su monto; uno de pago único no se puede forzar a recurrente.
GET /api/aportes/button
Config pública de un botón (CORS abierto; la consume el loader). No expone nada secreto.
?page=PAGE_ID&id=BUTTON_ID →
{ "label": "Aportar", "color": "#1E4876", "mode": "modal", "css": "",
"amountMode": "open", "amount": 0, "concept": "Ofrenda", "type": "donacion",
"recurring": true, "recurringRequired": false }POST /api/aportes/embed-session
Crea el cobro y devuelve el client_secret para confirmarlo con el Payment Element (sin redirigir a Stripe).
Body: { pageId, buttonId?, amount, recurring?, concept?, type?, donorName, donorEmail?, donorPhone?, currency? }
- Con
buttonId, las reglas de monto/recurrencia/concepto las manda el botón (autoritativo en servidor). - Pide nombre y, al menos, correo o teléfono.
Respuesta:
{ "clientSecret": "pi_..._secret_...", "accountId": "acct_...", "test": false,
"recurring": false, "currency": "usd" }- Confirma el
clientSecreten el navegador con el Payment Element de Stripe (inicializa Stripe.js con la cuentaaccountId). Tras confirmarlo, el pago queda registrado automáticamente; no necesitas más pasos. - Único → un cobro. Recurrente → suscripción mensual.
2) Enlace público — POST /api/aportes/checkout
Lo usa la página de donación alojada que compartes por enlace. Crea la sesión de cobro a partir del enlace (slug); el workspace se deriva del enlace y nunca se envía en la solicitud.
Body: { pageId, slug, donorName, donorEmail?, donorPhone?, amount?, recurring?, returnUrl? } → devuelve el client_secret (mismo formato que embed-session).