Bancard VPOS Gateway
Pluging para woocommerce de wordpress de Bancard Paraguay
by Cv - 2025 · github.com/clauvaldez/bancard-wordpress-plugin
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/clauvaldez/bancard-wordpress-plugin/archive/refs/heads/main.zip# Bancard VPOS Gateway for WooCommerce
Pasarela de pagos Bancard VPOS para WooCommerce que permite procesar pagos con tarjetas de crédito y débito de forma segura a través de la plataforma VPOS de Bancard.
🚀 Características
🎯 Funcionalidades Principales
- ✅ Procesamiento de pagos con tarjetas de crédito y débito
- ✅ Integración completa con WooCommerce
- ✅ Compatibilidad con Checkout clásico y Bloques (Block Checkout)
- ✅ Soporte para High-Performance Order Storage (HPOS)
- ✅ Redireccionamiento seguro a formulario de pago de Bancard
- ✅ Validación y verificación de webhooks
- ✅ Soporte para reembolsos (parciales y completos)
- ✅ Logging detallado para debugging
- ✅ Entornos de pruebas y producción separados
🔧 Características Técnicas
- ✅ Compatible con WordPress 6.0+ y WooCommerce 9.0+
- ✅ Soporte para WooCommerce Blocks (Checkout moderno)
- ✅ Responive design para todos los dispositivos
- ✅ Diseño compatible con dark mode
- ✅ Soporte para accesibilidad (WCAG)
- ✅ Optimizado para performance
- ✅ Código modular y extensible
🌐 Integración con Bancard
- ✅ Single Buy API (Iniciar transacción)
- ✅ Webhooks para confirmación de pagos
- ✅ Verificación de tokens de seguridad
- ✅ Soporte para diferentes códigos de respuesta
- ✅ Manejo automático de redirecciones
📋 Requisitos del Sistema
Requisitos Mínimos
- WordPress: 6.0 o superior
- WooCommerce: 8.0 o superior
- PHP: 7.4 o superior
- MySQL: 5.6 o superior (recomendado 8.0+)
Requisitos Recomendados
- WordPress: 6.7+
- WooCommerce: 8.0+
- PHP: 8.1+
- Servidor web: Apache/Nginx con HTTPS forzoso
Certificados Requeridos
- Certificado SSL válido (para producción)
- Credenciales de Bancard VPOS (clave pública y privada)
📦 Instalación
Instalación Manual
-
Descargar el plugin
git clone https://github.com/clauvaldez/bancard-wordpress-plugin.git cd bancard-wordpress-plugin -
Subir al servidor
- Copia la carpeta completa del plugin a
wp-content/plugins/bancard-vpos - O instala via ZIP desde el panel de WordPress
- Copia la carpeta completa del plugin a
-
Activar el plugin
- Ve a Plugins → Plugins instalados
- Busca "Bancard VPOS Gateway"
- Haz clic en Activar
-
Configurar permisos (opcional pero recomendado)
# Asegurar que los archivos sean legibles por el servidor web chown -R www-data:www-data /var/www/html/wp-content/plugins/bancard-vpos/ chmod -R 755 /var/www/html/wp-content/plugins/bancard-vpos/
Instalación via Composer (para desarrolladores)
{
"repositories": [
{
"type": "git",
"url": "https://github.com/clauvaldez/bancard-wordpress-plugin.git"
}
],
"require": {
"clauvaldez/bancard-wordpress-plugin": "dev-main"
}
}
Verificación de Instalación
Una vez instalado y activado, verificar:
- ✅ Plugin aparece en la lista de plugins activados
- ✅ Opción "Bancard VPOS" aparece en WooCommerce → Ajustes → Pagos
- ✅ No hay errores de PHP en los logs de WordPress
- ✅ Gateway está deshabilitado por defecto (configurar credenciales primero)
⚙️ Configuración
Configuración Básica
- Ve a WooCommerce → Ajustes → Pagos
- Localiza "Tarjeta de Crédito/Débito con Bancard VPOS"
- Haz clic en Administrar (o Configurar)
Campos de Configuración
🎛️ Configuración General
- Habilitar/Deshabilitar: Activar el gateway de pago
- Título: Texto que verán los clientes (ej: "Pagar con tarjeta")
- Descripción: Información adicional mostrada en checkout
- Entorno: Ambiente para procesamiento de pagos
staging: Para pruebas y desarrolloproduction: Para transacciones reales
🔑 Credenciales de Bancard
- Clave Pública: Proporcionada por Bancard
- Clave Privada: Proporcionada por Bancard
⚠️ IMPORTANTE: La clave privada nunca debe ser compartida
🔧 Opciones Avanzadas
- Modo Debug: Activar logging detallado (solo en desarrollo)
- X-Frame-Options: Política para iframes (CSP)
Configuración por Entorno
Ambiente de Pruebas (Staging)
Clave Pública: [proporcionada por Bancard]
Clave Privada: [proporcionada por Bancard]
Entorno: Staging
URLs: https://vpos.infonet.com.py:8888/*
Ambiente de Producción
Clave Pública: [proporcionada por Bancard]
Clave Privada: [proporcionada por Bancard]
Entorno: Production
URLs: https://vpos.infonet.com.py/*
Modo Debug: Desactivado
URLs de Webhooks
Configurar en el panel de Bancard las siguientes URLs:
Para Staging
Éxito: https://tudominio.com/?wc-api=bancard_vpos
Error: https://tudominio.com/?wc-api=bancard_vpos
Para Producción
Éxito: https://tudominio.com/?wc-api=bancard_vpos
Error: https://tudominio.com/?wc-api=bancard_vpos
🎯 Uso
Para Compradores
- Agregar productos al carrito
- Ir al checkout
- Seleccionar método de pago "Bancard VPOS"
- Completar datos de envío y facturación
- Confirmar orden
- Será redirigido automáticamente al formulario seguro de Bancard
Flujo de Pago
sequenceDiagram
participant Cliente
participant WooCommerce
participant Plugin
participant Bancard
participant Webhook
Cliente->>WooCommerce: Selecciona Bancard VPOS
WooCommerce->>Plugin: process_payment()
Plugin->>Bancard: Single Buy API
Bancard-->>Plugin: Process ID + Token
Plugin-->>WooCommerce: Redirect URL
WooCommerce-->>Cliente: Página de recibo con iframe
Cliente->>Bancard: Completa pago en formulario seguro
Bancard->>Webhook: Envía confirmación
Webhook-->>Plugin: process_webhook()
Plugin-->>WooCommerce: Actualiza orden
WooCommerce-->>Cliente: Página de agradecimiento
Estados de Orden
El plugin maneja automáticamente los siguientes estados:
- Pendiente: Esperando pago (recibido process_id)
- En espera: Pago pendiente en Bancard
- Procesado: Pago completado exitosamente
- Rechazado: Pago fallido
- FALLIDO: Error en procesamiento
Procesamiento de Webhooks
El plugin maneja webhooks con diferentes formatos:
// Formato nuevo (recomendado)
{
"operation": {
"shop_process_id": "123",
"response_code": "00",
"transaction_id": "...",
"response_description": "Pago aprobado"
}
}
// Formato alternativo
{
"shop_process_id": "123",
"response_code": "00",
"response": "S"
}
🛠️ Desarrollo
Arquitectura del Plugin
bancard-vpos/
├── bancard-vpos.php # Plugin principal y hooks
├── bancard-gateway-classes.php # Clase WC_Bancard_VPOS_Gateway
├── bancard-debug.php # Herramienta de diagnóstico (REMOVER EN PROD)
├── includes/
│ └── class-bancard-blocks-integration.php # Integración con bloques
└── assets/
├── bancard-blocks.asset.php # Dependencias JS para bloques
├── bancard-blocks.js # JavaScript para checkout blocks
├── bancard.js # JavaScript frontend (jQuery)
└── bancard.css # Estilos CSS
Clases Principales
WC_Bancard_VPOS_Gateway
- Extiende
WC_Payment_Gateway - Maneja configuración y procesamiento de pagos
- Genera tokens de seguridad
- Maneja webhooks y confirmaciones
WC_Bancard_VPOS_Blocks_Integration
- Extiende
AbstractPaymentMethodType - Registra el método de pago en WooCommerce Blocks
- Proporciona data al frontend de bloques
Hooks y Filtros
Actions
woocommerce_api_bancard_vpos: Procesar webhookswp_enqueue_scripts: Cargar scripts frontendadmin_enqueue_scripts: Cargar scripts adminadd_meta_boxes: Agregar información en órdenes
Filters
woocommerce_payment_gateways: Registrar gatewayplugin_action_links: Agregar enlaces en plugins
API de Bancard VPOS
Endpoints por Entorno
Staging:
- Single Buy:
https://vpos.infonet.com.py:8888/vpos/api/0.3/single_buy - Confirmation:
https://vpos.infonet.com.py:8888/vpos/api/0.3/confirmation - JavaScript:
https://vpos.infonet.com.py:8888/checkout/javascript/dist/bancard-checkout-4.0.0.js
Production:
- Single Buy:
https://vpos.infonet.com.py/vpos/api/0.3/single_buy - Confirmation:
https://vpos.infonet.com.py/vpos/api/0.3/confirmation - JavaScript:
https://vpos.infonet.com.py/checkout/javascript/dist/bancard-checkout-4.0.0.js
Payload de Single Buy
{
"public_key": "MI_PUBLIC_KEY",
"operation": {
"token": "md5_hash",
"shop_process_id": "123",
"currency": "PYG",
"amount": "100000.00",
"description": "Orden #123",
"return_url": "https://tudominio.com/checkout/order-received/123",
"cancel_url": "https://tudominio.com/checkout"
}
}
Logging y Depuración
Tabla de Logs
wp_bancard_vpos_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
order_id BIGINT NOT NULL,
process_id VARCHAR(255),
event_type VARCHAR(50) NOT NULL,
message TEXT NOT NULL,
data LONGTEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
Tipos de Evento
request: Solicitud enviada a Bancardresponse: Respuesta recibidapayment_success: Pago completadopayment_failed: Pago fallidopayment_pending: Pago en procesowebhook_received: Webhook procesado
Ver Logs
// Ver en WP-CLI
wp db query "SELECT * FROM wp_bancard_vpos_logs WHERE order_id = 123 ORDER BY created_at DESC;"
// O en PHP
global $wpdb;
$logs = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}bancard_vpos_logs WHERE order_id = 123");
Testing
Herramienta de Diagnóstico
Sube temporalmente bancard-debug.php a la raíz del plugin y accede:
https://tudominio.com/wp-content/plugins/bancard-vpos/bancard-debug.php
⚠️ IMPORTANTE: Eliminar después de usar.
Probando con WooCommerce
- Configurar entorno staging
- Crear orden de prueba
- Verificar logs:
WooCommerce → Estado → Logs - Usar credenciales de prueba de Bancard
Desarrollo Local
# Clonar repositorio
git clone https://github.com/clauvaldez/bancard-wordpress-plugin.git
cd bancard-wordpress-plugin
# Instalar dependencias de desarrollo si existen
composer install
npm install
# Crear symlink
ln -s /path/to/plugin /path/to/wordpress/wp-content/plugins/bancard-vpos
# Activar debug
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'BANCARD_VPOS_DEBUG', true );
Contribuciones
- Fork el proyecto
- Crear rama feature:
git checkout -b feature/nueva-funcionalidad - Commit cambios:
git commit -am 'Agrega nueva funcionalidad' - Push:
git push origin feature/nueva-funcionalidad - Crear Pull Request
Compilar Assets (si es necesario)
# Compilar CSS/JS si usas build tools
npm run build
# O manualmente concatenar y minimizar
🔧 Troubleshooting
Problemas Comunes
1. Gateway no aparece en checkout
Causa: Credenciales faltantes o WooCommerce inactivo Solución:
- Verificar credenciales configuradas
- Activar WooCommerce
- Limpiar cache:
Ctrl+F5
2. Error "Invalid token"
Causa: Formato de webhook incorrecto Solución:
- Verificar fórmula de hash del token
- Revisar logs de webhook
3. Iframe no se carga
Causa: CSP o JavaScript bloqueado Solución:
- Configurar headers CORS
- Verificar URL del JavaScript de Bancard
4. Pago pendiente
Causa: Webhook no llegue o falla procesamiento Solución:
- Verificar URL de webhook en panel Bancard
- Revisar logs de webhook
Comandos Útiles
-- Ver órdenes con Bancard
SELECT * FROM wp_posts p
JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
AND pm.meta_key = '_payment_method'
AND pm.meta_value = 'bancard_vpos';
-- Contar pagos por estado
SELECT COUNT(*) as count, meta_value as status
FROM wp_postmeta
WHERE meta_key = '_bancard_process_id'
GROUP BY meta_value;
📚 Recursos Adicionales
Documentación Bancard
WooCommerce
Desarrollo WordPress
📄 Licencia
Este plugin está licenciado bajo GPL v2 or later.
Copyright (C) 2025 Cv
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
🤝 Soporte
Canales de Soporte
- GitHub Issues: Para bugs y feature requests
- WordPress Support: Para consultas generales
- Bancard Support: Para temas específicos de la API
Reportar Problemas
Al reportar bugs, incluye:
- ✅ Versión de WordPress, WooCommerce y PHP
- ✅ Log de errores (si aplica)
- ✅ Pasos para reproducir
- ✅ Configuración del plugin (sin credenciales)
- ✅ URL de webhook configurada
Donaciones
Si encuentras útil este plugin, considera hacer una donación para apoyar el desarrollo continuo.
⭐ Si te gusta este plugin, dale una estrella en GitHub!
Hecho con ❤️ por Cv para la comunidad WordPress.