/** * DIAGNOSTIC ET CORRECTION SENDIT API * Ajoutez ce code temporairement dans functions.php pour diagnostiquer */ // 1. AMÉLIORER LE LOGGING POUR DIAGNOSTIQUER function sendit_log($message, $data = null) { $log_entry = '[' . date('Y-m-d H:i:s') . '] SENDIT: ' . $message; if ($data) { $log_entry .= ' | Data: ' . print_r($data, true); } error_log($log_entry); } // 2. FONCTION D'AUTHENTIFICATION AMÉLIORÉE function sendit_get_token_improved() { sendit_log('Tentative d\'authentification Sendit'); $response = wp_remote_post('https://app.sendit.ma/api/v1/login', array( 'headers' => array('Content-Type' => 'application/json'), 'body' => json_encode(array( 'public_key' => SENDIT_PUBLIC_KEY, 'secret_key' => SENDIT_PRIVATE_KEY )), 'timeout' => 30 // Augmenter le timeout )); if (is_wp_error($response)) { sendit_log('Erreur WP lors de l\'authentification', $response->get_error_message()); return false; } $response_code = wp_remote_retrieve_response_code($response); $response_body = wp_remote_retrieve_body($response); sendit_log('Réponse authentification', array( 'code' => $response_code, 'body' => $response_body )); if ($response_code !== 200) { sendit_log('Code de réponse invalide pour authentification: ' . $response_code); return false; } $data = json_decode($response_body, true); if (!isset($data['data']['token'])) { sendit_log('Token non trouvé dans la réponse', $data); return false; } sendit_log('Authentification réussie'); return $data['data']['token']; } // 3. FONCTION DE CRÉATION DE LIVRAISON CORRIGÉE function sendit_create_delivery_improved($order_id) { sendit_log('Début création livraison pour commande: ' . $order_id); // Éviter les doublons if (get_post_meta($order_id, '_sendit_delivery_created', true)) { sendit_log('Livraison déjà créée pour commande: ' . $order_id); return; } $order = wc_get_order($order_id); if (!$order) { sendit_log('Commande non trouvée: ' . $order_id); return; } // Vérifier que c'est bien une commande Sendit $shipping_methods = $order->get_shipping_methods(); $is_sendit = false; foreach ($shipping_methods as $method) { if ($method->get_method_id() === 'sendit_simple') { $is_sendit = true; break; } } if (!$is_sendit) { sendit_log('Commande non Sendit: ' . $order_id); return; } // Authentification $token = sendit_get_token_improved(); if (!$token) { $order->add_order_note('❌ Sendit: Échec authentification API'); return; } // Récupérer les données de la commande $district_id = get_post_meta($order_id, '_sendit_district_id', true); if (!$district_id) { $district_id = sendit_get_district_id_by_region($order->get_shipping_state(), $order->get_shipping_city()); sendit_log('District ID calculé: ' . $district_id); } // Préparer le nom complet $shipping_name = trim($order->get_shipping_first_name() . ' ' . $order->get_shipping_last_name()); if (empty($shipping_name)) { $shipping_name = trim($order->get_billing_first_name() . ' ' . $order->get_billing_last_name()); } // Préparer l'adresse $shipping_address = $order->get_shipping_address_1(); if (empty($shipping_address)) { $shipping_address = $order->get_billing_address_1(); } // Ajouter l'adresse 2 si elle existe $address_2 = $order->get_shipping_address_2() ?: $order->get_billing_address_2(); if (!empty($address_2)) { $shipping_address .= ', ' . $address_2; } // Préparer les données de livraison selon la documentation Sendit $delivery_data = array( 'pickup_district_id' => 1, // Toujours 1 pour Casablanca (votre entrepôt) 'district_id' => intval($district_id), 'name' => $shipping_name, 'phone' => $order->get_billing_phone(), 'address' => $shipping_address, 'amount' => floatval($order->get_total()), 'comment' => 'Commande #' . $order_id . ' - ' . get_bloginfo('name'), 'packaging_id' => 1, // ID emballage par défaut 'allow_open' => false, 'allow_try' => false, 'products' => array(), // Vide selon votre configuration actuelle 'products_from_stock' => array() // Vide selon votre configuration actuelle ); sendit_log('Données de livraison préparées', $delivery_data); // Envoyer la requête à l'API Sendit $response = wp_remote_post('https://app.sendit.ma/api/v1/deliveries', array( 'headers' => array( 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $token ), 'body' => json_encode($delivery_data), 'timeout' => 30 )); if (is_wp_error($response)) { sendit_log('Erreur WP lors de création livraison', $response->get_error_message()); $order->add_order_note('❌ Sendit: Erreur réseau - ' . $response->get_error_message()); return; } $response_code = wp_remote_retrieve_response_code($response); $response_body = wp_remote_retrieve_body($response); sendit_log('Réponse création livraison', array( 'code' => $response_code, 'body' => $response_body )); if ($response_code >= 200 && $response_code < 300) { // Succès update_post_meta($order_id, '_sendit_delivery_created', true); $response_data = json_decode($response_body, true); $sendit_code = isset($response_data['data']['code']) ? $response_data['data']['code'] : 'N/A'; $order->add_order_note('✅ Livraison Sendit créée - Code: ' . $sendit_code . ' - District: ' . $district_id); update_post_meta($order_id, '_sendit_delivery_code', $sendit_code); sendit_log('Livraison créée avec succès - Code: ' . $sendit_code); } else { // Erreur $error_data = json_decode($response_body, true); $error_message = isset($error_data['message']) ? $error_data['message'] : 'Erreur inconnue'; sendit_log('Erreur création livraison', array( 'code' => $response_code, 'message' => $error_message, 'full_response' => $error_data )); $order->add_order_note('❌ Erreur Sendit (' . $response_code . '): ' . $error_message); } } // 4. REMPLACER LES HOOKS EXISTANTS remove_action('woocommerce_order_status_processing', 'sendit_create_delivery'); remove_action('woocommerce_order_status_completed', 'sendit_create_delivery'); add_action('woocommerce_order_status_processing', 'sendit_create_delivery_improved'); add_action('woocommerce_order_status_completed', 'sendit_create_delivery_improved'); // 5. HOOK SUPPLÉMENTAIRE POUR DÉCLENCHER IMMÉDIATEMENT APRÈS CHECKOUT add_action('woocommerce_thankyou', function($order_id) { if (!$order_id) return; $order = wc_get_order($order_id); if (!$order) return; // Vérifier si c'est une commande Sendit $shipping_methods = $order->get_shipping_methods(); foreach ($shipping_methods as $method) { if ($method->get_method_id() === 'sendit_simple') { sendit_log('Déclenchement création livraison depuis thankyou page'); // Délai de 2 secondes pour laisser le temps à la commande de se finaliser wp_schedule_single_event(time() + 2, 'sendit_delayed_delivery_creation', array($order_id)); break; } } }); // Action différée pour la création de livraison add_action('sendit_delayed_delivery_creation', 'sendit_create_delivery_improved'); /** * INSTRUCTIONS D'UTILISATION: * * 1. Remplacez la fonction sendit_create_delivery() existante par sendit_create_delivery_improved() * 2. Remplacez sendit_get_token() par sendit_get_token_improved() * 3. Ajoutez la fonction sendit_log() en haut de votre functions.php * 4. Testez une commande et vérifiez les logs dans wp-content/debug.log * 5. Une fois que ça fonctionne, vous pouvez retirer les logs de diagnostic */ ?> https://herboidrissi.com/wp-sitemap-posts-post-1.xmlhttps://herboidrissi.com/wp-sitemap-posts-page-1.xmlhttps://herboidrissi.com/wp-sitemap-posts-product-1.xmlhttps://herboidrissi.com/wp-sitemap-taxonomies-category-1.xmlhttps://herboidrissi.com/wp-sitemap-taxonomies-post_format-1.xmlhttps://herboidrissi.com/wp-sitemap-taxonomies-product_brand-1.xmlhttps://herboidrissi.com/wp-sitemap-taxonomies-product_cat-1.xmlhttps://herboidrissi.com/wp-sitemap-users-1.xml