API instantcms 2.x добавление новости

InstantCMS 2.X
#16 22 декабря 2018 в 03:53
@IRIPUS, в базе данных в таблице компонента
#17 4 августа 2019 в 20:55
Доброго времени суток.
Сейчас мучаюсь с API и никак не получается продвинуться.
Сначала использую метод api/method/users.get_sig (он успешно отрабатывает)
Потом api/method/auth.login (тоже успешно отрабатывает). Логирвоание происходит
Но потом, когда использую api/method/content.add_item.goods
Получаю
[error_code] => 71
[error_msg] => Требуется авторизация пользователя

Где еще я должен авторизоваться?

P.S. Речь идет о PHP скрипте. Из адресной строки браузера метод api/method/content.add_item.goods работает отлично.
#18 4 августа 2019 в 21:08

Где еще я должен авторизоваться?

vladimird

тут скорее всего не где а как, ваш скрипт не работает с кукисами, если скрипт работает на curl добавьте поддержку кукисов в нем и сохраните их на диск после чего все будет работать.

примерно вот так можно
  1.  
  2. $ckfile = tempnam ("/tmp", "CURLCOOKIE");
  3. Создаем файл кукисов в папке /tmp
  4.  
  5. $ch = curl_init ("http://uri.com/");
  6. curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
  7. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
  8. $output = curl_exec ($ch);
  9.  
#19 4 августа 2019 в 21:54
Спасибо за подсказку. в целом так и есть

У меня вот так заработало
Чтобы прочитать
curl_setopt($curl, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT']. '/cookie.txt');
Чтобы записать
curl_setopt($curl, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT']. '/cookie.txt');

Нужно только озаботиться тем, чтобы скрипт смог создать нужный файл. То есть озаботьтесь правами. В данном случае в корне сайта будет создан файл cookie.txt
#20 4 августа 2019 в 22:01
Видимо на всякий случай стоит защитить файл cookie.txt от прямого доступа из браузера
#21 5 августа 2019 в 12:02

Получаю
[error_code] => 71
[error_msg] => Требуется авторизация пользователя

vladimird

тут скорее всего не где а как, ваш скрипт не работает с кукисами, если скрипт работает на curl добавьте поддержку кукисов в нем и сохраните их на диск после чего все будет работать.

maxisoft

Аллюминиум… я на этом застрял год назад почти… спрашивал, никто так и не дал вразумительного ответа.

Спасибо!
#22 22 августа 2019 в 23:05
теперь появилась необходимость помимо текстовой информации добовлять и обновлять картинки. Сама картинка доступна только по ссылке. Например такой: site.com/image1.jpg
Как это вообще можно сделать с помощью CURL? То есть какова последовательность действий? Видимо нужно сначала скачать картинку по ссылке, потом загрузить ее куда-то и потом в запись добавить. Вижу этот процесс примерно так, но с ходу не получилось. Прошу подсказать.
Так же есть еще большое непонимание того, как контролировать мусор. Например, попытались загрузить, загрузили, но запись в итоге не добавилась, а загруженная картинка где-то подвисла. Или при обновлении записи мы же фактически добавляем новую картинку. Нужно ли удалять старую картинку? Если не удалим, то получается мусор будет накапливаться?
#23 27 августа 2019 в 01:39
У меня почему — то не отрабатывает images.upload (Делаю по инструкции docs.instantcms.ru/manual/components/api/methods/images_upload)

Делаю так:

  1. if( $curl = curl_init() ) {
  2. $POSTFIELDS = array('api_key' => 'dgsdgbdbsfbsdfbsdfb'
  3. ,'name' => new CurlFile('/upload/000/u2/e/d/c2433e23.jpg')
  4. ,'file_name' => 'My fuze file'
  5. ,'presets' => 'normal'
  6. );
  7.  
  8. curl_setopt($curl, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'] . '/.cookie');
  9. curl_setopt($curl, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'] . '/.cookie');
  10.  
  11. curl_setopt($curl, CURLOPT_URL, 'https://site.com/api/method/images.upload');
  12. curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);//для возврата результата в виде строки, вместо прямого вывода в браузер
  13. curl_setopt($curl, CURLOPT_POST, true);
  14. curl_setopt($curl, CURLOPT_POSTFIELDS, $POSTFIELDS);
  15. $out = curl_exec($curl);
  16. print_r($out);
  17. curl_close($curl);
  18. }
  19.  
  20. $out_obj = json_decode($out,true);
  21. print_r($out_obj);

В результате ничего не происходит. Ни ошибки, ни сообщения с пресетами. Ничего.
Что не так делаю? Почему $out_obj пустая?
#24 27 августа 2019 в 09:01
А кто разрабатывал этот api. Есть шанс что он подскажет?
А то столько времени на это убил, а получается зря.

P.S. попробовал сломать файл api_images_upload.php но даже со сломанным нет никаких ошибок. Что-то не отрабатывает?
#25 27 августа 2019 в 10:47

Что не так делаю? Почему $out_obj пустая?

vladimird
Стоит просто включить подробный лог CURL для отладки чтобы посмотреть ваши запросы и ответы, так врядли вам кто то ответит. метод рабочий.
#26 27 августа 2019 в 11:46

Что-то не отрабатывает?

vladimird
Всё.



  1. // Предполагается, что после авторизации вы где-то запомнили эту куку, например в БД
  2. $cookie = ['Cookie: ' . $api_session_name . '=' . $api_session_id]
  3.  
  4. $curl = curl_init();
  5. curl_setopt($curl, CURLOPT_HTTPHEADER, ['Cookie: ' . implode('; ', $cookie)]);
  6. curl_setopt($curl, CURLOPT_URL, 'https://site.com/api/method/images.upload');
  7. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  8. curl_setopt($curl, CURLOPT_HEADER, false);
  9. curl_setopt($curl, CURLOPT_TIMEOUT, 5);
  10. curl_setopt($curl, CURLOPT_POSTFIELDS, array(
  11. 'api_key' => 'API_KEY',
  12. 'name' => 'attach_name',
  13. 'attach_name' => new CURLFile('Полный путь от корня файловой системы')
  14. ));
  15.  
  16. $data = json_decode(curl_exec($curl), true);
  17.  
  18. curl_close($curl);
  19.  
  20. if ($data === false) {
  21. $error = json_last_error_msg();
  22. }
#27 27 августа 2019 в 12:09
ребят. точно так и есть.

Основная проблема была как раз в "Полный путь от корня файловой системы".

и в этом было недопонимание:
'name' => 'attach_name',
'attach_name' => new CURLFile('Полный путь от корня файловой системы')

Я писал сразу
'name' => new CURLFile('Полный путь от корня файловой системы')
и получал ещ одну ошибку.
Теперь просто бомба. Наконец-то получилось передать картинку на другой сайт.

Преклоняюсь перед вашим великодушием и терпением. Спасибо!
#28 27 августа 2019 в 12:12
Кстати, может это и в документации как-то дополнить?
А то там сейчас docs.instantcms.ru/manual/components/api/methods/images_upload так:
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, ['name' => new CurlFile($path_to_file)]);
Это видимо и сбило меня с толку. Хотя склонен грешить на свою неопытность.
#29 10 мая 2020 в 19:23


Где еще я должен авторизоваться?

vladimird

тут скорее всего не где а как, ваш скрипт не работает с кукисами, если скрипт работает на curl добавьте поддержку кукисов в нем и сохраните их на диск после чего все будет работать.

примерно вот так можно
  1.  
  2. $ckfile = tempnam ("/tmp", "CURLCOOKIE");
  3. Создаем файл кукисов в папке /tmp
  4.  
  5. $ch = curl_init ("http://uri.com/");
  6. curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
  7. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
  8. $output = curl_exec ($ch);
  9.  

maxisoft

Столкнулся со схожей проблемой: регистрирую пользователя успешно через auth.signup. Затем хочу присвоить определенную группу этому пользователю (users.add_to_groups), и вот тут ошибка 71. При этом key и sig переданы корректные, новый user_id тоже.

Подскажите, куда копать?
#30 11 мая 2020 в 02:48

Столкнулся со схожей проблемой: регистрирую пользователя успешно через auth.signup. Затем хочу присвоить определенную группу этому пользователю (users.add_to_groups), и вот тут ошибка 71. При этом key и sig переданы корректные, новый user_id тоже.

Подскажите, куда копать?

@dominanta

Users.add_to_group — это админский экшн, нужна авторизация под админом. А вот для автоматического назначения группы пользователю после регистрации, настраивается в админке CMS. Доп. запрос тут делать не нужно.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.