Guía técnica y comercial: seguridad PCI-DSS, webhooks, conciliación y evitar fraude.
Integrar pagos no es solo "poner un botón de Comprar". Es un sistema completo que debe:
El costo de hacerlo mal: Una distribuidora online facturó S/ 5M en el año. Operaba sin pasarela profesional (aceptaba transferencias manualmente). Problemas:
Una pasarela de pago profesional le habría costado S/ 500/mes. Habría ahorrado S/ 288K en ese año.
Esto es lo que debe suceder DETRÁS de escenas cuando el cliente presiona "Comprar":
Si faltas uno de estos pasos, todo se cae. Por eso lo correcto es usar una pasarela profesional y documentada.
| Pasarela | Mejor para | Tarjetas | Billeteras digitales | Comisión (aprox) | Documentación |
|---|---|---|---|---|---|
| Niubiz (Visanet) | E-commerce, retail. Lo "seguro" en Perú | Visa, Mastercard, Amex | Billetera Niubiz, BNPL | 2.8-3.5% + S/ 0.50 | Muy buena, soporte 24/7 |
| Izipay (Desarrollo) | E-commerce, suscripciones, PYME | Visa, Mastercard, Diners | Izipay Wallet, Plin | 2.5-3.2% + S/ 0.30 | Excelente, API clara |
| Stripe | SaaS, startups, internacionales | Visa, Mastercard, Amex, Discover | Apple Pay, Google Pay | 3.0% + $0.30 (en USD) | Excelente, testing fácil |
| PayPal | Tiendas pequeñas, libertadores | Tarjeta directa o cartera PayPal | PayPal Wallet | 3.9% + $0.30 | Muy amigable, pero limited en Perú |
| Mercado Pago | Vendedores pequeños, Mercado Libre | Tarjeta, transferencia | Dinero en cuenta ML | 4.0-5.0% | Buena para principiantes |
| YuanPay | Negocios con clientes chinos | Unionpay (China) | WeChat Pay, Alipay | 3.5% + S/ 0.50 | Especializada |
Mi recomendación para PYMES peruanas:
El error: Guardar números de tarjeta en tu base de datos. Esto viola PCI-DSS (estándar de seguridad de la industria) y te expone a multas masivas.
Lo correcto: La pasarela te da un "token" que representa la tarjeta. TÚ almacenas el token, no el número. El token no sirve para nada sin la pasarela.
Flujo:
Cumplimiento: Con tokenización, no almacenas datos de tarjeta, entonces no necesitas estar bajo PCI-DSS nivel 1 (caro). Con nivel 3 (más barato) es suficiente.
El problema: Tu backend recibe "Pago aprobado" de la pasarela. Lo procesa. Pero la red falla, el webhook se reenvía. Ahora procesaste el pago DOS VECES.
La solución (idempotencia): Cada transacción tiene un ID único. Tu backend verifica: "¿Ya procesé esta transacción?" Si sí, ignora el webhook duplicado.
Pseudocódigo:
webhook_recibido(transaccion_id, monto, cliente_id):
if ya_existe(transaccion_id):
return "OK" (sin procesar de nuevo)
if valida_monto(monto) and valida_cliente(cliente_id):
crear_pedido(cliente_id, monto)
enviar_email()
guardar_transaccion(transaccion_id)
return "OK"
else:
return "ERROR"
Resultado: Aunque el webhook llegue 5 veces, procesas solo 1 vez. Cero duplicados.
El ataque: Cliente coloca un artículo de S/ 500 en carrito. Modifica el HTML (o API) y baja el monto a S/ 50. Envía la transacción. Si no validas, paga S/ 50 en lugar de S/ 500.
La solución: Tu backend calcula el monto esperado:
monto_esperado = sumar_items_carrito() + impuestos - descuentos
monto_recibido = request.data.get("monto")
if monto_esperado != monto_recibido:
rechaza_pago("Montos no coinciden")
También verifica moneda: si esperas "PEN" pero llega "USD", algo está mal.
Problemas reales:
La solución correcta:
Resultado: Cero dinero "colgado" sin confirmación, cero clientes confundidos.
Requisito SUNAT: Toda transacción debe tener trazabilidad: quién, qué, cuándo, por cuánto, resultado.
¿Qué loguear?
Dónde guardar: BD principal + backup en el cloud. Si SUNAT audita, debes poder mostrar TODOS los pagos del año con detalles.
El problema: Tu sistema dice que aprobaste S/ 500K en pagos. El banco deposita S/ 480K. ¿Dónde están los S/ 20K faltantes? Problema operativo serio.
Las causas típicas:
El proceso correcto de conciliación (diaria):
| Concepto | De pasarela | De banco | Diferencia permitida |
|---|---|---|---|
| Transacciones aprobadas | S/ 50,000 | N/A (ves después) | 0% |
| Menos: comisiones (3%) | -S/ 1,500 | -S/ 1,500 | ±S/ 50 |
| Menos: chargebacks (2%) | -S/ 1,000 | -S/ 1,000 | 0% (debe coincidir) |
| Neto depositado esperado | S/ 47,500 | S/ 47,500 | ±S/ 100 |
| Neto depositado real | N/A | S/ 47,480 | - |
| Diferencia a investigar | S/ 20 (posiblemente impuesto retenido o costo extra) | - | |
Herramientas para conciliación:
ANTES (sin pasarela profesional):
IMPLEMENTACIÓN (Izipay integrada en 2 semanas):
DESPUÉS (3 meses):
Impacto financiero:
1. Manipulación de montos (ya mencionada).
Cliente cambia "S/ 500" a "S/ 50" en el navegador. Prevención: valida SIEMPRE en servidor.
2. Man-in-the-Middle (intercesor de tráfico).
Atacante intercepta la comunicación cliente-servidor. Prevención: HTTPS/SSL obligatorio (candado en navegador). Certificado válido.
3. SQL Injection en logs.
Atacante inyecta código SQL en datos del cliente para acceder a BD. Prevención: prepared statements, ORM (Hibernate, Sequelize), validación de entrada.
4. Chargebacks y fraude amigo.
Cliente compra, recibe producto, después dice "Yo no lo pedí" y disputa. Banco devuelve dinero. Prevención: firma digital de cliente, email de confirmación (prueba), logs detallados.
5. Falta de rate limiting.
Atacante prueba 1,000 números de tarjeta por segundo. Prevención: limita intentos (máximo 3 fallos por tarjeta/hora), bloquea IPs sospechosas, usa reCAPTCHA.
Semana 1: Selección y negociación
Semana 2-3: Desarrollo e integración
Semana 4: Testing
Semana 5: Capacitación
Semana 6: Go live
| Componente | Descripción | Costo (S/) | Tipo |
|---|---|---|---|
| Desarrollo e integración | 80-100 horas de desarrollador | S/ 8,000 - 12,000 | Pago único |
| Certificado SSL (HTTPS) | Obligatorio para PCI-DSS | S/ 300 - 1,000/año | Anual |
| PCI-DSS compliance (nivel 3-4) | Auditoría + certificación | S/ 1,500 - 5,000/año | Anual |
| Comisiones (sobre ventas) | 2.5-3.5% + S/ 0.30 por transacción | Depende de volumen | Variable |
| Chargebacks (si aplica) | 0.5-2% típico, depende industria | Depende de volumen | Variable |
| Soporte técnico (primera línea) | Soporte de pasarela (incluido generalmente) | S/ 0 - 2,000/mes | Mensual |
| Mantenimiento y actualizaciones | Pequeño equipo para fixes, nuevas pasarelas | S/ 1,000 - 3,000/mes | Mensual |
| TOTAL AÑO 1 | Escenario típico PYME S/ 1-3M ventas | S/ 28,000 - 45,000 | - |
ROI típico: Si aumentas conversión 1-2% (frecuente después de integrar pagos profesionales), el costo se paga en 1-2 meses de ingresos adicionales.
1. No usar HTTPS.
Cliente ve "conexión no segura". No compra. Además, viola PCI-DSS. Solución: certificado SSL, siempre HTTPS.
2. Almacenar datos de tarjeta.
Multiplicas riesgo de hacking 100x. Multa SUNAT enorme. Solución: solo usa tokens de pasarela.
3. Confiar en cliente para validar monto.
Cliente manipula y paga menos. Solución: SIEMPRE valida en servidor.
4. No configurar webhooks.
Pago se aprueba en pasarela pero tu sistema no se entera. Cliente no recibe confirmación. Solución: webhooks obligatorios, con retry.
5. Sin logs de auditoría.
SUNAT audita, no puedes demostrar trazabilidad. Multa. Solución: loguea TODO.
6. No tener plan B.
Pasarela cae, pierdes todas las ventas. Solución: tener 2 pasarelas integradas (fallover automático).
Si aún aceptas solo transferencias manuales, estás perdiendo dinero y exposición legal. Una pasarela de pago profesional:
Si contestaste sí a 4 de 5, es hora de integrar una pasarela profesional. El ROI será positivo casi inmediatamente.