php – Traslado de pedido de Woocommerce a una base de datos externa

Me gustaría saber como pasar información de un pedido realizado con Woocommerce a una base de datos externa que no tiene relaciona con WordPress

Estoy utilizando Code Snippets para agregar el fragmento de código que necesito para el traslado de información

La acción que intento realizar es que después de que Woocommerce realice todos los procesos del pedido, WordPress con la ayuda del hook haga un traslado de dicha información a una base de datos externa a la de WordPress, el hook al que hago referencia_com wootecommerce, payment que posterior a la realizacion del pedido debe ejecutar la funcion que cree llamada CLOSS.

No se si estoy haciendo el hook a la función correcta o si la forma en que traslado la información es la correcta

No me gustaría poner el código directamente sobre el archivo thanksyou.php del theme que estoy utilizando, ya que aunque funciona en el hecho de pasar la información de una base de datos a otra, esta información llega errada, ya que información a la base de datos y la función toma los datos del pedido anterior, ya que el pedido mas reciente en ocasiones no se encuentra completamente subido.

add_action( 'woocommerce_payment_complete', 'CLOSS' );

function CLOSS( $order_id ){
                    $mysqli_oc = new mysqli("localhost", "root", "", "prueba_occidental");
                    if ($mysqli_oc->connect_errno) {
                        echo "Fallo al conectar a MySQL: (" . $mysqli_oc->connect_errno . ") " . $mysqli_oc->connect_error;
                    }
                
                    //Conexión con la base de datos de WordPress
                    $mysqli_wp = new mysqli("localhost", "root", "", "tienda");
                    if ($mysqli_wp->connect_errno) {
                        echo "Fallo al conectar a MySQL: (" . $mysqli_wp->connect_errno . ") " . $mysqli_wp->connect_error;
                    }

                    //Ejecución de datos necesarios para la transacción
                    $mysqli_oc->set_charset("utf8");
                    //Cancelando el envió automático de datos
                    $mysqli_oc->autocommit(FALSE);

                    //Try para la captura de excepciones que puedan presentarse 
                    try {

                        //SQL para la búsqueda de ultimo pedido ingresado en la base de datos de WordPress
                        $sql_select_OrderId = "SELECT * FROM wp_wc_order_stats ORDER BY order_id DESC;";
                        $sql_select_OrderId_ejecutar = mysqli_query($mysqli_wp, $sql_select_OrderId) or die('Algo salio mal: ' . mysqli_error_list($mysqli_wp));    
                        $sql_select_OrderId_array = $sql_select_OrderId_ejecutar->fetch_assoc();
                        //Guardado del id del ultimo pedido realizado
                        $OrderId = $sql_select_OrderId_array['order_id'];
                    
                        //SQL que busca la cantidad de productos realizados por pedido para alimentar al próximo ciclo for
                        $sql_select_order_product = "SELECT * FROM wp_wc_order_product_lookup WHERE order_id = '$OrderId';";
                        $sql_select_order_product_ejecutar = mysqli_query($mysqli_wp, $sql_select_order_product) or die('Algo salio mal: ' . mysqli_error_list($mysqli_wp));
                        $sql_select_order_product_num = mysqli_num_rows($sql_select_order_product_ejecutar);
                        //Array con los datos de la sentencia SQL para su posterior uso en la cabecera del documento
                        $sql_select_order_product_array = $sql_select_order_product_ejecutar->fetch_assoc();
                    
                        //SQL para la búsqueda del correlativo del pedido en WordPress
                        $select_correlativo = "SELECT * FROM correlativo";
                        $select_correlativo_ejecutar = mysqli_query($mysqli_wp, $select_correlativo) or die('Algo salio mal: ' . mysqli_error_list($mysqli_wp));    
                        $select_correlativo_array = $select_correlativo_ejecutar->fetch_assoc();
                    
                        //Variable que guarda el correlativo, y le suma 1 para su posterior guardado en la base de datos
                        $correlativo_up = $select_correlativo_array['correlativo'] + 1;
                    
                        //Guardado del nuevo correlativo
                        $sql_update_correlativo = "UPDATE correlativo SET correlativo = '$correlativo_up';";
                        $sql_update_correlativo_ejecutar = mysqli_query($mysqli_wp, $sql_update_correlativo) or die('Algo salio mal: ' . mysqli_error_list($mysqli_wp));
                    
                        //Inicialización de la variable
                        $order_item_id = 0;
                        
                            //Ciclo For que ingresa la cantidad de productos por pedidos a la base de datos de closs
                            for ($i=0; $i < $sql_select_order_product_num; $i++) {
                    
                                //IF para validar que la búsqueda del producto sera el primero de la lista del pedido, que posteriormente aumentara el numero de la variable $order_item_id
                                if ($order_item_id == 0) {
                                    //SQL para la búsqueda del primer producto del pedido
                                    $sql_select_order_product = "SELECT * FROM wp_wc_order_product_lookup WHERE order_id = '$OrderId';";
                                    $sql_select_order_product_ejecutar = mysqli_query($mysqli_wp, $sql_select_order_product) or die('Algo salio mal: ' . mysqli_error_list($mysqli_wp));    
                                    $sql_select_order_product_array = $sql_select_order_product_ejecutar->fetch_assoc();
                                } else {
                                    //SQL para la búsqueda de los productos del pedido
                                    $sql_select_order_product = "SELECT * FROM wp_wc_order_product_lookup WHERE order_id = '$OrderId' AND order_item_id = '$order_item_id';";
                                    $sql_select_order_product_ejecutar = mysqli_query($mysqli_wp, $sql_select_order_product) or die('Algo salio mal: ' . mysqli_error_list($mysqli_wp));    
                                    $sql_select_order_product_array = $sql_select_order_product_ejecutar->fetch_assoc();
                                }
                                
                    
                                //Guardado del id del producto, que es igual al id del post
                                $post_id = $sql_select_order_product_array['product_id'];
                    
                                //SQL para la búsqueda del precio del producto
                                $sql_select_price = "SELECT * FROM wp_postmeta WHERE post_id = '$post_id' AND meta_key = '_price';";
                                $sql_select_price_ejecutar = mysqli_query($mysqli_wp, $sql_select_price) or die('Algo salio mal: ' . mysqli_error_list($mysqli_wp));    
                                $sql_select_price_array = $sql_select_price_ejecutar->fetch_assoc();
                    
                                //SQL para la búsqueda del nombre del producto
                                $sql_select_name = "SELECT * FROM wp_posts WHERE ID = '$post_id';";
                                $sql_select_name_ejecutar = mysqli_query($mysqli_wp, $sql_select_name) or die('Algo salio mal: ' . mysqli_error_list($mysqli_wp));    
                                $sql_select_name_array = $sql_select_name_ejecutar->fetch_assoc();
                    
                                //tipo de documento
                                $kti_tdoc = "PED";
                                //numero del documento
                                $kti_ndoc = "WP-PED-" . $select_correlativo_array['correlativo'];
                                //tipo de precio
                                $kti_tipprec = "1";
                                //Codigo del articulo
                                $kmv_codart = $sql_select_name_array['id_closs'];
                                //Nombre del articulo
                                $kmv_nombre = $sql_select_name_array['post_title'];
                                //Cantidad de producto 
                                $kmv_cant = $sql_select_order_product_array['product_qty'];
                                //Precio individual del producto
                                $kmv_artprec = $sql_select_price_array['meta_value']; 
                                //Precio (Cantidad de producto * Precio individual del producto)
                                $kmv_stot = $kmv_cant * $kmv_artprec;
                                //Descuento
                                $kmv_dctolin = "0";
                    
                                //SQL para la insercion de los datos del productos en la tabla que representa el cuerpo del documento
                                echo "<br>" . $sql = "INSERT INTO ke_opmv (kti_tdoc, kti_ndoc, kti_tipprec, kmv_codart, kmv_nombre, kmv_cant, kmv_artprec, kmv_stot, kmv_dctolin) VALUES ('$kti_tdoc', '$kti_ndoc', '$kti_tipprec', '$kmv_codart', '$kmv_nombre', '$kmv_cant', '$kmv_artprec', '$kmv_stot', '$kmv_dctolin');";
                                $sql_ejecutar = mysqli_query($mysqli_oc, $sql) or die('Error : ' . mysqli_error($mysqli_oc));
                                
                                //Variable que guarda el id del item del pedido y lo aumenta en 1, para seleccionar el producto siguiente
                                $order_item_id = $sql_select_order_product_array['order_item_id'] + 1;
                    
                            }
                        //wp_wc_order_product_lookup
                        //Guardado del id del cliente
                        $id_costumer = $sql_select_order_product_array['customer_id'];
                
                        //SQL que busca al usuario en relación a su id de cliente y su id de usuario
                        $sql_select_cliente_wp = "SELECT * FROM wp_users INNER JOIN wp_wc_customer_lookup ON wp_users.ID = wp_wc_customer_lookup.user_id WHERE wp_wc_customer_lookup.customer_id = '$id_costumer';";
                        $sql_select_cliente_wp_ejecutar = mysqli_query($mysqli_wp, $sql_select_cliente_wp) or die('Error : ' . mysqli_error($mysqli_wp));
                        $sql_select_cliente_wp_array = $sql_select_cliente_wp_ejecutar->fetch_assoc();
                
                        //Guardado del código del cliente
                        $codigo_cliente = $sql_select_cliente_wp_array['user_login'];
                
                        //SQL para la búsqueda de los datos del cliente en la tabla de CLOSS
                        $sql_select_cliente_oc = "SELECT * FROM cliempre WHERE codigo REGEXP '$codigo_cliente';";
                        $sql_select_cliente_oc_ejecutar = mysqli_query($mysqli_oc, $sql_select_cliente_oc) or die('Error : ' . mysqli_error($mysqli_wp));
                        $sql_select_cliente_oc_array = $sql_select_cliente_oc_ejecutar->fetch_assoc();
                
                        //SQL para la búsqueda de datos del pedido
                        $sql_select_order_stats = "SELECT * FROM wp_wc_order_stats WHERE order_id = '$OrderId';";
                        $sql_select_order_stats_ejecutar = mysqli_query($mysqli_wp, $sql_select_order_stats) or die('Error : ' . mysqli_error($mysqli_wp));
                        $sql_select_order_stats_array = $sql_select_order_stats_ejecutar->fetch_assoc();
                
                
                        //Numero del documento
                        $kti_ndoc = "WP-PED-" . $select_correlativo_array['correlativo'];
                        //tipo de documento
                        $kti_tdoc="PED";
                        //código de cliente
                        $kti_codcli = $sql_select_cliente_wp_array['user_login'];
                        //nombre de cliente
                        $kti_nombrecli = $sql_select_cliente_wp_array['display_name'];
                        //código del vendedor
                        $kti_codven = $sql_select_cliente_oc_array['vendedor'];
                        //documento solicitado
                        $kti_docsol = "2";
                        //condición de crédito
                        $kti_condicion = "2";
                        //tipo de precio aplicado
                        $kti_tipprec = "1";
                        //Suma de los montos de las lineas
                        $kti_totneto = $sql_select_order_stats_array['net_total'];
                        //estatus del documento
                        $kti_status = "1";
                
                        //SQL para la insercion de los datos de la cabecera
                        echo "<br>" . $sql_cabecera = "INSERT INTO ke_opti (kti_ndoc, kti_tdoc, kti_codcli, kti_nombrecli, kti_codven, kti_docsol, kti_condicion, kti_tipprec, kti_totneto, kti_status) VALUES ('$kti_ndoc', '$kti_tdoc', '$kti_codcli', '$kti_nombrecli', '$kti_codven', '$kti_docsol', '$kti_condicion', '$kti_tipprec', '$kti_totneto', '$kti_status');";
                        $sql_cabecera_ejecutar = mysqli_query($mysqli_oc, $sql_cabecera) or die('Error : ' . mysqli_error($mysqli_oc));

                        //Cambio del valor de la variable del if principal
                        $_SESSION['venta'] = 1;
                        //Enviado de datos a la base de datos
                        $mysqli_oc->commit();

                    } catch (Exception $e) {
                        //Función rollback para regresar los datos antes del error
                        echo "Ocurrió un Error relacionado con el producto: ". $slq_select_closs_array['codigo'] . "<br>";
                        $mysqli_oc->rollback();
                    } 

}

Leave a Comment