Saltar al contenido principal
← Volver a la documentación

Instalación

Instala el plugin TriaPay para DHRU y envía tu primer pago de prueba en menos de diez minutos.

Instalación

Guía completa: registra un tenant, instala el plugin DHRU y envía un pago de prueba.

Requisitos previos

  • Una instalación funcional de DHRU Fusion (cualquier versión reciente de PHP compatible con DHRU).
  • Acceso SSH o panel para colocar dos archivos PHP en modules/gateways/ y modules/gateways/callback/.
  • Una URL HTTPS accesible públicamente para tu instancia DHRU (TriaPay envía webhooks firmados allí).
  • Una cuenta de tenant en TriaPay (regístrate aquí).

1. Crea tu tenant

Regístrate en /register con tu nombre de usuario, correo y una contraseña de al menos 12 caracteres. Verifica tu correo a través del enlace que enviamos. Un administrador activará luego tu tenant, normalmente dentro de un día hábil. Recibirás un segundo correo cuando se complete la activación.

2. Genera las credenciales de API

Inicia sesión. Abre la página Integration. La pestaña Webhook & API te entrega tres cosas:

  • Webhook URL — el destino donde TriaPay hace POST de los eventos de crédito. Apúntala a la ruta de callback de tu DHRU: https://yourdhru.com/modules/gateways/callback/triapay.php. Si tu DHRU está en una subruta, prefíjala: https://yourdomain.com/dhru/modules/gateways/callback/triapay.php.
  • API key — el bearer token que tu plugin DHRU usa para crear órdenes. Haz clic en Rotate para generarla. Se muestra una sola vez, cópiala de inmediato.
  • Webhook secret — la clave HMAC-SHA256 que tu plugin usa para verificar las firmas de los webhooks. Haz clic en Rotate para generarla. Se muestra una sola vez.

3. Instala el plugin DHRU

El plugin se distribuye como dos archivos PHP, ambos descargables desde la pestaña Webhook & API:

Descarga Ubicación
triapay.php (gateway) <dhru-root>/modules/gateways/triapay.php
triapay-callback.php (callback, renombra a triapay.php) <dhru-root>/modules/gateways/callback/triapay.php

El archivo de callback se renombra durante la instalación porque DHRU espera que el callback comparta el basename del gateway. Distribuimos la descarga con un nombre diferente solo para mantener ambos archivos distinguibles en el directorio plano /downloads/ de TriaPay.

3a. Whitelist del callback en `.htaccess`

El archivo modules/gateways/callback/.htaccess de DHRU deniega el acceso por defecto y autoriza callbacks vía una regex FilesMatch. Añade |^triapay\.php a esa lista para que los webhooks de TriaPay puedan alcanzar el callback:

<FilesMatch "^wombi\.php|^gourlio\.php|...|^tripay\.php|^triapay\.php">
    Order Allow,Deny
    Allow from all
</FilesMatch>

Sin esta edición, tu DHRU devuelve 403 Forbidden en cada entrega de webhook y las órdenes nunca pasan de confirmed. No es necesario recargar Apache — los cambios en .htaccess se aplican en la siguiente petición.

3b. Configura el gateway en DHRU

Después de subirlos, abre el admin de DHRU → Settings → Payment Gateways → TriaPay. Pega estos valores:

  • API URL: https://triapay.net/api/v1
  • API key: el valor tpk_live_... que rotaste en el paso 2
  • Webhook secret: el valor que rotaste en el paso 2

Guarda.

4. Configura los métodos de cobro

De vuelta al dashboard de TriaPay → Integration:

  • Pestaña Crypto → por cada chain que quieras aceptar configura la master address a la que los clientes enviarán los fondos. TRC20 acepta solo USDT; BEP20 acepta tanto USDT como USDC. Opcionalmente, define montos mínimo/máximo y comisiones en Advanced settings.
  • Pestaña Binance Pay → configura tu Pay ID de Binance más una API key + secret de Binance con permisos Read and Pay únicamente. Tanto USDT como USDC están soportados aquí. Las credenciales se cifran en reposo con AES-256-GCM.

5. Envía un pago de prueba

Desde el panel de cliente de DHRU, ingresa como un usuario de prueba. Crea un depósito de $1. Elige USDT TRC20 (lo más rápido de confirmar en pruebas). Envía el monto exacto que se muestra incluyendo el sufijo decimal final (por ejemplo, 1.0123 USDT; los decimales finales codifican el código de coincidencia de la orden; el ancho es configurable por método, de 1 a 3 dígitos).

La detección corre con una cadencia ajustada: los listeners TRC20 y BEP20 escanean cada 3 segundos, Binance Pay cada 5 segundos. El crédito de extremo a extremo es típicamente de 3 a 7 segundos para cripto y de 5 a 10 segundos para Binance Pay, más la cola de confirmación de la chain.

En segundos deberías ver:

  1. El estado de la orden pasa pending → matched → credited en tu dashboard de TriaPay.
  2. La factura de DHRU marcada como pagada.
  3. El saldo del usuario actualizado.

Si algo se queda atascado, revisa el Audit log del dashboard para conocer el motivo de la falla.

Resolución de problemas

Síntoma Causa probable
La orden queda en confirmed y nunca llega a credited Falló la entrega del webhook. Revisa el audit log para ver la respuesta HTTP de tu DHRU. Verifica que la URL del webhook sea accesible públicamente, que tu DHRU no esté detrás de un basic-auth y que el webhook secret coincida en ambos lados.
El pago aparece en la chain pero ninguna orden coincide El cliente envió el monto incorrecto u omitió la nota de Binance Pay. Abre Admin → Orphan transactions y vincula manualmente a la factura correcta.
El plugin recibe 429 Rate limited El plugin está consultando /api/v1/orders con demasiada frecuencia. El límite es de 60 órdenes por tenant por minuto. La respuesta ahora incluye un header Retry-After (segundos); espera y reintenta.
401 invalid api key O bien la API key fue rotada y el plugin todavía conserva el valor anterior, o el prefijo de la clave no coincide. Rota de nuevo y vuelve a pegar.
Falla la verificación de la firma del webhook en DHRU El body debe hashearse exactamente como se recibió (bytes crudos, sin recodificar). Revisa X-Payment-Sig-Version: la versión 2 firma {timestamp}\n{idempotency}\n{body}, la versión 1 firma solo el body. El plugin DHRU incluido maneja ambas durante la ventana de rollover de 30 días. Rechaza si |now − X-Payment-Timestamp| > 300.

Siguientes pasos

  • API reference — contrato REST para integraciones directas
  • Webhook spec — formato completo del payload y verificación de firma