Los pedidos duplicados son una pesadilla, son un problemón y dan una serie de tareas que nadie que tenga una tienda en línea quiere pasar, ni por ti como gestor de la tienda ni por los clientes.
¿Por qué hay pedidos duplicados?
Hay muchos posibles culpables de pedidos duplicados, y siempre deberías revisar esta lista para evitar llegar a este tipo de situaciones:
- Conflicto entre plugins o el tema – Incompatibilidades entre el código de plugins o el tema pueden generar retrasos o mezcla de procesos que, como resultado, se provoque la creación de pedidos duplicados.
- Comunicaciones erróneas de la pasarela de pagos – Conflictos o problemas de conexión con las pasarelas de pago pueden provocar por igual que no se pague correctamente un pedido o que se duplique o incluso multiplique un pedido.
- Problemas con el servidor – Conexiones lentas, protocolos o software no convenientemente actualizados, pueden provocar que haya retrasos o mala interacción de scripts que termine provocando la duplicidad de pedidos.
- Acciones del cliente – El mismo cliente, por dudas en el proceso de pago, inseguridad o nervios, puede él mismo provocar la duplicación de pedidos, aunque casi siempre es un problema que puedes solucionar, ya sea simplificando el proceso de pago, optimizando la web o simplemente añadiendo un chat. En realidad, en este caso, el culpable eres tú, no tus clientes.
Si no evitas en lo posible los pedidos duplicados, la lista de problemas que generan pueden ser enormes…
Los problemas con los pedidos duplicados
Cuando se duplica un pedido siempre hay a continuación una serie de acciones por las que nadie quiere pasar:
- Aclarar con el cliente si el pedido es duplicado o no.
- Confirmar que no se haya realizado un pago duplicado.
- Revisar los correos electrónicos de confirmación de pedido y otros para distinguir los buenos de los duplicados.
- Borrar el pedido duplicado.
- Anular cualquier orden de envío duplicada trasladada automáticamente a la empresa de transporte.
- Reembolsos si se realizó algún pago duplicado.
- Bregar con el malestar creado y las inquietudes del cliente por haber realizado un pedido duplicado y todo lo que conlleva.
Como ves, nada deseable, pero ¿cómo lo evitamos?
Un modo sencillo de evitar pedidos duplicados
Una manera que puede ayudarte a eliminar casi al completo el problema de los pedidos duplicados es impedir cualquier pedido supuestamente repetido, realizado por un mismo cliente, por ejemplo con una separación entre pedidos de menos de 2 minutos, o algo que te parezca razonable.
Lo conseguirías con un código como este:
/* Anular pedidos repetidos en 2 minutos */
add_action( 'woocommerce_checkout_process', 'ayudawp_anular_pedido_duplicado' );
function ayudawp_anular_pedido_duplicado() {
$args = [
'limit' => 1,
'customer' => $_POST['billing_email'],
'date_created' => '>' . ( time() - 2 * MINUTE_IN_SECONDS ),
'status' => wc_get_is_paid_statuses(),
'total' => WC()->cart->get_total( 'edit' ),
'return' => 'ids',
];
$orders = wc_get_orders( $args );
if ( $orders ) {
wc_add_notice( __( 'Parece que y has enviado recientemente este pedido. Por favor, espera un minuto y prueba de nuevo.' ), 'error' );
}
}
Este código se integra con el proceso de pago de WooCommerce mediante woocommerce_checkout_process. El objetivo es evitar que los clientes realicen pedidos duplicados accidentalmente en un corto periodo de tiempo .
Dentro de la función, primero definimos un conjunto de argumentos para consultar los pedidos recientes. Buscamos un máximo de un pedido ( 'limit' => 1) realizado por el mismo cliente, utilizando el correo electrónico de facturación del proceso de pago actual ( $_POST['billing_email']).
También comprobamos si el pedido se creó en los últimos 2 minutos. Esto se hace mediante 'date_created' => '>' . ( time() - 2 * MINUTE_IN_SECONDS ), que filtra los pedidos más antiguos de esos 2 minutos.
A continuación, solo consideramos los pedidos pagados, utilizando wc_get_is_paid_statuses(). Esto garantiza que no comparemos con pedidos fallidos o pendientes.
Luego, comparamos el importe total del carrito actual con el total del pedido ( 'total' => WC()->cart->get_total( 'edit' )) para confirmar que sea un pedido idéntico.
Por último, el parámetro 'return' => 'ids' hace que la consulta sea más eficiente al recuperar únicamente los ID de pedido.
Si se encuentra un pedido coincidente, entonces bloqueamos el pago y con wc_add_notice() mostramos un mensaje de error, avisando al cliente que espere antes de volver a intentarlo.
¿Cómo se añade este código?
Hay varias maneras para añadir este código a tu web, revisa esta sencilla guía para elegir la que prefieras:
Cómo y dónde pegar en WordPress códigos PHP, JS, CSS y funciones que encuentres por ahí
¿Hay otras maneras de impedir pedidos duplicados?
Si atendemos a las posibles causas vistas al principio de esta guía, verás que igual hay maneras de evitar los pedidos duplicados antes de que ocurran, para no tener que recurrir a soluciones como e código anterior.
Siguiendo la lógica de dar solución a los problemas que provocan pedidos duplicados deberías tomar algunas medidas para evitarlos:
- Actualiza siempre todos los plugins, el tema y WordPress, para evitar conflictos e imcompatibilidades.
- Revisa periódicamente las conexiones con las pasarelas de pago disponibles, probándolas tú antes de que te enteres de que no funcionan o lo hacen mal por fallos con tus clientes.
- Revisa la configuración del servidor, que cumpla con todos los requisitos y actualizaciones necesarios para que funcione correctamente tu tienda online.
- Comprueba que no haya cachés persistentes en las páginas de carrito y pago, pues podrían mostrar información incorrecta que conlleve a duplicar pedidos.
- Simplifica el proceso de pago, para evitar malentendidos, exceso de pasos o cualquier confusión. Si hace falta incluso aumenta el tamaño del texto, añade textos explicativos de cada paso, añade un chat, todo lo que haga falta para que tus clientes no lancen pedidos duplicados.
- Audita el funcionamiento de tu proceso de pago, para detectar y solucionar cualquier posible error antes de que lo sufran tus clientes.
Nada más, espero haberte ayudado en algo a impedir pedidos duplicados, pues siempre dan mucha tarea y generan desconfianza en tus clientes.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!






