From 2eef682859fba89853f60fee3c04bc12fd7df651 Mon Sep 17 00:00:00 2001 From: dimitar Date: Mon, 27 Jan 2025 23:08:03 +0100 Subject: [PATCH] up untill fetch 10 products --- modules/ecomzone.zip | Bin 5410 -> 6672 bytes modules/ecomzone/classes/EcomZoneAPI.php | 91 +++++++++++++----- modules/ecomzone/ecomzone.php | 69 ++++++++++++- .../views/templates/admin/configure.tpl | 16 ++- 4 files changed, 148 insertions(+), 28 deletions(-) diff --git a/modules/ecomzone.zip b/modules/ecomzone.zip index 6fb1ba00f6a5a10a211ac83f5f127f85a8753c83..9413eae7a9fa25a0e47e49c8eea501dccd82fef4 100644 GIT binary patch delta 4510 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 BsLKEV delta 3215 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 MmCLRJeEsk2U+${@UjP6A 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->l('Debug Console') . ' +
+
+
+                    ' . $this->context->smarty->getTemplateVars('debug_output') . '
+                
+
+
'; + + return $form . $debug_console; } public function getErrors() diff --git a/modules/ecomzone/views/templates/admin/configure.tpl b/modules/ecomzone/views/templates/admin/configure.tpl index 6f90a59..965751c 100644 --- a/modules/ecomzone/views/templates/admin/configure.tpl +++ b/modules/ecomzone/views/templates/admin/configure.tpl @@ -15,6 +15,20 @@ + - \ No newline at end of file + + +
+
+ {l s='Debug Console' mod='ecomzone'} +
+
+
+            {$debug_output|escape:'html':'UTF-8'}
+        
+
+
\ No newline at end of file