diff --git a/modules/ecomzone.zip b/modules/ecomzone.zip index 6fb1ba0..9413eae 100644 Binary files a/modules/ecomzone.zip and b/modules/ecomzone.zip differ diff --git a/modules/ecomzone/classes/EcomZoneAPI.php b/modules/ecomzone/classes/EcomZoneAPI.php index 6cf70a1..8a86064 100644 --- a/modules/ecomzone/classes/EcomZoneAPI.php +++ b/modules/ecomzone/classes/EcomZoneAPI.php @@ -14,6 +14,14 @@ class EcomZoneAPI $this->apiKey = Configuration::get('ECOMZONE_API_KEY'); $this->apiUrl = Configuration::get('ECOMZONE_API_URL'); $this->lastRequestTime = time(); + + // Debug log the configuration + PrestaShopLogger::addLog( + sprintf('EcomZone API initialized with URL: %s', $this->apiUrl), + 1, + null, + 'EcomZone' + ); } private function checkRateLimit() @@ -31,40 +39,35 @@ class EcomZoneAPI $this->requestCount++; } - public function getCatalog($perPage = 1000) - { - $this->checkRateLimit(); - $url = $this->apiUrl . '/catalog'; - return $this->makeRequest('GET', $url, ['per_page' => $perPage]); - } - - public function getProduct($sku) - { - $this->checkRateLimit(); - $url = $this->apiUrl . '/product/' . urlencode($sku); - return $this->makeRequest('GET', $url); - } - - public function createOrder($orderData) - { - $this->checkRateLimit(); - $url = $this->apiUrl . '/ordering'; - return $this->makeRequest('POST', $url, $orderData); - } - private function makeRequest($method, $url, $params = []) { try { + // Debug log the request + PrestaShopLogger::addLog( + sprintf('Making request: %s %s', $method, $url), + 1, + null, + 'EcomZone' + ); + $curl = curl_init(); + // Add token as URL parameter AND header for maximum compatibility + $urlWithToken = $url . (strpos($url, '?') === false ? '?' : '&') . 'token=' . $this->apiKey; + if ($method === 'GET' && !empty($params)) { + $urlWithToken .= '&' . http_build_query($params); + } + $options = [ - CURLOPT_URL => $url . ($method === 'GET' && !empty($params) ? '?' . http_build_query($params) : ''), + CURLOPT_URL => $urlWithToken, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $method, + CURLOPT_SSL_VERIFYPEER => false, // For testing only, remove in production + CURLOPT_SSL_VERIFYHOST => false, // For testing only, remove in production CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $this->apiKey, 'Accept: application/json', @@ -78,10 +81,33 @@ class EcomZoneAPI curl_setopt_array($curl, $options); + // Debug log the curl options + PrestaShopLogger::addLog( + sprintf('Curl options: %s', json_encode([ + 'url' => $urlWithToken, + 'headers' => $options[CURLOPT_HTTPHEADER] + ])), + 1, + null, + 'EcomZone' + ); + $response = curl_exec($curl); $err = curl_error($curl); $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); + // Debug log the response + PrestaShopLogger::addLog( + sprintf('Response Code: %d, Error: %s, Response: %s', + $httpCode, + $err ?: 'none', + substr($response, 0, 1000) + ), + 1, + null, + 'EcomZone' + ); + curl_close($curl); if ($err) { @@ -103,4 +129,25 @@ class EcomZoneAPI throw $e; } } + + public function getCatalog($perPage = 10) + { + $this->checkRateLimit(); + $url = $this->apiUrl . '/catalog'; + return $this->makeRequest('GET', $url, ['per_page' => $perPage]); + } + + public function getProduct($sku) + { + $this->checkRateLimit(); + $url = $this->apiUrl . '/product/' . urlencode($sku); + return $this->makeRequest('GET', $url); + } + + public function createOrder($orderData) + { + $this->checkRateLimit(); + $url = $this->apiUrl . '/ordering'; + return $this->makeRequest('POST', $url, $orderData); + } } \ No newline at end of file diff --git a/modules/ecomzone/ecomzone.php b/modules/ecomzone/ecomzone.php index 86e6341..a07fa86 100644 --- a/modules/ecomzone/ecomzone.php +++ b/modules/ecomzone/ecomzone.php @@ -44,7 +44,8 @@ class EcomZone extends Module return false; } - if (!Configuration::updateValue('ECOMZONE_API_KEY', '') || + // Set default API key from your working configuration + if (!Configuration::updateValue('ECOMZONE_API_KEY', 'klRyAdrXaxL0s6PEUp7LDlH6T8aPSCtBY8NiEHsHiWpc6646K2TZPi5KMxUg') || !Configuration::updateValue('ECOMZONE_API_URL', 'https://dropship.ecomzone.eu/api')) { $this->errors[] = $this->l('Could not set default configuration'); return false; @@ -56,18 +57,54 @@ class EcomZone extends Module public function getContent() { $output = ''; + $debugOutput = ''; if (Tools::isSubmit('submitEcomZone')) { - $apiKey = Tools::getValue('ECOMZONE_API_KEY'); + $apiKey = trim(Tools::getValue('ECOMZONE_API_KEY')); if (!$apiKey) { $output .= $this->displayError($this->l('API Key is required')); } else { Configuration::updateValue('ECOMZONE_API_KEY', $apiKey); + $debugOutput .= "API Key saved: " . substr($apiKey, 0, 10) . "...\n"; $output .= $this->displayConfirmation($this->l('Settings updated')); } } - + + // Handle manual fetch + if (Tools::isSubmit('fetchProducts')) { + try { + $debugOutput .= "Starting product fetch...\n"; + + // Get first 10 products for testing + $catalog = $this->api->getCatalog(10); + + if (isset($catalog['data']) && is_array($catalog['data'])) { + foreach ($catalog['data'] as $product) { + $debugOutput .= sprintf( + "Found product: %s - %s (Price: %s EUR, Stock: %s)\n", + $product['sku'], + $product['product_name'], + $product['product_price'], + $product['stock'] + ); + } + $debugOutput .= sprintf("\nTotal products fetched: %d\n", count($catalog['data'])); + } else { + $debugOutput .= "No products found or invalid response format\n"; + } + + $output .= $this->displayConfirmation($this->l('Products fetched successfully')); + + } catch (Exception $e) { + $debugOutput .= "Error: " . $e->getMessage() . "\n"; + $output .= $this->displayError($this->l('Error fetching products')); + } + } + + // Store debug output in smarty variable + $this->context->smarty->assign('debug_output', $debugOutput); + return $output . $this->displayForm(); } @@ -86,6 +123,15 @@ class EcomZone extends Module 'size' => 50 ], ], + 'buttons' => [ + [ + 'type' => 'submit', + 'title' => $this->l('Fetch Products'), + 'icon' => 'process-icon-download', + 'name' => 'fetchProducts', + 'class' => 'btn btn-primary pull-left' + ] + ], 'submit' => [ 'title' => $this->l('Save'), 'class' => 'btn btn-default pull-right' @@ -99,8 +145,21 @@ class EcomZone extends Module $helper->currentIndex = AdminController::$currentIndex . '&configure=' . $this->name; $helper->default_form_language = Configuration::get('PS_LANG_DEFAULT'); $helper->fields_value['ECOMZONE_API_KEY'] = Configuration::get('ECOMZONE_API_KEY'); - - return $helper->generateForm($fields_form); + + // Add debug console after form + $form = $helper->generateForm($fields_form); + $debug_console = '
+ ' . $this->context->smarty->getTemplateVars('debug_output') . '
+
+
+ {$debug_output|escape:'html':'UTF-8'}
+
+