controll Опубліковано: 8 березня 2020 Share Опубліковано: 8 березня 2020 (змінено) День добрый, подскажитеплиз решение. По api генерируется токен, и потом с помощью curl нужно запустить метод в админке с передачей post данных. $curl = curl_init( 'https://site.ru/admin/index.php?route=extension/analitycs/someMethod&token=' . $token); curl_setopt_array( $curl, array( CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_RETURNTRANSFER=> TRUE, CURLOPT_POSTFIELDS => $data, CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data) ) )); curl_exec($curl); curl_close($curl); запрос идет с того же ip, с которого генерился токен. Добраться до метода не получается ((( , несмотря наличия токена , все равно упирается в логин и пароль. Змінено 8 березня 2020 користувачем controll Надіслати Поділитися на інших сайтах More sharing options...
kJlukOo Опубліковано: 8 березня 2020 Share Опубліковано: 8 березня 2020 подозреваю, что дело в Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 8 березня 2020 Автор Share Опубліковано: 8 березня 2020 4 часа назад, kJlukOo сказал: подозреваю, что дело в Добавил, $curl = curl_init( 'https://site.ru/admin/index.php?route=extension/analitycs/someMethod&token=' . $token); curl_setopt_array( $curl, array( CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_RETURNTRANSFER=> TRUE, CURLOPT_POSTFIELDS => $data, CURLOPT_COOKIEFILE => '/home/site/tmp/cookie.txt', CURLOPT_COOKIEJAR => '/home/site/tmp/cookie.txt', CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data) ) )); curl_exec($curl); curl_close($curl); куки в директорию пишет , но все равно, безрезультатно. Без авторизации не хочет((. Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 8 березня 2020 Автор Share Опубліковано: 8 березня 2020 после получения токена curl закрывается и для запроса метода, создается новый curl_init. Может нужно както метод запрашивать после получения токена, не закрывая curl? Надіслати Поділитися на інших сайтах More sharing options... thentru Опубліковано: 8 березня 2020 Share Опубліковано: 8 березня 2020 Шлете сначала логин и пароль на страницу авторизации. После этого вытаскиваете токен и делаете запрос с куками и вашим токеном Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 9 березня 2020 Автор Share Опубліковано: 9 березня 2020 (змінено) function login($url,$login,$pass){ $ch = curl_init(); if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,"login=".$login."&pass=".$pass); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, '/home/site/tmp/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, '/home/site/tmp/cookie.txt'); $result=curl_exec($ch); curl_close($ch); return $result; } Что-то ниичего не понимаю ((( . Вот для захода код, все равно возвращает страницу логина. Тыкните пожалуйста , что не так. Запрос на страницу "https:/site.ru/admin/index.php" Змінено 9 березня 2020 користувачем controll Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 9 березня 2020 Автор Share Опубліковано: 9 березня 2020 может кому интересно будет, CURLOPT_POSTFFIELDS нужно параметр в виде массива, в таком случае заголовок Content-Type будет установлен в значение multipart/form-data . Тогда авторизация проходит, иначе нет. Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 9 березня 2020 Автор Share Опубліковано: 9 березня 2020 (змінено) к сожалению вопрос с вызовом нужного метода остался после авторизации и получения токена,, все равно не получается запустить этот метод. возвращается не ошибок , ничего. буду признателен помощи. Уже сил нет, помогите плиз function login($url,$login,$pass){ $value = [ 'username' => $login, 'password' => $pass ]; $ch = curl_init(); if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $value); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, '/home/site/tmp/cookie.txt'); $result=substr(strrchr(curl_exec($ch), '='), 1 ); curl_close($ch); return $result; } function read($url){ $ch = curl_init(); if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); } curl_setopt($ch, CURLOPT_URL, $url); // откуда пришли на эту страницу curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //запрещаем делать запрос с помощью POST и соответственно разрешаем с помощью GET (для простоты, хотя в дальнейшем нужно будет post) curl_setopt($ch, CURLOPT_POST, 0); //отсылаем серверу COOKIE полученные от него при авторизации curl_setopt($ch, CURLOPT_COOKIEFILE, '/home/site/tmp/cookie.txt'); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4"); $result = curl_exec($ch); curl_close($ch); } $token = login('https://site/admin/index.php?route=common/login', 'login', 'pass'); $url = 'https://site/admin/index.php?route=extension/analitycs/getUpdate&token='.$token; $result= read($url); print_r = $result Змінено 9 березня 2020 користувачем controll Надіслати Поділитися на інших сайтах More sharing options... OCdevWizard Опубліковано: 9 березня 2020 Share Опубліковано: 9 березня 2020 может все таки этот метод extension/analitycs/getUpdate продублировать в catalog/ и не парится с токенами и тд? и что возвращает curl_errno > curl_error ?? Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 10 березня 2020 Автор Share Опубліковано: 10 березня 2020 6 часов назад, OCdevWizard сказал: может все таки этот метод extension/analitycs/getUpdate продублировать в catalog/ и не парится с токенами и тд? и что возвращает curl_errno > curl_error ?? Спасиб большое ))), сработало. curl_error вернул Illegal characters found in URL Оказалось при вытаскивания токена в конце притаился пробел, изза этого не работала ссылка. Обернул в trim еще. PS. Насчет в каталог , не совсем то, так как вызванный метод это вход для работы с заказами, неудобно будет )) Надіслати Поділитися на інших сайтах More sharing options... 1 year later... mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 @controll Стоит аналогичная задача. Какая версия OpenCart у вас? Надіслати Поділитися на інших сайтах More sharing options... mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 Пытаюсь, по найденным в сети примерам работы апи опренкарт, добавить свой метод в апи. Пример файла: <?php class ControllerApiCopyFilter extends Controller { public function copy() { $json = array(); $this->log->write($this->request->post); $this->log->write($this->session->data['api_id']); if (!isset($this->session->data['api_id'])) { $json['error']['warning'] = $this->language->get('error_permission'); } else { $this->log->write($this->request->post); } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } } Получаю токен: stdClass Object ( [success] => API сессия успешно запущена! [token] => 0RpUQqTbHMT6pomZHLwwm********* ) Далее обращаюсь к своему методу: if(isset($token)) { $url = DOMEN_NAME."index.php?route=api/copyfilter/copy/&token=".$token; $post = array ( 'copy_type' => 'checkbox', 'copy_status' => '-1', 'copy_attribute' => '0', 'copy_filter' => '1', 'copy_option' => '1', 'copy_truncate' => '1', 'copy_category' => '1' ); $curl = curl_init( $url ); curl_setopt_array( $curl, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POSTFIELDS => $post, CURLOPT_COOKIEFILE, 'cookie.txt') ); $result=curl_exec($curl); a($result); curl_close($curl); Получаю: Notice: Undefined index: api_id in /var/www/korney01/data/www/test.caseroom.in.ua/catalog/controller/api/copyfilter.php on line 9{"error":{"warning":"error_permission"}} Что я делаю не так? Надіслати Поділитися на інших сайтах More sharing options... iglin Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 1 час назад, mario512 сказал: Что я делаю не так? Разрешение на запись cookie.txt есть? По идее так то всё правильно делаете) Но по какой то причине у вас в сессии нету api_id. Так то по идее даже если бы не было прав на запись файла куки, то ошибку должны были получить ранее, связанную с тем что текен не совпадает с сессией, но у вас уходит на следующий этап. Надіслати Поділитися на інших сайтах More sharing options... mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 Мой ip в списке разрешенных. В catalog/controller/api/login.php сессию стартует данная строчка: $this->session->start('api', $session_id_new); //$session_id_new получаю. Пример функции, стартующей сессию, system/library/session.php public function start($key = 'default', $value = '') { if ($value) { $this->session_id = $value; } elseif (isset($_COOKIE[$key])) { $this->session_id = $_COOKIE[$key]; } else { $this->session_id = $this->createId(); } if (!isset($_SESSION[$this->session_id])) { $_SESSION[$this->session_id] = array(); } $this->data = &$_SESSION[$this->session_id]; if ($key != 'PHPSESSID') { setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly')); } return $this->session_id; } Насколько я понял, должна стартовать сессия с именем api и с соответствующий кукой. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Доступ в админ с помощью curl Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
controll Опубліковано: 8 березня 2020 Автор Share Опубліковано: 8 березня 2020 4 часа назад, kJlukOo сказал: подозреваю, что дело в Добавил, $curl = curl_init( 'https://site.ru/admin/index.php?route=extension/analitycs/someMethod&token=' . $token); curl_setopt_array( $curl, array( CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_RETURNTRANSFER=> TRUE, CURLOPT_POSTFIELDS => $data, CURLOPT_COOKIEFILE => '/home/site/tmp/cookie.txt', CURLOPT_COOKIEJAR => '/home/site/tmp/cookie.txt', CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data) ) )); curl_exec($curl); curl_close($curl); куки в директорию пишет , но все равно, безрезультатно. Без авторизации не хочет((. Надіслати Поділитися на інших сайтах More sharing options...
controll Опубліковано: 8 березня 2020 Автор Share Опубліковано: 8 березня 2020 после получения токена curl закрывается и для запроса метода, создается новый curl_init. Может нужно както метод запрашивать после получения токена, не закрывая curl? Надіслати Поділитися на інших сайтах More sharing options...
thentru Опубліковано: 8 березня 2020 Share Опубліковано: 8 березня 2020 Шлете сначала логин и пароль на страницу авторизации. После этого вытаскиваете токен и делаете запрос с куками и вашим токеном Надіслати Поділитися на інших сайтах More sharing options...
controll Опубліковано: 9 березня 2020 Автор Share Опубліковано: 9 березня 2020 (змінено) function login($url,$login,$pass){ $ch = curl_init(); if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,"login=".$login."&pass=".$pass); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, '/home/site/tmp/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, '/home/site/tmp/cookie.txt'); $result=curl_exec($ch); curl_close($ch); return $result; } Что-то ниичего не понимаю ((( . Вот для захода код, все равно возвращает страницу логина. Тыкните пожалуйста , что не так. Запрос на страницу "https:/site.ru/admin/index.php" Змінено 9 березня 2020 користувачем controll Надіслати Поділитися на інших сайтах More sharing options...
controll Опубліковано: 9 березня 2020 Автор Share Опубліковано: 9 березня 2020 может кому интересно будет, CURLOPT_POSTFFIELDS нужно параметр в виде массива, в таком случае заголовок Content-Type будет установлен в значение multipart/form-data . Тогда авторизация проходит, иначе нет. Надіслати Поділитися на інших сайтах More sharing options...
controll Опубліковано: 9 березня 2020 Автор Share Опубліковано: 9 березня 2020 (змінено) к сожалению вопрос с вызовом нужного метода остался после авторизации и получения токена,, все равно не получается запустить этот метод. возвращается не ошибок , ничего. буду признателен помощи. Уже сил нет, помогите плиз function login($url,$login,$pass){ $value = [ 'username' => $login, 'password' => $pass ]; $ch = curl_init(); if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $value); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, '/home/site/tmp/cookie.txt'); $result=substr(strrchr(curl_exec($ch), '='), 1 ); curl_close($ch); return $result; } function read($url){ $ch = curl_init(); if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); } curl_setopt($ch, CURLOPT_URL, $url); // откуда пришли на эту страницу curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //запрещаем делать запрос с помощью POST и соответственно разрешаем с помощью GET (для простоты, хотя в дальнейшем нужно будет post) curl_setopt($ch, CURLOPT_POST, 0); //отсылаем серверу COOKIE полученные от него при авторизации curl_setopt($ch, CURLOPT_COOKIEFILE, '/home/site/tmp/cookie.txt'); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4"); $result = curl_exec($ch); curl_close($ch); } $token = login('https://site/admin/index.php?route=common/login', 'login', 'pass'); $url = 'https://site/admin/index.php?route=extension/analitycs/getUpdate&token='.$token; $result= read($url); print_r = $result Змінено 9 березня 2020 користувачем controll Надіслати Поділитися на інших сайтах More sharing options...
OCdevWizard Опубліковано: 9 березня 2020 Share Опубліковано: 9 березня 2020 может все таки этот метод extension/analitycs/getUpdate продублировать в catalog/ и не парится с токенами и тд? и что возвращает curl_errno > curl_error ?? Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 10 березня 2020 Автор Share Опубліковано: 10 березня 2020 6 часов назад, OCdevWizard сказал: может все таки этот метод extension/analitycs/getUpdate продублировать в catalog/ и не парится с токенами и тд? и что возвращает curl_errno > curl_error ?? Спасиб большое ))), сработало. curl_error вернул Illegal characters found in URL Оказалось при вытаскивания токена в конце притаился пробел, изза этого не работала ссылка. Обернул в trim еще. PS. Насчет в каталог , не совсем то, так как вызванный метод это вход для работы с заказами, неудобно будет )) Надіслати Поділитися на інших сайтах More sharing options... 1 year later... mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 @controll Стоит аналогичная задача. Какая версия OpenCart у вас? Надіслати Поділитися на інших сайтах More sharing options... mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 Пытаюсь, по найденным в сети примерам работы апи опренкарт, добавить свой метод в апи. Пример файла: <?php class ControllerApiCopyFilter extends Controller { public function copy() { $json = array(); $this->log->write($this->request->post); $this->log->write($this->session->data['api_id']); if (!isset($this->session->data['api_id'])) { $json['error']['warning'] = $this->language->get('error_permission'); } else { $this->log->write($this->request->post); } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } } Получаю токен: stdClass Object ( [success] => API сессия успешно запущена! [token] => 0RpUQqTbHMT6pomZHLwwm********* ) Далее обращаюсь к своему методу: if(isset($token)) { $url = DOMEN_NAME."index.php?route=api/copyfilter/copy/&token=".$token; $post = array ( 'copy_type' => 'checkbox', 'copy_status' => '-1', 'copy_attribute' => '0', 'copy_filter' => '1', 'copy_option' => '1', 'copy_truncate' => '1', 'copy_category' => '1' ); $curl = curl_init( $url ); curl_setopt_array( $curl, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POSTFIELDS => $post, CURLOPT_COOKIEFILE, 'cookie.txt') ); $result=curl_exec($curl); a($result); curl_close($curl); Получаю: Notice: Undefined index: api_id in /var/www/korney01/data/www/test.caseroom.in.ua/catalog/controller/api/copyfilter.php on line 9{"error":{"warning":"error_permission"}} Что я делаю не так? Надіслати Поділитися на інших сайтах More sharing options... iglin Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 1 час назад, mario512 сказал: Что я делаю не так? Разрешение на запись cookie.txt есть? По идее так то всё правильно делаете) Но по какой то причине у вас в сессии нету api_id. Так то по идее даже если бы не было прав на запись файла куки, то ошибку должны были получить ранее, связанную с тем что текен не совпадает с сессией, но у вас уходит на следующий этап. Надіслати Поділитися на інших сайтах More sharing options... mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 Мой ip в списке разрешенных. В catalog/controller/api/login.php сессию стартует данная строчка: $this->session->start('api', $session_id_new); //$session_id_new получаю. Пример функции, стартующей сессию, system/library/session.php public function start($key = 'default', $value = '') { if ($value) { $this->session_id = $value; } elseif (isset($_COOKIE[$key])) { $this->session_id = $_COOKIE[$key]; } else { $this->session_id = $this->createId(); } if (!isset($_SESSION[$this->session_id])) { $_SESSION[$this->session_id] = array(); } $this->data = &$_SESSION[$this->session_id]; if ($key != 'PHPSESSID') { setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly')); } return $this->session_id; } Насколько я понял, должна стартовать сессия с именем api и с соответствующий кукой. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Доступ в админ с помощью curl Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
controll Опубліковано: 10 березня 2020 Автор Share Опубліковано: 10 березня 2020 6 часов назад, OCdevWizard сказал: может все таки этот метод extension/analitycs/getUpdate продублировать в catalog/ и не парится с токенами и тд? и что возвращает curl_errno > curl_error ?? Спасиб большое ))), сработало. curl_error вернул Illegal characters found in URL Оказалось при вытаскивания токена в конце притаился пробел, изза этого не работала ссылка. Обернул в trim еще. PS. Насчет в каталог , не совсем то, так как вызванный метод это вход для работы с заказами, неудобно будет )) Надіслати Поділитися на інших сайтах More sharing options...
mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 @controll Стоит аналогичная задача. Какая версия OpenCart у вас? Надіслати Поділитися на інших сайтах More sharing options... mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 Пытаюсь, по найденным в сети примерам работы апи опренкарт, добавить свой метод в апи. Пример файла: <?php class ControllerApiCopyFilter extends Controller { public function copy() { $json = array(); $this->log->write($this->request->post); $this->log->write($this->session->data['api_id']); if (!isset($this->session->data['api_id'])) { $json['error']['warning'] = $this->language->get('error_permission'); } else { $this->log->write($this->request->post); } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } } Получаю токен: stdClass Object ( [success] => API сессия успешно запущена! [token] => 0RpUQqTbHMT6pomZHLwwm********* ) Далее обращаюсь к своему методу: if(isset($token)) { $url = DOMEN_NAME."index.php?route=api/copyfilter/copy/&token=".$token; $post = array ( 'copy_type' => 'checkbox', 'copy_status' => '-1', 'copy_attribute' => '0', 'copy_filter' => '1', 'copy_option' => '1', 'copy_truncate' => '1', 'copy_category' => '1' ); $curl = curl_init( $url ); curl_setopt_array( $curl, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POSTFIELDS => $post, CURLOPT_COOKIEFILE, 'cookie.txt') ); $result=curl_exec($curl); a($result); curl_close($curl); Получаю: Notice: Undefined index: api_id in /var/www/korney01/data/www/test.caseroom.in.ua/catalog/controller/api/copyfilter.php on line 9{"error":{"warning":"error_permission"}} Что я делаю не так? Надіслати Поділитися на інших сайтах More sharing options... iglin Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 1 час назад, mario512 сказал: Что я делаю не так? Разрешение на запись cookie.txt есть? По идее так то всё правильно делаете) Но по какой то причине у вас в сессии нету api_id. Так то по идее даже если бы не было прав на запись файла куки, то ошибку должны были получить ранее, связанную с тем что текен не совпадает с сессией, но у вас уходит на следующий этап. Надіслати Поділитися на інших сайтах More sharing options... mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 Мой ip в списке разрешенных. В catalog/controller/api/login.php сессию стартует данная строчка: $this->session->start('api', $session_id_new); //$session_id_new получаю. Пример функции, стартующей сессию, system/library/session.php public function start($key = 'default', $value = '') { if ($value) { $this->session_id = $value; } elseif (isset($_COOKIE[$key])) { $this->session_id = $_COOKIE[$key]; } else { $this->session_id = $this->createId(); } if (!isset($_SESSION[$this->session_id])) { $_SESSION[$this->session_id] = array(); } $this->data = &$_SESSION[$this->session_id]; if ($key != 'PHPSESSID') { setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly')); } return $this->session_id; } Насколько я понял, должна стартовать сессия с именем api и с соответствующий кукой. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Доступ в админ с помощью curl Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 Пытаюсь, по найденным в сети примерам работы апи опренкарт, добавить свой метод в апи. Пример файла: <?php class ControllerApiCopyFilter extends Controller { public function copy() { $json = array(); $this->log->write($this->request->post); $this->log->write($this->session->data['api_id']); if (!isset($this->session->data['api_id'])) { $json['error']['warning'] = $this->language->get('error_permission'); } else { $this->log->write($this->request->post); } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } } Получаю токен: stdClass Object ( [success] => API сессия успешно запущена! [token] => 0RpUQqTbHMT6pomZHLwwm********* ) Далее обращаюсь к своему методу: if(isset($token)) { $url = DOMEN_NAME."index.php?route=api/copyfilter/copy/&token=".$token; $post = array ( 'copy_type' => 'checkbox', 'copy_status' => '-1', 'copy_attribute' => '0', 'copy_filter' => '1', 'copy_option' => '1', 'copy_truncate' => '1', 'copy_category' => '1' ); $curl = curl_init( $url ); curl_setopt_array( $curl, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POSTFIELDS => $post, CURLOPT_COOKIEFILE, 'cookie.txt') ); $result=curl_exec($curl); a($result); curl_close($curl); Получаю: Notice: Undefined index: api_id in /var/www/korney01/data/www/test.caseroom.in.ua/catalog/controller/api/copyfilter.php on line 9{"error":{"warning":"error_permission"}} Что я делаю не так? Надіслати Поділитися на інших сайтах More sharing options... iglin Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 1 час назад, mario512 сказал: Что я делаю не так? Разрешение на запись cookie.txt есть? По идее так то всё правильно делаете) Но по какой то причине у вас в сессии нету api_id. Так то по идее даже если бы не было прав на запись файла куки, то ошибку должны были получить ранее, связанную с тем что текен не совпадает с сессией, но у вас уходит на следующий этап. Надіслати Поділитися на інших сайтах More sharing options... mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 Мой ip в списке разрешенных. В catalog/controller/api/login.php сессию стартует данная строчка: $this->session->start('api', $session_id_new); //$session_id_new получаю. Пример функции, стартующей сессию, system/library/session.php public function start($key = 'default', $value = '') { if ($value) { $this->session_id = $value; } elseif (isset($_COOKIE[$key])) { $this->session_id = $_COOKIE[$key]; } else { $this->session_id = $this->createId(); } if (!isset($_SESSION[$this->session_id])) { $_SESSION[$this->session_id] = array(); } $this->data = &$_SESSION[$this->session_id]; if ($key != 'PHPSESSID') { setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly')); } return $this->session_id; } Насколько я понял, должна стартовать сессия с именем api и с соответствующий кукой. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Доступ в админ с помощью curl
iglin Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 1 час назад, mario512 сказал: Что я делаю не так? Разрешение на запись cookie.txt есть? По идее так то всё правильно делаете) Но по какой то причине у вас в сессии нету api_id. Так то по идее даже если бы не было прав на запись файла куки, то ошибку должны были получить ранее, связанную с тем что текен не совпадает с сессией, но у вас уходит на следующий этап. Надіслати Поділитися на інших сайтах More sharing options... mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 Мой ip в списке разрешенных. В catalog/controller/api/login.php сессию стартует данная строчка: $this->session->start('api', $session_id_new); //$session_id_new получаю. Пример функции, стартующей сессию, system/library/session.php public function start($key = 'default', $value = '') { if ($value) { $this->session_id = $value; } elseif (isset($_COOKIE[$key])) { $this->session_id = $_COOKIE[$key]; } else { $this->session_id = $this->createId(); } if (!isset($_SESSION[$this->session_id])) { $_SESSION[$this->session_id] = array(); } $this->data = &$_SESSION[$this->session_id]; if ($key != 'PHPSESSID') { setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly')); } return $this->session_id; } Насколько я понял, должна стартовать сессия с именем api и с соответствующий кукой. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
mario512 Опубліковано: 22 квітня 2021 Share Опубліковано: 22 квітня 2021 Мой ip в списке разрешенных. В catalog/controller/api/login.php сессию стартует данная строчка: $this->session->start('api', $session_id_new); //$session_id_new получаю. Пример функции, стартующей сессию, system/library/session.php public function start($key = 'default', $value = '') { if ($value) { $this->session_id = $value; } elseif (isset($_COOKIE[$key])) { $this->session_id = $_COOKIE[$key]; } else { $this->session_id = $this->createId(); } if (!isset($_SESSION[$this->session_id])) { $_SESSION[$this->session_id] = array(); } $this->data = &$_SESSION[$this->session_id]; if ($key != 'PHPSESSID') { setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly')); } return $this->session_id; } Насколько я понял, должна стартовать сессия с именем api и с соответствующий кукой. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1
Recommended Posts