Estamos teniendo problemas con la notificación de pago de Redsys desde que hemos cambiado de servidor la web hace unos días. Te cuento la situación:
En el servidor de origen todo funcionaba correctamente, era un servidor compartido y las notificaciones llegaban bien y los pedidos se marcaban como “Procesando” sin problema.
Realizamos la migración a un VPS y también a?adimos Cloudflare. Al principio Cloudflare estaba bloqueando el user-agent de Redsys como comentas en varios hilos, a?adí la exclusión en el Firewall y comprobando desde Chrome con el user-agent Java 1.8.0_222 ya funcionaba correctamente.
Después del ajuste en Cloudflare, entró otro pedido y seguía quedándose en “Pendiente de pago”, lo más curioso es que en “Notas del pedido” dentro de WooCommerce no aparece nada, simplemente vacío.
Investigando un poco más, comprobamos en Redsys una operación que está pagada correctamente pero no llega la notificación:
Fecha y hora
11/09/2024 19:00:12
Comercio
126761527
Terminal
1
Descripción
Pedido 473862
Fecha de sesión
11/09/2024
Tipo de operación
Autorización
N.o pedido
819000473862
Resultado operación
Autorizada
N.o autorización
249707
Importe
57,99 EUR
Importe devuelto
0,00 EUR
N.o sesión
1
Tipo de pago
Challenge Visa
Moneda
EUR(978)
No de tarjeta
423601******0909
País de tarjeta
Espa?a
IP
87.219.45.6
País de conexión
Espa?a
Código tipo operación
0
Permite devolución
Si
Método de autenticación 3DSecure 2.0
09
Cód. ECI
05 - Segura
Exención enviada por el comercio
No se ha enviado exención
Exención tras análisis PSD2 del SIS
No se ha fijado exención
Respuesta TRA
No se ha pasado el análisis TRA
Acción a aplicar
Autenticar
Resumen operación
Se elimina el CVV en el mensaje de autorización
Detalle de la notificación 1
Fecha y hora
11/09/2024 19:01:09
Tipo notificación
HTTP
Modo de comunicación
Síncrona
Resultado operación
0000
Cod. respuesta servidor
Error (Server returned HTTP response code: 500 for URL: https://domain.com/?wc-api=WC_Gateway_redsys)
Ds_TransactionType:0; Ds_Card_Country:724; Ds_ProcessedPayMethod:78; Ds_Card_Brand:1; Ds_Order:819000473862; Ds_Date:11/09/2024; Ds_SecurePayment:1; Ds_Hour:19:01; Ds_Response:0000; Ds_AuthorisationCode:249707; Ds_Currency:978; Ds_ConsumerLanguage:1; Ds_MerchantCode:126761527; Ds_Card_Type:D; Ds_Terminal:001; Ds_Amount:5799; Server URL: sis.redsys.es; Si desea desactivar este tipo de notificaciones, acceda al portal de administración del tpv virtual (https://canales.redsys.es/portal) y en la configuración de su terminal establezca uno de lo siguientes valores de notificación ON-LINE: HTTP, HTTP (si falla, envia email al comercio) o sin notificación ON-LINE;
He quitado la parte del dominio por “domain” por privacidad. Aquí se puede ver que da un error 500 la notificación HTTP.
El VPS funciona con Plesk y tiene InmunifyAV y ModSecurity activo. En los logs no veo ningún bloqueo en el momento del pedido pero quizás pueda estar bloqueando al bot de Redsys?
Si necesitas cualquier otro Log o información no dudes en pedírmela.
Efectivamente hay un archivo fatal-errors y está relacionado con el plugin oficial de Bizum, que se utilizó en algún momento y después de la migración rompía la web al activar o desactivar cualquier plugin. Este plugin ya está eliminado ya que utilizamos el tuyo. Te lo copio de todas maneras:
2024-09-11T08:04:42+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T08:44:36+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T13:39:08+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T13:55:16+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T13:55:32+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T14:49:05+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T14:49:17+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T14:49:43+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T16:17:52+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T16:36:01+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T17:32:29+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T22:05:02+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T22:06:02+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T22:06:33+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T22:07:02+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]} 2024-09-11T22:08:02+00:00 CRITICAL Array and string offset access syntax with curly braces is no longer supported CONTEXT: {"error":{"type":64,"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/bizum/apiRedsys/json.php","line":164},"backtrace":[{"file":"/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/class-woocommerce.php","line":401,"function":"critical","class":"WC_Logger","type":"->"},{"function":"log_errors","class":"WooCommerce","type":"->"}]}
Sin embargo hoy, después de haber eliminado el plugin los pedidos siguen quedando “Pendiente de pago” y siguen dando un error 500. Te pego otra operación de hoy con el mismo error:
Fecha y hora
12/09/2024 10:31:16
Comercio
126761527
Terminal
1
Descripción
Pedido 473927
Fecha de sesión
12/09/2024
Tipo de operación
Autorización
N.o pedido
841000473927
Resultado operación
Autorizada
N.o autorización
220439
Importe
25,98 EUR
Importe devuelto
0,00 EUR
N.o sesión
1
Tipo de pago
Frictionless Visa
Moneda
EUR(978)
No de tarjeta
415006******4258
País de tarjeta
Espa?a
IP
85.51.35.164
País de conexión
Espa?a
Código tipo operación
0
Permite devolución
Si
Cód. ECI
05 - Segura
Exención enviada por el comercio
No se ha enviado exención
Exención tras análisis PSD2 del SIS
No se ha fijado exención
Respuesta TRA
No se ha pasado el análisis TRA
Acción a aplicar
Autenticar
Resumen operación
Se elimina el CVV en el mensaje de autorización
Detalle de la notificación 1
Fecha y hora
12/09/2024 10:32:06
Tipo notificación
HTTP
Modo de comunicación
Síncrona
Resultado operación
0000
Cod. respuesta servidor
Error (Server returned HTTP response code: 500 for URL: https://domain.com/?wc-api=WC_Gateway_redsys)
Ds_TransactionType:0; Ds_Card_Country:724; Ds_ProcessedPayMethod:80; Ds_Card_Brand:1; Ds_Order:841000473927; Ds_Date:12/09/2024; Ds_SecurePayment:1; Ds_Hour:10:32; Ds_Response:0000; Ds_AuthorisationCode:220439; Ds_Currency:978; Ds_ConsumerLanguage:1; Ds_MerchantCode:126761527; Ds_Card_Type:D; Ds_Terminal:001; Ds_Amount:2598; Server URL: sis.redsys.es; Si desea desactivar este tipo de notificaciones, acceda al portal de administración del tpv virtual (https://canales.redsys.es/portal) y en la configuración de su terminal establezca uno de lo siguientes valores de notificación ON-LINE: HTTP, HTTP (si falla, envia email al comercio) o sin notificación ON-LINE;
En los registros de WooCommerce no veo ningún fatal-errors de hoy:
Una vez hecho, realiza una prueba y luego vas a wp-content y ahí verás un archivo que se llama debug.log, copias su contenido y lo pegas. Esperemos que ahí si que se refleje.
Una vez hecho, luego puedes eliminar esas lineas y volver a dejar solo define( WP_DEBUG, false );
Resulta que ya teníamos activado el WP_DEBUG por otros temas. Es un archivo grande así que lo he subido a Drive, he dejado todos los registros del día 11 y de hoy. Hay algunas referencias a Redsys, a ver si ves algo.
Haz una cosa por favor, por si los necesitáis, renombra el archivo debug.log a por ejemplo debug.log.bck y prueba a realizar un pago. Es que me salen cosas como no definidas que lo deberían estar, y no se si es porque alguien visitó el endpoint directamente, o realmente no están definidos, lo que querría decir que algo está eliminando la notificación. Esto lo suelen hacer algunos plugins de seguridad o algo de seguridad del servidor filtrando el $_POST de Redsys. Pero para estar seguros, necesito un log que no haya tanta información y solo se cree en el. momento de un pedido.
Te dejo el debug.log con el pedido de prueba que acabo de hacer:
[12-Sep-2024 12:53:43 UTC] PHP Warning: Undefined array key "Ds_Merchant_Identifier" in /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woo-redsys-gateway-light/includes/class-redsysapi.php on line 56 [12-Sep-2024 12:53:43 UTC] PHP Warning: Undefined array key "Ds_ErrorCode" in /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woo-redsys-gateway-light/includes/class-redsysapi.php on line 56 [12-Sep-2024 12:53:43 UTC] PHP Warning: Undefined array key "Ds_PayMethod" in /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woo-redsys-gateway-light/includes/class-redsysapi.php on line 56 [12-Sep-2024 12:53:45 UTC] PHP Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/woocommerce/includes/emails/class-wc-email.php on line 447 [12-Sep-2024 12:54:05 UTC] PHP Notice: La función post ha sido llamada de forma incorrecta. No se debería acceder a las propiedades del producto directamente. Backtrace: require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), apply_filters('template_include'), WP_Hook->apply_filters, Breakdance\ActionsFilters\template_include, Breakdance\Render\getWordPressHtmlOutputWithHeaderAndFooterDependenciesAddedAndDisplayIt, Breakdance\Render\getWordPressHtmlOutput, include('/plugins/breakdance/plugin/themeless/theme-simulator/breakdance-template.php'), Breakdance\Themeless\outputHeadHtml, wp_head, do_action('wp_head'), WP_Hook->do_action, WP_Hook->apply_filters, revi_schema_product, WC_Abstract_Legacy_Product->__get, wc_doing_it_wrong Por favor, ve <a>depuración en WordPress</a> para más información. (Este mensaje fue a?adido en la versión 3.0). in /var/www/vhosts/domain.com/httpdocs/wp-includes/functions.php on line 6078 [12-Sep-2024 12:54:14 UTC] PHP Deprecated: ?El gancho rest_enabled está obsoleto desde la versión 4.7.0! Usa rest_authentication_errors en su lugar. La API REST ya no se puede desactivar completamente, no obstante se puede usar el filtro rest_authentication_errors para restringir el acceso a la API. in /var/www/vhosts/domain.com/httpdocs/wp-includes/functions.php on line 6078 [12-Sep-2024 12:54:51 UTC] PHP Notice: La función post ha sido llamada de forma incorrecta. No se debería acceder a las propiedades del producto directamente. Backtrace: require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), apply_filters('template_include'), WP_Hook->apply_filters, Breakdance\ActionsFilters\template_include, Breakdance\Render\getWordPressHtmlOutputWithHeaderAndFooterDependenciesAddedAndDisplayIt, Breakdance\Render\getWordPressHtmlOutput, include('/plugins/breakdance/plugin/themeless/theme-simulator/breakdance-template.php'), Breakdance\Themeless\outputHeadHtml, wp_head, do_action('wp_head'), WP_Hook->do_action, WP_Hook->apply_filters, revi_schema_product, WC_Abstract_Legacy_Product->__get, wc_doing_it_wrong Por favor, ve <a>depuración en WordPress</a> para más información. (Este mensaje fue a?adido en la versión 3.0). in /var/www/vhosts/domain.com/httpdocs/wp-includes/functions.php on line 6078 [12-Sep-2024 12:54:54 UTC] PHP Notice: La función post ha sido llamada de forma incorrecta. No se debería acceder a las propiedades del producto directamente. Backtrace: require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), apply_filters('template_include'), WP_Hook->apply_filters, Breakdance\ActionsFilters\template_include, Breakdance\Render\getWordPressHtmlOutputWithHeaderAndFooterDependenciesAddedAndDisplayIt, Breakdance\Render\getWordPressHtmlOutput, include('/plugins/breakdance/plugin/themeless/theme-simulator/breakdance-template.php'), Breakdance\Themeless\outputHeadHtml, wp_head, do_action('wp_head'), WP_Hook->do_action, WP_Hook->apply_filters, revi_schema_product, WC_Abstract_Legacy_Product->__get, wc_doing_it_wrong Por favor, ve <a>depuración en WordPress</a> para más información. (Este mensaje fue a?adido en la versión 3.0). in /var/www/vhosts/domain.com/httpdocs/wp-includes/functions.php on line 6078
He ido a comprobar en Pedidos y se ha marcado como “Procesando” y aparecen las Notas del pedido que en los otros no aparecían, ahora sí que no entiendo nada.
He desactivado antes ModSecurity por completo por si podía ser eso, no sé si habrá afectado.
Aun así el error que da en debug.log no es normal no?
Son unos notices y warnings, no son errores. En el caso de mi plugin salen tres, pero no afectan, solo dice que no están definidos, pero es porque no han llegado esos datos (que no llegan siempre). Haré una modificación para que no se queje.
Lo otros vienen del plugin breakdance, que parece que es un plugin propio de tu theme.
Si ha comenzado a funcionar, es posible que sea por el Modsecurity. puedes hacer una prueba a ver si activándolo parece de nuevo el problema y así ya lo sabes. Creo que se pueden a?adir excepciones a Modsecurity para que no mire URLs en particular, si es así, puedes a?adir la URL
He probado a volver a activar ModSecurity y hacer un pedido justo después y también se ha marcado como “Procesando”, no se si tarda un poco en hacer efecto pero creo que si que es el culpable.
Ayer a?adí la excepción para la URL y he esperado a que entraran varios pedidos para confirmar que funcionaba y todo bien. Han entrado unos 5 o 6 pedidos y todos han pasado a “Procesando” directamente, así que creo que está solucionado.
Muchas gracias por tu ayuda en todo el proceso, te lo agradezco eternamente.