Buenas, llevo unos días en los que al pagar correctamente los clientes, los pedidos se quedan en pendiente de pago y posteriormente se cancelan, por lo que tengo que completarlos manualmente.
He abierto un ticket de soporte y no han dado con la solución. Parece que no es nada referente al servidor: "A nivel servidor no se aplica ningún tipo de medida de seguridad para este tipo de comunicaciones, las cuales compruebo que se realizan correctamente" "Veo que en la plataforma de la TPV también aparece bien la ejecución de la petición y sin ningún tipo de error, está funcionando como debería."
Da igual el método de pago que utilice los clientes (redsys, stripe, bizum), el pago se realiza pero queda pendiente de pago/cancelado.
No he realizado ningún cambio de configuraciones últimamente.
Tengo el plugin Redsys de José Conti y el plugin oficial de stripe que siempre me ha funcionado.
Un saludo y muchísimas gracias.
Contenido solo visible a usuarios registrados
Hola Victor,
En este caso envíanos una captura de la nota que se marca en un pedido cuando se procesa, de esta forma podemos verificarlo con mayor detalle.
De manera general ten en WooCommerce las ordenes no se completan de forma automática, sino que es el administrador es quien debe marcarlos como completados. Sin embargo, existen diferentes formas para marcar el pedido de en espera ha completado automáticamente, una opción es usar algún plugin como -> https://wordpress.org/plugins/autocomplete-woocommerce-orders/
Solo debes configurar las opciones sobre que tipo de pedidos deseas se completen,
Por otro lado también puedes añadir un código en el function.php de tu tema (Preferiblemente un tema hijo) que te permita autocompletar de forma automática los pedidos, puedes verificar más detalles sobre estas configuraciones en el siguiente enlace -> https://www.webempresa.com/blog/cambiar-estado-del-pedido-en-woocommerce-automaticamente.html
Verifica esto y nos comentas como ha ido todo
Un Saludo
@karen Buenas, gracias por responder.
Tengo instalado el plugin de Autocomplete WooCommerce Orders -> Configurado para autocompletar productos digitales.
Nunca había tenido problemas de este tipo hasta hace 2 semanas, que se ha dejado de completar. Aun así, debería de quedarse en procesando, pero no, se queda pendiente de pago/cancelado.
Te adjunto captura de las notas del pedido.
Un saludo.
Hola Victor,
En este caso es posible que el plugin esté generando un error, prueba añadir el código en function.php de tu tema y comprobar si al hacer esto se completa de forma correcta una orden.
Por otro lado también puedes añadir un código en el function.php de tu tema (Preferiblemente un tema hijo) que te permita autocompletar de forma automática los pedidos, puedes verificar más detalles sobre estas configuraciones en el siguiente enlace -> https://www.webempresa.com/blog/cambiar-estado-del-pedido-en-woocommerce-automaticamente.html
Verifica esto y nos comentas como ha ido todo
Un Saludo
Buenas de nuevo y gracias por la respuesta @karen
Estamos probando quitando el plugin y activando el código del tutorial y parece que va bien, excepto que completa todos los pedidos (incluido los productos físicos que necesito que se queden procesando).
¿existe alguna modificación del código para autocompletar los productos virtuales y dejar en procesando los productos físicos?
Un saludo.
Hola Victor.
Puedes modificar el estado el en que quieres que se queden, por ejemplo, si quieres que se queden procesando:
// Actualiza automáticamente el estado de los pedidos a procesando
add_action( 'woocommerce_order_status_processing', 'actualiza_estado_pedidos_a_completado' );
add_action( 'woocommerce_order_status_on-hold', 'actualiza_estado_pedidos_a_completado' );
function actualiza_estado_pedidos_a_completado( $order_id ) {
global $woocommerce;
//ID's de las pasarelas de pago a las que afecta
$paymentMethods = array( 'redsys', 'bacs', 'cheque', 'cod', 'paypal' );
if ( !$order_id ) return;
$order = new WC_Order( $order_id );
if ( !in_array( $order->payment_method, $paymentMethods ) ) return;
$order->update_status( 'processing' );
}
Solo modificamos la linea " $order->update_status( 'processing' ); " indicando el estado en el que se quedar el pedido, en este caso Procesando.
Puedes poner el estado que quieras:
Para los productos virtuales puedes utilizar lo siguiente:
add_action('woocommerce_thankyou', 'we_autocomplete_virtual_orders', 10, 1 );
function we_autocomplete_virtual_orders( $order_id ) {
if( ! $order_id ) return;
// Get order
$order = wc_get_order( $order_id );
// get order items = each product in the order
$items = $order->get_items();
// Set variable
$only_virtual = true;
foreach ( $items as $item ) {
// Get product id
$product = wc_get_product( $item['product_id'] );
// Is virtual
$is_virtual = $product->is_virtual();
// Is_downloadable
$is_downloadable = $product->is_downloadable();
if ( ! $is_virtual && ! $is_downloadable ) {
$only_virtual = false;
}
}
// true
if ( $only_virtual ) {
$order->update_status( 'completed' );
}
}
Lo mismo que el anterior, si quieres que el producto se quede en otro estado solo tienes que modificar la linea " $order->update_status( 'completed' ); "
Un saludo
@pepesoler muy buenas y gracias por la respuesta.
He creado un fragmento de código con cada código que has enviado de esta manera, pero aún no funciona bien del todo, se me ha quedado "pendiente de pago" en vez de procesando un producto físico.
Quiero que los productos físicos se queden "Procesando" y los productos virtuales en "Completado".
Adjunto captura del orden de los fragmentos (he copiado tal cual el código).
No sé si hay que hacerlo de esta manera o en un solo fragmento, o cambiando el orden...
Un saludo.
Hola Victor.
Con el código que te indique los productos físicos se quedan en procesando:
$order->update_status( 'processing' );
un producto físico
Solo es un producto o son todos lso productos físicos ?
No me queda claro si solo es un producto o son todos
Un saludo
Muy buenas y gracias @pepesoler
En la web tengo productos físicos y también productos digitales.
Quiero que cuando haya un producto físico en el pedido, se quede "procesando".
Si hay un producto físico y también un producto virtual, se quede "procesando".
Si solamente hay productos virtuales en el pedido, que se quede "completado".
Muchas gracias por la ayuda.
Hola Victor,
En WooCommerce los productos de tipo virtual se autocompletan de forma automáticamente, pero si usas el código de autocompletados todos pasaran a completados, en este caso si solo deseas que sean los productos virtuales se completen no necesitas añadir ningún código, prueba desactivar los códigos que usas y revisar que tus productos virtuales este de este tipo, luego comprueba si al procesar una orden de estos se complementen automáticamente.
Ten en cuenta que si lo que buscas es que ciertos tipos de productos se completen y otros no es posible necesites un código a la medida, en este caso puedes consultar con nuestro directorio de claboradores quienes puede ayudarte a configurar todo lo que necesitas.
Un Saludo