Configura tu sistema para recibir notificaciones en tiempo real cuando se realicen pagos mediante Yape o Plin en tu negocio.
Los webhooks son una forma de recibir notificaciones automáticas cuando ocurren eventos en BiPe Alerta. En lugar de consultar constantemente nuestra API para verificar nuevos pagos, puedes configurar un webhook para que nuestro sistema envíe automáticamente la información a tu servidor cuando ocurra un nuevo pago.
Implementa un endpoint HTTP en tu servidor que acepte solicitudes POST. Este endpoint recibirá los datos del pago en formato JSON.
Ingresa a tu cuenta de BiPe Alerta, ve a "Configuración" > "Webhooks" y registra la URL de tu endpoint.
Programa tu endpoint para procesar las notificaciones recibidas y actualizar tu sistema según sea necesario.
Cuando ocurre un pago, BiPe Alerta enviará una solicitud POST a tu endpoint con un objeto JSON con la siguiente estructura:
{ "Id": 123, "IdUsuarioNegocio": 456, "Tipo": "Yape", "NombreCliente": "Juan Pérez", "Monto": 25.50, "Estado": "Completado", "FechaHora": "2025-03-18T15:30:45", "IdBilletera": 789, "PackageName": "com.yape.app" }
Parámetro | Tipo | Descripción |
---|---|---|
Id | integer | Identificador único de la notificación |
IdUsuarioNegocio | integer | ID del usuario del negocio en BiPe |
Tipo | string | Tipo de transacción (Yape, Plin, etc.) |
NombreCliente | string | Nombre del cliente que realizó el pago |
Monto | decimal | Monto de la transacción |
Estado | string | Estado de la transacción |
FechaHora | DateTime | Fecha y hora de la transacción |
IdBilletera | integer | ID de la billetera asociada |
PackageName | string? | Nombre del paquete de la aplicación (opcional) |
// Controlador ASP.NET para recibir webhooks [ApiController] [Route("api/webhooks")] public class YapeWebhookController : ControllerBase { private readonly ILogger_logger; public YapeWebhookController(ILogger logger) { _logger = logger; } [HttpPost("yape")] public async Task ReceiveYapeWebhook([FromBody] YapeWebHook webhook) { // Registra la notificación recibida _logger.LogInformation($"Webhook recibido: Pago {webhook.Tipo} de {webhook.NombreCliente} por S/{webhook.Monto}"); // Procesa la notificación según tus necesidades await ProcessPaymentNotification(webhook); // Responde con éxito return Ok(new { success = true }); } private async Task ProcessPaymentNotification(YapeWebHook webhook) { // Implementa tu lógica para procesar el pago // Por ejemplo: actualizar base de datos, enviar notificaciones, etc. } }
// Servidor Express para recibir webhooks de BiPe Alerta const express = require('express'); const bodyParser = require('body-parser'); const app = express(); const PORT = process.env.PORT || 3000; // Middleware para analizar JSON app.use(bodyParser.json()); // Endpoint para recibir webhooks de Yape app.post('/api/webhooks/yape', async (req, res) => { try { const webhook = req.body; // Registra la recepción del webhook console.log(`Webhook recibido: Pago ${webhook.Tipo} de ${webhook.NombreCliente} por S/${webhook.Monto}`); // Procesa la notificación await processPaymentNotification(webhook); // Responde con éxito res.status(200).json({ success: true }); } catch (error) { console.error('Error al procesar el webhook:', error); res.status(500).json({ success: false, error: 'Error al procesar la notificación' }); } }); // Función para procesar las notificaciones de pago async function processPaymentNotification(webhook) { // Aquí va tu lógica para procesar el pago // Por ejemplo: // - Actualizar el estado de un pedido en la base de datos // - Enviar una notificación al cliente o vendedor // - Generar un comprobante o factura // - etc. // Ejemplo: Verificar estado del pago if (webhook.Estado === "Completado") { // Actualiza el estado del pedido o inventario } } // Iniciar el servidor app.listen(PORT, () => { console.log(`Servidor de webhooks escuchando en el puerto ${PORT}`); });
# Servidor Flask para recibir webhooks de BiPe Alerta from flask import Flask, request, jsonify import logging from datetime import datetime # Configuración de logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger('bipe-webhook') app = Flask(__name__) # Endpoint para recibir webhooks de Yape @app.route('/api/webhooks/yape', methods=['POST']) def yape_webhook(): # Obtener el JSON recibido webhook_data = request.json # Registrar la notificación recibida logger.info( f"Webhook recibido: Pago {webhook_data.get('Tipo')} de" f" {webhook_data.get('NombreCliente')} por S/{webhook_data.get('Monto')}" ) # Procesar la notificación process_payment_notification(webhook_data) # Responder con éxito return jsonify({"success": True}) def process_payment_notification(webhook_data): # Extraer información relevante payment_id = webhook_data.get('Id') client_name = webhook_data.get('NombreCliente') amount = webhook_data.get('Monto') payment_type = webhook_data.get('Tipo') payment_status = webhook_data.get('Estado') # Convertir la fecha y hora try: payment_datetime = datetime.fromisoformat(webhook_data.get('FechaHora').replace('Z', '+00:00')) except ValueError: payment_datetime = datetime.now() # Valor predeterminado si hay error de formato # Implementa tu lógica de negocio aquí # Por ejemplo: # - Actualizar estado de pedidos en la base de datos # - Enviar confirmaciones por correo electrónico # - Actualizar inventario # - etc. # Ejemplo de lógica básica if payment_status == "Completado": logger.info(f"Procesando pago completado #{payment_id} de {client_name}") # Aquí actualizarías tu base de datos o sistema if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=False)
Para asegurar que solo BiPe Alerta pueda enviar notificaciones a tu webhook, te recomendamos implementar las siguientes medidas de seguridad: