Portal de Desarrolladores

PrestaShop Redsys Hooks 18 hooks

Hooks para personalizar el procesamiento de pagos, la gestión de tokens y las capacidades de pago en Redsys para PrestaShop.

PrestaShop 8+ · PHP 8.1+ Referencia de la REST API Ver plugin
0 hooks mostrados

Flujo de pago 3

actionRedsysBeforePaymentAction

Se dispara inmediatamente antes de que el módulo prepare los parámetros de Redsys y construya el formulario de pago, después de que se hayan validado el carrito y el cliente. Úsalo para ejecutar lógica previa al pago como comprobaciones de fraude, registro o ajustes de última hora del carrito.

Este hook se despacha desde dos controladores. El controlador de Bizum añade una clave bizum_phone.

Fuente: - controllers/front/payment.php:105 - controllers/front/bizumpayment.php:261 (añade bizum_phone)

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysBeforePayment');
}

public function hookActionRedsysBeforePayment(array $params)
{
    /** @var Cart $cart */
    $cart = $params['cart'];
    /** @var Customer $customer */
    $customer = $params['customer'];
    $gateway = $params['gateway'];

    // Bizum context exposes the phone number.
    if ($gateway === 'bizum' && isset($params['bizum_phone'])) {
        PrestaShopLogger::addLog(
            'Bizum payment starting for ' . $params['bizum_phone']
        );
    }

    PrestaShopLogger::addLog(sprintf(
        'Redsys payment starting: cart %d, customer %d, gateway %s',
        $cart->id,
        $customer->id,
        $gateway
    ));
}
actionRedsysModifyParametersAction

Se dispara después de que el módulo haya ensamblado el array de parámetros DS_MERCHANT_* pero antes de firmarlo y enviarlo a Redsys. Úsalo para añadir, sobrescribir o eliminar parámetros de la pasarela (por ejemplo para inyectar un campo DS_MERCHANT_* personalizado, cambiar los datos del comercio o ajustar valores 3DS).

El módulo lee el valor de retorno encadenado: si un listener devuelve un array que contiene una clave params, ese array reemplaza los parámetros usados para la transacción.

Este hook se despacha desde dos controladores. El controlador de Bizum añade una clave gateway.

Fuente: - controllers/front/payment.php:289 - controllers/front/bizumpayment.php:935 (añade gateway)

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysModifyParameters');
}

public function hookActionRedsysModifyParameters(array $params)
{
    $merchantParams = $params['params'];

    // Add or override a Redsys merchant parameter.
    $merchantParams['DS_MERCHANT_MERCHANTDATA'] = 'custom-ref-' . $params['cart']->id;

    // Returning the params key replaces the transaction parameters.
    return ['params' => $merchantParams];
}
actionRedsysAfterPaymentAction

Se dispara después de que se haya procesado un pago in-site (InSite) correcto y se haya creado el pedido, y después de guardar cualquier token de tarjeta. Úsalo para efectos secundarios posteriores al pago, como sincronizar con un ERP, conceder recompensas o enviar notificaciones personalizadas.

Fuente: - controllers/front/insitepayment.php:652

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysAfterPayment');
}

public function hookActionRedsysAfterPayment(array $params)
{
    $orderId = (int) $params['order_id'];
    $dsOrder = $params['ds_order'];

    PrestaShopLogger::addLog(sprintf(
        'Redsys InSite payment completed: order %d, Ds_Order %s',
        $orderId,
        $dsOrder
    ));
}

IPN / notificaciones 4

actionRedsysBeforeIPNProcessAction

Se dispara dentro del front controller de IPN después de que se haya validado la presencia de los parámetros de comercio entrantes y la firma, pero antes de procesar el payload de la IPN. Úsalo para registrar, auditar o inspeccionar los datos IPN en bruto antes de que el módulo actúe sobre ellos.

Fuente: - controllers/front/ipn.php:349

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysBeforeIPNProcess');
}

public function hookActionRedsysBeforeIPNProcess(array $params)
{
    PrestaShopLogger::addLog(
        'Incoming Redsys IPN, signature length: ' . strlen($params['signature'])
    );
}
actionRedsysAfterIPNProcessAction

Se dispara después de que el payload de la IPN se haya procesado correctamente (antes de devolver la respuesta de éxito a Redsys). Úsalo para reaccionar al resultado del procesamiento, por ejemplo para desencadenar la preparación posterior del pedido una vez que se confirma.

Fuente: - controllers/front/ipn.php:359

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysAfterIPNProcess');
}

public function hookActionRedsysAfterIPNProcess(array $params)
{
    if (!empty($params['order_id'])) {
        PrestaShopLogger::addLog(
            'Redsys IPN processed for order ' . (int) $params['order_id']
        );
    }
}
actionRedsysPaymentSuccessAction

Se dispara cuando un pago se confirma como correcto durante el procesamiento de la IPN y el pedido ha sido validado. Úsalo para realizar lógica de negocio que dependa de un pedido confirmado y pagado.

Fuente: - controllers/front/ipn.php:865

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysPaymentSuccess');
}

public function hookActionRedsysPaymentSuccess(array $params)
{
    $orderId = (int) $params['order_id'];
    $authCode = $params['response']['Ds_AuthorisationCode'] ?? null;

    PrestaShopLogger::addLog(sprintf(
        'Redsys payment success: order %d, auth code %s',
        $orderId,
        (string) $authCode
    ));
}
actionRedsysPaymentErrorAction

Se dispara cuando un pago falla durante el procesamiento de la IPN, después de cancelar cualquier pedido pendiente y registrar la transacción fallida. Úsalo para la gestión de pagos fallidos, como alertas, lógica de reintento o analítica.

Fuente: - controllers/front/ipn.php:996

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysPaymentError');
}

public function hookActionRedsysPaymentError(array $params)
{
    PrestaShopLogger::addLog(sprintf(
        'Redsys payment error %s: %s (cart %d)',
        $params['error_code'],
        $params['error_message'],
        (int) $params['cart']->id
    ), 3);
}

Modificadores de parámetros y número de pedido 1

actionRedsysModifyOrderNumberAction

Se dispara cuando el módulo genera el número de pedido de Redsys de 12 caracteres, después de que el módulo lo haya construido y saneado (incluida la protección que impide que los números empiecen por 000, reservado para transacciones de "añadir método de pago"). Es el equivalente en PrestaShop del filtro de número de pedido de WordPress. Úsalo para imponer un esquema de numeración personalizado.

El módulo lee los valores de retorno encadenados: gana el primer listener que devuelva un order_number no vacío. El valor devuelto se vuelve a validar entonces mediante la protección de prefijo reservado antes de usarse.

Fuente: - src/Service/RedsysOrderNumberService.php:78

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysModifyOrderNumber');
}

public function hookActionRedsysModifyOrderNumber(array $params)
{
    // Build a custom 12-char number prefixed per gateway.
    $prefix = $params['gateway'] === 'bizum' ? 'BZ' : 'RS';
    $custom = $prefix . str_pad((string) $params['cart_id'], 10, '0', STR_PAD_LEFT);

    return ['order_number' => substr($custom, 0, 12)];
}

Tokenización 1

actionRedsysTokenCreatedAction

Se dispara después de que se haya almacenado un token de tarjeta (identificador de comercio) para un cliente tras un pago tokenizado correcto. Úsalo para reflejar el token en un almacén externo, enviar una notificación de "tarjeta guardada" o actualizar un CRM.

Fuente: - controllers/front/insitepayment.php:785

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysTokenCreated');
}

public function hookActionRedsysTokenCreated(array $params)
{
    PrestaShopLogger::addLog(sprintf(
        'Redsys token created for customer %d (%s)',
        (int) $params['customer_id'],
        $params['card_brand']
    ));
}

Express checkout / Paygold 3

actionRedsysExpressCustomFieldsAction

Se dispara mientras el flujo de checkout exprés recopila campos personalizados adicionales de los módulos instalados. Úsalo para inyectar datos extra en el payload del checkout exprés (por ejemplo un número de fidelización o un mensaje de regalo).

El módulo combina cada array devuelto por los listeners en el conjunto de campos adicionales: cada resultado encadenado que sea un array se combina mediante array_merge.

Fuente: - src/Service/ExpressCustomFieldsService.php:553

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysExpressCustomFields');
}

public function hookActionRedsysExpressCustomFields(array $params)
{
    $fields = [];

    if (!empty($params['customer_id'])) {
        $fields['loyalty_ref'] = 'LOY-' . (int) $params['customer_id'];
    }

    // The returned array is merged into the express-checkout fields.
    return $fields;
}
actionRedsysExpressOrderCreatedAction

Se dispara después de que se haya creado correctamente un pedido a través del flujo de checkout exprés. Úsalo para efectos secundarios posteriores al pedido específicos del checkout exprés (como etiquetar el pedido o notificar a la preparación).

Fuente: - src/Service/ExpressCheckoutService.php:1316

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysExpressOrderCreated');
}

public function hookActionRedsysExpressOrderCreated(array $params)
{
    /** @var Order $order */
    $order = $params['order'];

    PrestaShopLogger::addLog(sprintf(
        'Express order created: %s via %s (txn %s)',
        $order->reference,
        $params['payment_method'],
        $params['transaction_id']
    ));
}
actionPaygoldOrderPaidAction

Se dispara cuando un pedido pagado a través de Paygold (un flujo de pago por enlace) se ha marcado como pagado y el pago se ha registrado en el pedido. Úsalo para ampliar el comportamiento posterior al pago de Paygold.

Fuente: - src/Service/PaygoldService.php:944

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionPaygoldOrderPaid');
}

public function hookActionPaygoldOrderPaid(array $params)
{
    /** @var Order $order */
    $order = $params['order'];

    PrestaShopLogger::addLog(sprintf(
        'Paygold order %s paid: %.2f, auth %s',
        $order->reference,
        (float) $params['amount'],
        $params['auth_code']
    ));
}

Capacidades de pago 5

actionRedsysGatewayAvailabilityAction

Se dispara al final de la construcción de la lista de opciones de pago de Redsys para el carrito, justo antes de devolver esa lista al checkout de PrestaShop. El array payment_options se pasa por referencia, de modo que los listeners pueden añadir, eliminar o reordenar opciones de pago in situ. Este hook no está encadenado (no se usa null, true); la modificación se hace mediante la referencia, no mediante el valor de retorno.

Fuente: - ps_redsys_gateway.php:1607

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysGatewayAvailability');
}

public function hookActionRedsysGatewayAvailability(array &$params)
{
    // Remove a Redsys option for carts under a threshold.
    if ($params['cart']->getOrderTotal() < 5.0) {
        foreach ($params['payment_options'] as $i => $option) {
            if (strpos($option->getModuleName() ?? '', 'redsys') !== false) {
                unset($params['payment_options'][$i]);
            }
        }
        $params['payment_options'] = array_values($params['payment_options']);
    }
}
actionCheckPaymentCapabilityAction

Se dispara cuando el registro de capacidades comprueba si un módulo de pasarela dado soporta una capacidad dada. Úsalo para declarar dinámicamente que una pasarela soporta una capacidad que no está en el registro estático. Si cualquier listener devuelve true, se considera que la pasarela soporta la capacidad.

Fuente: - src/Registry/CapabilityRegistry.php:182

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionCheckPaymentCapability');
}

public function hookActionCheckPaymentCapability(array $params)
{
    // Declare that our gateway supports recurring payments.
    if ($params['module_name'] === 'mygateway'
        && $params['capability'] === 'recurring'
    ) {
        return true;
    }

    return $params['default_supported'];
}
actionRegisterPaymentCapabilitiesAction

Se dispara una vez cuando el registro de capacidades se inicializa, después de haber cargado las capacidades desde la base de datos. Se pasa la propia instancia del registro para que los listeners puedan registrar capacidades adicionales o asignaciones pasarela-capacidad de forma programática.

Fuente: - src/Registry/CapabilityRegistry.php:252

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRegisterPaymentCapabilities');
}

public function hookActionRegisterPaymentCapabilities(array $params)
{
    $registry = $params['registry'];

    // Register additional capabilities/mappings on the registry instance.
    // (See CapabilityRegistry for the available registration methods.)
    if (method_exists($registry, 'registerGatewayCapability')) {
        $registry->registerGatewayCapability('mygateway', 'recurring');
    }
}
actionBeforeCapabilityFilterAction

Se dispara antes de que la lista de opciones de pago se filtre por las capacidades requeridas del carrito (solo cuando el carrito tiene realmente capacidades requeridas). El array payment_options se pasa por referencia, de modo que los listeners pueden ajustar el conjunto de candidatos antes de que ocurra el filtrado.

Fuente: - src/Service/PaymentFilterService.php:76

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionBeforeCapabilityFilter');
}

public function hookActionBeforeCapabilityFilter(array &$params)
{
    PrestaShopLogger::addLog(
        'Capability filter starting; required: '
        . implode(',', $params['required_capabilities'])
    );

    // Optionally remove a module before filtering.
    unset($params['payment_options']['some_module']);
}
actionAfterCapabilityFilterAction

Se dispara después de que la lista de opciones de pago se haya filtrado por las capacidades requeridas del carrito. Las opciones filtradas se pasan por referencia como payment_options, y se proporciona la lista de módulos eliminados para su inspección. Úsalo para volver a añadir una opción, registrar las eliminaciones o posprocesar de otro modo el conjunto filtrado.

Fuente: - src/Service/PaymentFilterService.php:115

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionAfterCapabilityFilter');
}

public function hookActionAfterCapabilityFilter(array &$params)
{
    foreach ($params['removed_modules'] as $removed) {
        PrestaShopLogger::addLog(sprintf(
            'Module %s removed: missing capability %s',
            $removed['module'],
            $removed['missing_capability']
        ));
    }
}

Configuración 1

actionRedsysConfigSaveAction

Se dispara después de guardar el formulario de configuración del back-office del módulo (todos los valores de configuración persistidos, certificados de Apple Pay gestionados, visibilidad de pestañas actualizada). Úsalo para reaccionar a cambios de configuración, por ejemplo para invalidar una caché o sincronizar ajustes con un sistema externo.

Fuente: - ps_redsys_gateway.php:5843

PHP
public function install()
{
    return parent::install()
        && $this->registerHook('actionRedsysConfigSave');
}

public function hookActionRedsysConfigSave(array $params)
{
    $module = $params['module'];

    PrestaShopLogger::addLog(
        'Redsys configuration saved (module ' . $module->name . ')'
    );
}

Consigue la biblioteca completa de hooks

Cada action y filter mostrado aquí se incluye con Redsys para PrestaShop Premium.