Cambiar tema

Pagos para una empresa unipersonal: Stripe, Paddle, Lemon Squeezy o WeChat Pay

Easton editorial illustration: one dominant circular payment-routing switch with four selectable rails, one downstream stacked entitlement ledger/database receiving the verified flow

"Paddle: conceder acceso y gestionar el estado de suscripción con webhooks"

Aviso: este texto no es asesoría fiscal, legal, societaria, cambiaria ni de elegibilidad. Para Merchant of Record, VAT/GST/sales tax, entidades nacionales o extranjeras y liquidaciones, consulta las condiciones del servicio y a profesionales.

Tu pricing.ts define starter_monthly, pro_yearly, lifetime_license y wechat_one_time, pero la base solo tiene is_paid. Llega checkout.session.completed y el cliente vuelve por success_url, aunque entitlements sigue vacío. No falla el botón: el sistema no conecta productos, pedidos, suscripciones y acceso.

Antes de elegir proveedor hay cinco preguntas: qué vendes, cómo cobras, a quién, quién asume la transacción y el impuesto sobre ventas, y quién concede acceso tras el pago. Stripe, Paddle, Lemon Squeezy y WeChat Pay no son cuatro botones equivalentes; cubren responsabilidades distintas.

Define el modelo de venta antes del proveedor de pagos

Una compra única gira alrededor del pedido y la entrega. Una suscripción SaaS exige todo el billing lifecycle. El cobro por uso también necesita datos de consumo trazables. Lleva primero el modelo a products, prices y tablas locales.

Modelo de ventaPuntos de partidaEventos asíncronos claveTablas locales principales
Producto digital de compra únicaStripe / Paddle / Lemon Squeezycheckout.session.completed / transaction.completed / order_createdorders + entitlements
Suscripción SaaSStripe Billing / Paddle Billing / Lemon Squeezycustomer.subscription.* / subscription.*subscriptions + entitlements + usage_events si aplica
Suscripción y compra únicaStripe Billing / Paddle BillingVarios eventosorders + subscriptions + entitlements
China continental o WeChatWeChat Pay (JSAPI/H5/Native)Callback y consulta del pedidoorders + wechat_prepay

Tres puntos importantes:

  • Una venta única necesita pedido, entrega, reembolso y reenvío, no todo el ciclo de suscripción.
  • Un SaaS recurrente necesita subscriptions con current_period_start/end, cancel_at y status; el consumo añade usage_events auditables.
  • WeChat Pay es vía de pago y sistema de comercio, no Merchant of Record global ni plataforma de SaaS billing.

Las capacidades cambian. Antes de integrar, revisa región de cuenta, modo de producto, medios de pago, versión de API y condiciones.

Un Merchant of Record no elimina todas las responsabilidades

Un Merchant of Record, o MoR, es el vendedor registrado de una transacción. Paddle y Lemon Squeezy usan este modelo para productos digitales elegibles y gestionan pago, impuesto sobre ventas, reembolso o disputas dentro de ese alcance. Reduce la operación fiscal global, pero no elimina obligaciones de renta, entidad, producto, datos y contabilidad.

Con Stripe, el comercio suele seguir siendo el vendedor registrado. Stripe Tax ayuda a calcular sales tax, VAT y GST y ofrece herramientas de supervisión y registro, pero no convierte automáticamente a Stripe en Merchant of Record. Registro, declaración y entidad dependen de la jurisdicción y la transacción.

No elijas un MoR por un umbral fijo de ingresos. Compara estas dimensiones:

DimensiónStack propio de pago y billingMerchant of Record
PersonalizaciónCombinar Checkout, Billing, Tax, facturas y procesos internosSeguir política de producto, checkout, contrato y liquidación de la plataforma
Operación fiscal y de cobroEl comercio confirma registro, declaración, facturas, reembolsos y disputasEl MoR asume impuesto, pago y parte del cumplimiento en transacciones cubiertas
CostoSumar herramientas fiscales, ingeniería, finanzas y soporte a la comisiónEvaluar liquidación, reembolso, extras y límites, no solo porcentaje
Mejor encajeMucha personalización, operación existente o contratos especialesMenos trabajo fiscal global y de suscripciones para productos elegibles

El límite contractual y fiscal depende de entidad, territorio, producto y cliente. Una página comercial no sustituye las condiciones ni el asesoramiento.

Cómo elegir Stripe, Paddle, Lemon Squeezy o WeChat Pay

Si necesitas suscripciones y WeChat Pay, separa primero los problemas. Ciclo de suscripción, pagos globales y China pueden usar servicios distintos. Que un método aparezca en la plataforma no significa que funcione en cada región, modo Checkout o cobro recurrente.

ServicioResponsabilidadSuscripciones y compras únicasPagos en ChinaLicencia nativaBuen punto de partida
StripePayment, Billing y Tax; normalmente no MoRCheckout y Billing muy personalizablesAlipay/WeChat Pay dependen de región, divisa y modoSin License Key generalSaaS que controla pagos, suscripciones, impuestos y procesos
PaddleMerchant of RecordPaddle Billing y CheckoutRevisar Dashboard y documentación por cuenta y regiónLa aplicación gestiona accesoSoftware que quiere reducir impuesto global y operación recurrente
Lemon SqueezyMerchant of RecordDigitales, suscripciones simples y consumoAlipay/WeChat Pay en compras únicas; suscripción más limitadaLicense KeysProductos digitales, licencias y primeras suscripciones
WeChat PayVía de pago y sistema de comercioJSAPI/H5/Native; ciclo de billing propioChina continental y WeChatNingunaCompras únicas en RMB y checkout WeChat

La documentación oficial confirmaba el 18 de julio de 2026:

  • Stripe Checkout ofrece páginas alojadas, integradas y componentes combinables. Los métodos dependen de región, divisa y modo Checkout.
  • Paddle entrega webhooks al menos una vez. Si el endpoint no devuelve 200 en cinco segundos, reintenta. Puede duplicar o desordenar; usa event_id y occurred_at.
  • Lemon Squeezy lista Cards, PayPal, Apple Pay, Google Pay, Alipay, WeChat Pay, Cash App Pay y bank debits. Las suscripciones solo admiten Cards, Apple Pay, Google Pay y PayPal.
  • WeChat Pay H5 necesita crear el pedido en servidor, recibir callback y consultar el estado. El retorno del navegador no es definitivo.

Comisiones, medios, liquidación, países y políticas cambian. Abre las páginas de precios y contratos actuales al preparar el presupuesto.

El webhook es la frontera de sincronización de acceso

Dos fallos comunes:

  1. Llega checkout.session.completed y se visita success_url, pero entitlements no cambia y el cliente no accede.
  2. El mismo evento entra dos veces en webhook_events y el handler emite dos licencias.

Ambos tratan una solicitud HTTP o la página de éxito como verdad final. Los eventos pueden duplicarse, retrasarse o llegar desordenados; algunos estados requieren consulta o un evento posterior.

Principios para diseñar el endpoint webhook

PrincipioStripePaddleLemon SqueezyWeChat Pay
HTTPS endpointObligatorioObligatorioObligatorioObligatorio
Verificación de firmaStripe-SignaturePaddle-SignatureX-SignatureFirma WeChat Pay API v3
Clave idempotenteID de evento u objetoevent_idTipo + ID de objeto o clave únicaout_trade_no e ID de transacción
RespuestaVerificar y guardar, responder rápido y procesar aparte200 en cinco segundosResponder éxito y procesar aparteSeguir contrato API vigente
CompensaciónConsultar pago o suscripciónConsultar entidades y reconciliarConsultar pedido o suscripciónConsultar, conciliar y recuperar manualmente

Reglas operativas:

  • Webhook o callback inicia la sincronización. success_url solo muestra procesamiento.
  • Verifica la firma y guarda el evento o campos necesarios en webhook_events; mueve el trabajo complejo a un job asíncrono.
  • Impón una restricción única y registra event_id, source, occurred_at, processed_at, status y payload_hash.
  • Para el desorden, compara hora del proveedor, actualización del objeto o versión del estado, no solo llegada.
  • Ejecuta reconciliation, consulta pedido o suscripción y conserva recuperación manual.

Tablas de pedidos, suscripciones, acceso y eventos

TablaCampos principalesStripePaddleLemon Squeezy
ordersprovider_order_id, customer_id, amount, currency, status, created_atCheckout Session / PaymentIntenttransactionorder
subscriptionsprovider_subscription_id, customer_id, status, current_period_end, cancel_atsubscriptionsubscriptionsubscription
entitlementsuser_id, product_id, feature_key, source, status, expires_atDerivado de order o subscriptionDerivado de transaction o subscriptionDerivado de order, subscription o license
webhook_eventsprovider, event_id, occurred_at, processed_at, status, payload_hashIdempotencia y auditoríaIdempotencia y ordenIdempotencia y auditoría

No copies cada objeto de la API. Define campos estables para decidir acceso y guarda IDs del proveedor para consultas y reconciliation.

Estrategias de sincronización de acceso

EstrategiaCuándo usarlaImplementación
Lean cacheLa mayoría de SaaS recurrentesGuardar customer, subscription, status, price y product necesarios y actualizar por eventos
State mirrorVistas offline o paneles operativos complejosReplicar más datos, registrar actualización y evitar desajustes con reconciliation
License keyProducto digital único o software de escritorioGuardar instance ID y verificar store, product, variant y customer; la clave no es un sistema de usuarios

Paddle recomienda lean cache para la mayoría de aplicaciones. Usa state mirror solo si necesitas consultas locales más ricas. Las claves de Lemon Squeezy también exigen validar producto y cliente y vincular la instance con tu cuenta y dispositivo.

Puntos de integración de cada servicio

Estos puntos delimitan la primera implementación, no sustituyen la documentación completa.

Integrar Stripe

Un SaaS inicial puede usar Checkout alojado y Customer Portal en lugar de mantener un formulario de tarjeta. Stripe Billing gestiona suscripciones, facturas, consumo y recuperación de ingresos. Stripe Tax es herramienta fiscal, no Merchant of Record.

Productos y precios deben mapearse a acceso local: product_id es producto o paquete; price_id, mensual, anual, seat o usage. No dejes solo is_paid en users.

Consulta el tutorial de carrito Next.js y pago con Stripe para Checkout Session, endpoint webhook y pedidos.

Integrar Paddle

Confirma que el tutorial usa Paddle Billing, no Paddle Classic. Cambian API, webhooks, Paddle.js y Product/Price.

Paddle Checkout muestra la caja, pero la aplicación hace provisioning. Normalmente basta con customer, subscription, status, price, product y scheduled change. Crea state mirror solo si operaciones necesita datos completos.

Actualiza ambos modelos por webhook y ejecuta reconciliation. Un Merchant of Record no sabe automáticamente quién usa cada función.

Integrar Lemon Squeezy

Lemon Squeezy sirve para productos digitales, licencias y suscripciones simples. Ofrece Merchant of Record, checkout, suscripciones, usage-based billing, webhooks y License Keys. Confirma tarifas y alcance en el store plan actual.

Tras activar una clave, guarda instance ID y verifica store_id, product_id, variant_id y customer. Una clave ajena o revendida no debe activar Pro.

Para suscripción con WeChat Pay, revisa aparte los métodos recurrentes. La documentación lista WeChat Pay y Alipay, pero las suscripciones solo admiten Cards, Apple Pay, Google Pay y PayPal.

Límites de WeChat Pay

WeChat Pay funciona para China continental y WeChat, pero no es Merchant of Record global ni ciclo SaaS completo. El comercio gestiona estado, firma, consultas, reembolsos, reconciliation, facturas y acceso.

H5, JSAPI, Mini Program y Native son escenarios de pago. En H5, el backend crea el pedido y entrega h5_url; al volver el navegador, consulta el pedido y aplica el callback al mismo out_trade_no.

Verifica permisos, entidad, dominios, tarifas y parámetros en la documentación vigente de WeChat Pay.

Siguiente paso: convertir el botón en una máquina de estados comprobable

Después de elegir, divide la integración en tareas verificables:

  1. Crea orders, subscriptions, entitlements y webhook_events; añade usage_events para consumo.
  2. Implementa firma, idempotencia, desorden, confirmación rápida y recuperación para cada webhook o callback.
  3. Haz que la página de éxito consulte el pedido local en lugar de escribir is_paid=true.
  4. Añade pruebas de consulta, reconciliation, reembolso, renovación fallida y recuperación manual.
  5. Reenvía eventos e invierte actualizaciones en sandbox; el acceso no debe duplicarse ni revertirse por error.

Para backend y base de datos, continúa con Supabase Edge Functions y los artículos de backend y datos de esta serie. Completar no es volver de la página de pago: pedidos, suscripciones y acceso deben converger al estado correcto pese a duplicados, retrasos, desorden y reembolsos.

Elegir e implementar un sistema de pagos para un negocio unipersonal

Parte del modelo de venta, las responsabilidades y el mercado para elegir proveedores y crear una sincronización de acceso auditable.

⏱️ Estimated time: 45 min

  1. 1

    Step 1: Definir el modelo de venta

    Especifica compra única, suscripción SaaS, cobro por uso o modelo híbrido, con reglas de reembolso, renovación, cambio de plan y fin de acceso.
  2. 2

    Step 2: Asignar responsabilidades fiscales y operativas

    Decide si combinarás pago, billing y Tax o usarás un Merchant of Record. Confirma entidad y obligaciones fiscales con las condiciones del proveedor y asesoría profesional.
  3. 3

    Step 3: Elegir vías de pago por mercado

    Evalúa Stripe, Paddle y Lemon Squeezy para tarjetas y suscripciones globales, y WeChat Pay para compras únicas en China continental o WeChat, verificando región, categoría y elegibilidad.
  4. 4

    Step 4: Crear el estado local

    Crea orders, subscriptions, entitlements y webhook_events. Usa IDs únicos de evento o pedido para idempotencia y auditoría.
  5. 5

    Step 5: Probar la sincronización asíncrona

    Prueba firmas, duplicados, desorden, tiempos de espera, reembolsos, renovaciones fallidas y recuperación manual. La página de éxito solo muestra el estado.

FAQ

¿Cuál es la diferencia principal entre Stripe, Paddle y Lemon Squeezy?
Stripe ofrece herramientas de pago, Billing y Tax, mientras el comercio suele conservar las responsabilidades comerciales, fiscales y operativas. Paddle y Lemon Squeezy actúan como Merchant of Record en las transacciones cubiertas. La aplicación sigue sincronizando sus propios entitlements.
¿Conviene empezar con un Merchant of Record o con Stripe?
No lo decidas con un único umbral de ingresos. Compara mercados, elegibilidad del producto, capacidad fiscal y de facturación, liquidaciones, reembolsos, personalización y costo total. Consulta a profesionales sobre entidad e impuestos.
¿Paddle o Lemon Squeezy activan automáticamente el acceso SaaS?
No. Procesan pago, billing o tareas de Merchant of Record, pero tu aplicación debe recibir webhooks, vincular pedidos o suscripciones con entitlements y reparar eventos perdidos mediante reconciliation.
Si Lemon Squeezy admite WeChat Pay, ¿puede cobrar suscripciones con WeChat Pay?
No necesariamente. Actualmente lista WeChat Pay y Alipay, pero sus productos de suscripción solo admiten tarjetas, Apple Pay, Google Pay y PayPal. Revisa la documentación vigente antes de lanzar.
¿WeChat Pay puede sustituir a Stripe para un SaaS global?
No directamente. Es una vía de pago y un sistema de comercio para China continental y WeChat. Suscripciones globales, impuestos, ciclo de facturación y multidivisa requieren otro diseño.
¿Cómo se manejan webhooks duplicados, desordenados o perdidos?
Verifica la firma, guarda el evento original y exige un ID único. Usa la hora del evento o la versión del estado para ordenar, responde rápido, procesa en segundo plano y repara con consultas, reconciliation y recuperación manual.
¿Qué tablas necesita un sistema de pagos mínimo?
Como mínimo orders, entitlements y webhook_events. Añade subscriptions para cobros recurrentes y usage_events trazables para cobro por uso.

9 min de lectura · Publicado el: 21 oct 2026

Comentarios

Inicia sesión con GitHub para dejar un comentario

Easton BlogEaston Blog