Нужна помощь в доработки функционала передача заказа из Opencart в гугл таблицы через api сделал такой скрипт function authorizeAndFetchOrders() { const username = 'api'; // Имя пользователя const apiKey = 'w6IpMcLOQydrbsiL4T6l0CZvvPQr2LNcrDY1QiQQmMqrOfNLG4PCYd0IR5dQmslETfdElIl6K3LSIUMQ18YOowshz7izHrUz06KqJnHBYDatfyN3vvsKHvGcKXoljqvshldn0wKDSVP5rOzbnnfzCCscsmWdgdaSEFkAZ0hDPzZJo3Lc45MWSGzw8Wd4Njll0V3O3xcWUDymjYKSmOMiWoEVDUvhkaVxfkGUzLy54PLlTl58vMSFWrOvmqeqJlo4'; // Ваш API ключ const apiUrl = 'https://shopmag.pp.ua/' + 'index.php?route=api/'; const loginUrl = apiUrl + 'account/login&language=en-gb&store_id=0'; const requestData = { 'username': username, 'key': apiKey }; const options = {'method': 'post', 'contentType': 'application/x-www-form-urlencoded', 'payload': requestData, 'muteHttpExceptions': true}; const loginResponse = UrlFetchApp.fetch(loginUrl, options); const loginStatus = loginResponse.getResponseCode(); if (loginStatus === 200) { const loginData = JSON.parse(loginResponse.getContentText()); Logger.log(JSON.stringify(loginData, null, 2)); // полный ответ в логи, для просмотра раскоментить if (loginData.api_token) { const sessionId = loginData.api_token; // Токен для сессии // URL для получения заказов const ordersUrl = apiUrl + 'sale/order.load&language=en-gb&store_id=0&order_id=1'; // Настройки для запроса получения заказов const ordersOptions = { method: 'post', contentType: 'application/json', headers: { 'Cookie': 'OCSESSID=' + sessionId }, muteHttpExceptions: true }; // Выполнение запроса получения заказов const ordersResponse = UrlFetchApp.fetch(ordersUrl, ordersOptions); const ordersStatus = ordersResponse.getResponseCode(); if (ordersStatus === 200) { const ordersData = JSON.parse(ordersResponse.getContentText()); Logger.log(JSON.stringify(ordersData, null, 2)); // полный ответ в логи, для просмотра раскоментить Logger.log('Заказы:', ordersData); // Выводим заказы в лог } else { Logger.log('Ошибка при получении заказов:', ordersResponse.getContentText()); } } else { Logger.log('Не удалось получить API токен:', loginData); } } else { Logger.log('Ошибка авторизации:', loginResponse.getContentText()); } } получаю такие ответы 14:15:27Информация{ "success": "Сеанс API успешно запущен!", "api_token": "727d4ef9a7ab1877725f3b57ed"} 14:15:28Информация{ "success": "Заказ успешно изменен!"} 14:15:28ИнформацияЗаказы: пробовал менять все вариации ссылки sale/order.info, sale/orders и тд, но выдает ошибку Информация Ошибка при получении заказов: и пустой ответ. авторизацию по айпи убрал, сесия создаеться и коректно добавляеться с куками в запросе. Для теста сделал 2 заказа если запрос const ordersUrl = apiUrl + 'sale/order.load&language=en-gb&store_id=0&order_id=1'; const ordersUrl = apiUrl + 'sale/order.load&language=en-gb&store_id=0&order_id=2'; то ответ Информация{ "success": "Заказ успешно изменен!"} если запрос с номером заказа которого нет const ordersUrl = apiUrl + 'sale/order.load&language=en-gb&store_id=0&order_id=3'; то ответ Информация { "error": "Внимание: Заказ не найден!"} значит с авторизацией и сесией все норм.
использую стандартный api в файле login сразу после установки на сервер голого опенкарта была такая подсказка залогинеться получить, токен и создать сессию получилось но на сервере еще есть папка sale где храниться файл order любые комбинации ссылкой пиводят к Ошибка при получении заказов: и пустой ответ. тольк оработает такой вариант ссылки api/sale/order.load&order_id=1 /* * Opencart\Catalog\Controller\Api\Account\Login.Index * * @example * * $url = 'https://www.yourdomain.com/index.php?route=api/account/login&language=en-gb&store_id=0'; * * $request_data = [ * 'username' => 'Default', * 'key' => '' * ]; * * $curl = curl_init(); * * curl_setopt($curl, CURLOPT_URL, $url); * curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); * curl_setopt($curl, CURLOPT_HEADER, false); * curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); * curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); * curl_setopt($curl, CURLOPT_TIMEOUT, 30); * curl_setopt($curl, CURLOPT_POST, 1); * curl_setopt($curl, CURLOPT_POSTFIELDS, $request_data); * * $response = curl_exec($curl); * * $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); * * curl_close($curl); * * if ($status == 200) { * $api_token = json_decode($response, true); * * if (isset($api_token['api_token'])) { * * // You can now store the session cookie as a var in the your current session or some of persistent storage * $session_id = $api_token['api_token']; * } * } * * $url = 'http://www.yourdomain.com/opencart-...r.load&language=en-gb&store_id=0&order_id=1'; * * $curl = curl_init(); * * curl_setopt($curl, CURLOPT_URL, $url); * curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); * curl_setopt($curl, CURLOPT_HEADER, false); * curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); * curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); * curl_setopt($curl, CURLOPT_TIMEOUT, 30); * curl_setopt($curl, CURLOPT_POST, 1); * curl_setopt($curl, CURLOPT_POSTFIELDS, $request_data); * * // Add the session cookie so we don't have to login again. * curl_setopt($curl, CURLOPT_COOKIE, 'OCSESSID=' . $session_id); * * $response = curl_exec($curl); * * curl_close($curl); * */
Кто сделал? GPT ?? Не думаю что gpt может Вам подсказать верное решение для OpenCart 4 И на всякий случай, для размещения кода на форуме есть кнопочка Вставить ...
Вообщем нашел проблему в своей невнимательности установил 4 опенкарт и там плохо работает АПИ. Мне нужно под 3, переустановил на 3 опенкарт - все отлично и все работает. Код: function getOpenCartOrders() { var username = 'Default'; var key = 'F1EOKXqy6OUCFRCKVPjIAcKV7gxdsc10Un69a7ilOCFTYdgjsULZEkuzYQaAMLbTk2i2ek97DGw8ryavmMgIUFd34X6sEmsqnaWYxi4ViguDKcOpmqKqZsdKq4ycSapVO1lRlqossI0BA5jyP2AohOcJ7WEn7AXthpVziwuT3qvVZjz86FXvlZgQAAhSWu03uAhOFw1HjVK42fNAZ76ozyRl0BWV2n0Mn6FB2e4sTeJsjDL4wyq1NWdie5ADSSif'; var url = 'https://shopmag.pp.ua/index.php?route=api/login'; var authPayload = {'method': 'post', 'payload': {'username': username, 'key': key}, 'muteHttpExceptions': true}; const accessToken = JSON.parse(UrlFetchApp.fetch(url, authPayload).getContentText()); Logger.log('Login Response: ' + JSON.stringify(accessToken, null, 2)); // Логируем полный ответ для диагностики if (accessToken.success) { var token = accessToken.api_token; // Извлекаем токен из правильного поля var ordersUrl = 'https://shopmag.pp.ua/index.php?route=api/order/info&order_id=2'; var ordersOptions = {'method': 'post', 'headers': { 'Cookie': 'OCSESSID=' + token }, 'muteHttpExceptions': true}; var ordersResponse = UrlFetchApp.fetch(ordersUrl, ordersOptions); const ordersData = JSON.parse(ordersResponse.getContentText()); Logger.log(JSON.stringify(ordersData, null, 2)); // Логируем полученные заказы return ordersData; // Возвращаем заказы } else { Logger.log('Ошибка при получении токена: ' + JSON.stringify(accessToken)); return null; // Возвращаем null в случае ошибки } } сейчас проблема как получить заказы по статусу заказа. или получить все заказы и потом отфильтровать по нужному статусу
можно получить инфу по номеру заказа ? получить заказы с нужным статусом не возможно? И получить все заказы и потом отсортировать с нужным статусом тоже походу невозможно ?) буду копать в сторону указать в скрипте актуальный номер заказа, и при вносе в таблицу записывать номер заказа, тогда скрипт будет знать какой был предыдущий заказ и будет добавлять +1 пока не будет заказов, потом опять зная какой был последний заказ проверяет есть ли +1 заказ или нет. Пока вижу такую логику может есть боле проще и лучше вариант )
api/order/info - инфа о заказе по его id заказы со статусом нет, все заказы нет, по какому-то фильтру - нет. а вообще открываете файл catalog/controller/api/order.php и смотрите что там есть, документация у опенкарта в этом плане откровенно слабая. При необходимости легко дописываете свои методы для получения/записи нужной инфы.