Saltar a contenido

Cómo integrar la API de 4Geeks Payments en una aplicación de Node.js

🤖 Explicar con IA

Esta guía describe los pasos para integrar la API de 4Geeks Payments en una aplicación de Node.js, basándose en la publicación original del blog.

Requisitos previos

  • Node.js: Versión 14 o superior.
  • Cuenta de 4Geeks Payments: Necesitará sus claves pública y secreta (Public y Secret keys) del panel de desarrollador.
  • Conocimientos básicos: APIs REST y JavaScript asíncrono (async/await).

Paso 1: Configurar su proyecto

Inicialice un nuevo proyecto de Node.js e instale las dependencias necesarias (axios, dotenv, express, body-parser).

  1. Inicializar el proyecto:
mkdir 4geeks-payments-integration
cd 4geeks-payments-integration
npm init -y
npm install axios dotenv express body-parser
  1. Configurar las variables de entorno: Cree un archivo .env para almacenar sus credenciales de API de forma segura.
# archivo .env
FOURGEEKS_SECRET_KEY=tu_clave_secreta_aqui
PORT=3000

Paso 2: Autenticarse con la API

Cree un archivo de servicio (por ejemplo, paymentService.js) para manejar las solicitudes de API. Utilizará axios para enviar su clave secreta en el encabezado de autorización.

// paymentService.js
require('dotenv').config();
const axios = require('axios');

const API_URL = 'https://api.4geeks.io/v1'; // Endpoint base de la API

const client = axios.create({
  baseURL: API_URL,
  headers: {
    'Authorization': `Bearer ${process.env.FOURGEEKS_SECRET_KEY}`,
    'Content-Type': 'application/json'
  }
});

module.exports = client;

Paso 3: Crear un Intento de Pago (Payment Intent)

Añada una función a paymentService.js para crear un “Intento de Pago” (o Cargo). Esto inicia la transacción.

const createPaymentIntent = async (amount, currency = 'USD', customerId) => {
  try {
    const response = await client.post('/charges', {
      amount: amount, // Monto en centavos (ej., 1000 = $10.00)
      currency: currency,
      customer: customerId,
      description: 'Cargo por suscripción SaaS'
    });

    return response.data;
  } catch (error) {
    console.error('Error de pago:', error.response ? error.response.data : error.message);
    throw new Error('No se pudo crear el intento de pago');
  }
};

module.exports = { createPaymentIntent };

Paso 4: Manejar Webhooks

Configure un servidor Express (por ejemplo, en server.js) para escuchar eventos de webhook. Esto es fundamental para confirmar los pagos de forma asíncrona (ej., charge.succeeded).

// server.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// Endpoint de Webhook para escuchar eventos de pago
app.post('/webhook', bodyParser.raw({type: 'application/json'}), (req, res) => {
  const event = req.body;

  // En producción, verifique la firma aquí para asegurar que la solicitud es genuina.

  switch (event.type) {
    case 'charge.succeeded':
      const charge = event.data.object;
      console.log('Pago exitoso:', charge.id);
      // Lógica para actualizar la suscripción del usuario o completar el pedido
      break;
    case 'charge.failed':
      console.log('Pago fallido:', event.data.object.id);
      // Lógica para notificar al usuario
      break;
    default:
      console.log('Tipo de evento no manejado:', event.type);
  }

  res.json({received: true});
});

app.listen(process.env.PORT || 3000, () => console.log('Servidor en ejecución...'));

Paso 5: Prueba y despliegue

  • Modo Sandbox: Utilice el entorno sandbox de 4Geeks Payments para probar cargos, tarjetas rechazadas y errores sin usar dinero real.
  • Pasar a producción (Go Live): Una vez verificado, cambie sus credenciales a las claves de producción.

Consejo: Para casos de uso sencillos, el artículo menciona que 4Geeks también ofrece enlaces de pago sin código (no-code checkout links) si no necesita una integración completa de la API personalizada.