function mi_plugin_enviar_datos_pedido_y_notificar($order_id, $old_status, $new_status, $order) {
// Verifica si WooCommerce está instalado y activado
if (!class_exists('WooCommerce')) {
error_log('WooCommerce no está instalado o activado.');
return;
}
// Solo procesar si el nuevo estado es "processing"
if ($new_status !== 'processing') {
error_log("Pedido $order_id en estado '$new_status' - No se envía a la API (solo se envía en estado 'processing').");
return;
}
// Comprobar si el pedido ya ha sido procesado previamente
$already_processed = get_post_meta($order_id, '_mi_plugin_processed', true);
if ($already_processed) {
error_log("Pedido $order_id ya fue procesado anteriormente - No se envía de nuevo.");
return;
}
// Marcar el pedido como procesado para evitar que se ejecute múltiples veces
update_post_meta($order_id, '_mi_plugin_processed', true);
$data = mi_plugin_preparar_datos_pedido($order_id);
if (!$data) {
error_log("No se pudieron preparar los datos para el pedido $order_id");
return;
}
$json_data = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
error_log("Datos a enviar a la API: $json_data");
// Agregar el JSON generado como una nota al pedido
$order->add_order_note("JSON Generado para la API:\n" . $json_data);
try {
$curl = curl_init();
if (!$curl) {
throw new Exception('No se pudo inicializar cURL.');
}
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://119.8.3.165:60080/ApiCoreOne/TV/v1/PedidosVentas',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $json_data,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-API-Key: 27d34740-c3d4-1120-2023-b5ba3a62922c'
),
));
$response = curl_exec($curl);
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
throw new Exception("Error al enviar pedido a la API: " . $err);
}
if ($http_code >= 200 && $http_code < 300) {
// Comprobar si el objeto en la respuesta no es null
$response_data = json_decode($response, true);
if (isset($response_data['Objeto']) && $response_data['Objeto'] !== null) {
// Si el objeto no es null, continuar con el flujo de éxito
$success_message = "Pedido enviado correctamente a la API. Respuesta: " . $response;
error_log($success_message);
$order->add_order_note($success_message);
// Almacena los datos en la tabla
global $wpdb;
$table_name = $wpdb->prefix . 'wc_pedidos_api';
$wpdb->insert(
$table_name,
array(
'order_id' => $order_id,
'json_data' => $json_data,
'api_response' => $response
)
);
} else {
// Si el objeto es null, manejar como error
$error_message = "Error en la respuesta de la API: El objeto es null. Respuesta: " . $response;
error_log($error_message);
$order->add_order_note($error_message);
// Lanzar una excepción
throw new Exception("Error en la respuesta de la API: El objeto es null. Respuesta: " . $response);
}
} else {
// Código de respuesta de error (4xx, 5xx)
$error_message = "Error en la respuesta de la API. Código HTTP: " . $http_code . ", Respuesta: " . $response;
error_log($error_message);
$order->add_order_note($error_message);
// Lanzar una excepción
throw new Exception("Error en la respuesta de la API. Código HTTP: " . $http_code . ", Respuesta: " . $response);
}
} catch (Exception $e) {
// Manejo de errores
$error_message = $e->getMessage();
error_log($error_message);
// Almacena los datos en la tabla, incluso en caso de error
global $wpdb;
$table_name = $wpdb->prefix . 'wc_pedidos_api';
$wpdb->insert(
$table_name,
array(
'order_id' => $order_id,
'json_data' => $json_data,
'api_response' => $error_message
)
);
// Agregar nota con el error
$order->add_order_note("Error al enviar a la API:\n" . $error_message);
// Desmarcar el pedido como procesado para permitir reintentos
delete_post_meta($order_id, '_mi_plugin_processed');
}
}
Art laminate 7505 - Wenge - matt - 4x8 - Lumber Express
The Art laminate 7505 in matt finish and Wenge color offers an elegant and modern appearance for your interior design projects. With its wear resistance and easy maintenance, it is ideal for residential and commercial use.
Reviews
There are no reviews yet.