Si estás utilizando alguna de las pasarelas de pago de WooCommerce como Redsys o Ceca es muy probable que te encuentres con el siguiente problema: aunque el pago se ha hecho correctamente el pedido queda registrado como pendiente de pago.

Trae de vuelta a los clientes a tu tienda online

Cuando los clientes son redirigidos a la página del banco para que introduzcan los datos de su tarjeta, es necesario que al finalizar el pago se les devuelva a tu tienda online.

Para eso debes entrar en la consola del banco y configurar la pasarela como aparece en la imagen:

completar pedidos en woocommerce

Es importante que en el campo Parámetros en las URLs selecciones “Si, sin mostrar recibo Redsys”. Esto llevará al cliente de vuelta a tu web cuando el pago esté OK.

Posibles problemas

Es posible que si tienes instalado un plugin de seguridad como iThemes Security o Wordfence Security se produzca un error al traer de vuelta a los clientes a tu web.

Esto es debido a que se genera una url muy larga y es posible que estos plugins lo consideren sospechoso. Debes desactivar aquellos parámetros que bloqueen las url largas o sospechosas:

evitar conflictos con las url en la pasarela de pago

Cambia el estado de los pedidos

Siguiendo los pasos anteriores debería ser suficiente para que tu pedido pase a procesando, si no es así sigue las siguientes instrucciones:

Con unas pocas líneas de código puedes manejar el estado de los pedidos a tu gusto. Para ello puedes introducir el siguiente snippet dentro del archivo functions.php de tu tema hijo.

add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) { 
    if ( ! $order_id ) {
        return;
    }
        
    $order = wc_get_order( $order_id );
    $metodo = $order->payment_method;
    if ($metodo != 'bacs'){
        
        wp_mail( 'correo@mitiendaonline.com', 'Nuevo pedido por tarjeta', 'Has recibido un nuevo pedido pagado con tarjeta' );
        $order->update_status( 'processing' );
        
    }
    
}

En la linea 1 se engancha nuestra función a woocommerce_thankyou, esto solo va a suceder cuando la transacción ha sido correcta.

Después de recoger la información del pedido la línea 9 se encarga de excluir aquellos pedidos que se han hecho mediante transferencia.

Puedes conocer el ID de las pasarelas de pago de tu tienda online en WooCommerce > Ajustes > Finalizar compra

autocompletar pedidos hechos con redsys o ceca

Opcionalmente puedes enviarte un correo para avisarte de un nuevo pedido, como aparece en la línea 11

La línea 12 es la que se encarga de pasar el pedido al estado al que tu quieras. Importante, si en tu tienda online llevas el control de stock es mejor sustituir esta linea por:

$order->payment_complete();

Con esta modificación WooCommerce se encarga de restar el stock y pasar el pedido a “procesando”.

Estados de pedidos en WooCommerce

Los estados de pedido que trae WooCommerce por defecto son los siguientes:

  • Pending payment – Pendiente de pago, es posiblemente el estado en el que aparezcan los pedidos al utilizar las pasarelas de Redsys y Ceca.
  • Failed – Fallido, es posible que en algún momento el cliente decidiese no pagar y dejar la operación incompleta.
  • Processing – Procesando, se ha hecho el pago pero todavía no se ha enviado la mercancía.
  • Completed – El envío ya ha sido hecho y no se requiere ninguna otra acción con este pedido.
  • On-Hold – En espera, se ha descontado el stock, pero es necesario comprobar el pago.
  • Cancelled – Cancelado, el pedido ha sido cancelado por el cliente o por el gestor de la tienda.
  • Refunded – Devuelto, se ha hecho una devolución de ese pedido.

Con esta información y unos conocimientos básicos de código puedes ser capaz de manejar el estado de los pedidos a tu antojo. Si tienes cualquier duda deja un comentario.


photo credit: Going Out Of Business via photopin (license)