FAQ del plugin oficial de WooCommerce.com para Redsys.
Si utilizas la versión gratuita, solo te sirven los 3 primeros puntos, todos los demás son del plugin Premium de Redsys de WooCommerce.

¿Qué tarjeta de pruebas puedo utilizar en Redsys para probar la pasarela?

Encontrarás esta información en el email de bienvenida que tienes que haber recibido, pero puedes utilizar sin problemas estos datos:

Número de tarjeta: 4548812049400004 
Caducidad: 12/20 
Código CVV2: 123 
Código CIP: 123456

Para forzar el error de tarjeta en las pruebas, puedes utilizar esta:

Número de tarjeta: 1111111111111117 
Caducidad: 12/20

Recuerda que Redsys te pide siempre que tengas cómo mínimo un pedido correcto sin errores, y luego que fuerces un error para también ser comunicado al comercio.

Me da error en la pruebas en Redsys

Pueden haber muchas razones para que esto suceda.
1.- Tu terminal puede estar configurado como live o test en Redsys. Es muy importante que el plugin tenga exactamente la misma configuración de cómo tengas el terminal. Al contrario que otras pasarelas, Redsys solo puede tener un estado, y no lo puedes configurar tu directamente, lo configuran en Redsys.
2.- El número de terminal lo debes introducir sin ceros, es decir, si tu numero de terminal es «001», en la configuración del plugin pon solo «1».
3.- Puede que estes intentando realizar alguna acción que no tengas activa en Redsys, por ejemplo, has activado pago con 1 clic, o Preautorizaciones, domiciliaciones y cualquiera de estas no las tienes activas en Redsys, debes pedir que te lo activen antes de activarlo en el plugin u obtendrás errores en las pruebas en Redsys.
4.- Asegúrate que el SH256 sea el correcto, que al copiar y pegar no te hayas dejado ningún carácter.

Los pedidos no se marcan como pagados en WooCommerce

Por regla general, esto es debido a que se utiliza un certificado de seguridad que no es compatible con Redsys, por ejemplo, Let’s Encrypt, Comodo y otros.
La forma de solucionarlo es marcar en la configuración del plugin la compatibilidad con certificados SNI.
Si ti hosting fuerza el redireccionamiento de todas las peticiones a HTTPS, deberás también desactivar esta redirección forzada.
Si utilizas un plugin cómo Simple SSL, deberás activa que el redireccionamiento forzado lo realice por el archivo .htaccess, desactivar el redireccionamiento via WordPress y finalmente, desactivar que pueda seguir realizando modificaciones al archivo htaccess. Una vez lo tengamos todo configurado, deberemos añadir la siguiente línea en el código añadido por Simple SSL o el plugin que utilicemos:

RewriteCond %{QUERY_STRING} !^wc-api=WC_Gateway_redsys

De forma que nos debe quedar algo así:

# REDIRECCION CERTIFICADO SSL
RewriteEngine on
RewriteCond %{QUERY_STRING} !^wc-api=WC_Gateway_redsys
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# END SSL

Otra posibilidad es que el firewall, ya sea del servidor o de un plugin que utilicemos, por ejemplo el antibot de All In One SEO Pack, esté bloqueando la IP de Redsys. Debemos comprobar que ninguna de las IPs bloqueadas por el firewall pertenezcan a Redsys.

Por último, no hemos configurado de forma correcta Redsys y no tenemos activa la notificación HTTP y solo tenemos activa la notificación por email. Accede a Redsys y comprueba que esté bien configuradas las notificaciones al sitio.

He activado Pago con un Clic (Tokenización)  en WooCommerce y no funciona

Por las características de WooCommerce, es necesario que Redsys mande varios datos. Si no lo hace, el pago con un clic no funcionará, y no se marcarán los pedidos cómo pagados.
Para que funcione de forma correcta el pago con un clic, debes pedir en primer lugar que te lo activen. En segundo lugar, debes pedir que te envíen los siguientes datos en el callback:
– Ds_Card_Brand
– Ds_ExpiryDate
– Ds_Card_Number

Si cualquiera de los anteriores campos no son enviados, sucederá que los pedidos no serán marcados como pagados, no funcionará el pago con 1 clic y el plugin mandará al administrador de la instalación un email avisando de esta problemática.

Las preautorizacines no me funcionan en  en WooCommerce

Las preautorizaciones deben ser activadas por Redsys.
Si no te funcionan las preautorizaciones, debes pedir a Redsys que te las active.

¿Hay que cobrar exactamente la cantidad que se preautoriza?

No, no es necesario cobrar exactamente lo que se preautoriza.
Puedes cobrar menos, o más. Puedes cobrar todo lo menos que quieras, y puedes cobrar hasta un % superior al coste preautorizado. El % depende del banco que utilices, así que deberás consultar al tu banco.
La preautorización, por regla general, es guardada durante 30 días. Pregunta también a tu banco para asegurarte.
Para variar la cantidad a cobrar, modifica el pedido antes de apretar el botón de realizar la aceptación de la preautorización.

Uso muchos terminales, seguros y no seguros, con diferentes monedas, etc. ¿Cómo puedo configurarlo en WooCommerce?

Desde la versión 4.5 del plugin de Redsys de WooCommerce.com, puedes utilizar virtualmente infinitas combinaciones de terminales, tipos, monedas, etc. Solo debes hacer uso del filtro «redsys_modify_data_to_send».
Mediante este filtro, puedes modificar a tu conveniencia todos los datos enviados a Redsys. Estos datos serán guardados junto a cada pedido, y de esta forma no habrá problemas posteriores.

¿Cómo utilizo el filtro redsys_modify_data_to_send?

Antes de crear el formulario de envío a Redsys, se ejecuta este filtro en el caso en que losemos utilizando.
Lo único que deberemos hacer, es utilizar los datos que deseemos para realizar las modificaciones.
Ejemplo:

<?php

add_filter( 'redsys_modify_data_to_send', 'datos_modificados_pasarela_pago_en_redsys' );

function fanatic_pasarela_pago_en_redsys( $redsys_data_send ) {
global $woocommerce;

$order_total_sign    = $redsys_data_send['order_total_sign'];
$terminal            = $redsys_data_send['DSMerchantTerminal'];
$currency            = $redsys_data_send['currency'];
$transaction_id2     = $redsys_data_send['transaction_id2'];
$transaction_type    = $redsys_data_send['transaction_type'];
$final_notify_url    = $redsys_data_send['final_notify_url'];
$returnfromredsys    = $redsys_data_send['returnfromredsys'];
$gatewaylanguage     = $redsys_data_send['gatewaylanguage'];
$currency            = $redsys_data_send['currency'];
$secretsha256        = $redsys_data_send['secretsha256'];
$customer            = $redsys_data_send['customer'];
$url_ok              = $redsys_data_send['url_ok'];
$product_description = $redsys_data_send['product_description'];
$merchant_name       = $redsys_data_send['merchant_name'];

if ( $lo_que_sea ) { 
// Aquí la magia y donde modificaremos los datos
}

$redsys_options = array(
'order_total_sign',
'transaction_id2',
'transaction_type',
'DSMerchantTerminal',
'final_notify_url',
'returnfromredsys',
'gatewaylanguage',
'currency',
'secretsha256',
'customer',
'url_ok',
'product_description',
'merchant_name',
);
$redsys_valors = array(
 $order_total_sign,
 $transaction_id2,
 $transaction_type,
 $terminal,
 $final_notify_url,
 $returnfromredsys,
 $gatewaylanguage,
 $currency,
 $secretsha256,
 $customer,
 $url_ok,
 $product_description,
 $merchant_name,
);
$redsys_data_send = array_combine( $redsys_options, $redsys_valors );

return $redsys_data_send;
}