Модератор форума: JonMagon  
Сообщество uCoz » Мастерская uCoz » Использование PHP и API на uCoz » Новое uAPI (новое API для всех сайтов)
Новое uAPI
Dmitry_DM
Сообщений: 553
Репутация: 113

Сообщение # 1 | 10:43:25
Доступна новая версия PHP модуля для uAPI. Версия 2.4 от 25 октября 2017
Загрузить актуальную версию модуля можно на странице - http://api.ucoz.net/ru/manual/module


18 февраля состоялся релиз нового API для uCoz – подробнее в блоге //blog.ucoz.ru/blog/uapi/2015-02-18-367

uАPI - бесплатный дополнительный функционал для вашего сайта.

uAPI это:

4 метода передачи данных
  • GET
  • POST
  • PUT
  • DELETE


3 формата обмена данными:
  • JSON
  • XML
  • Text Plain


14 модулей:
  • Видео
  • Гостевая книга
  • Доска объявлений
  • Каталог сайтов
  • Каталог файлов
  • Каталог статей
  • Мини-чат
  • Новости сайта
  • Онлайн игры
  • Опросы
  • Пользователи
  • Форум
  • Фотоальбомы
  • FAQ



Мы хотим создать свое сообщество uAPI разработчиков и поэтому для вас 24/7 доступна uAPI Лаборатория, где можно задать абсолютно любой вопрос по разработке, документации, коду, отправить код на разработку и тд


Denfm
Сообщений: 4
Репутация: 0

Сообщение # 61 | 12:11:48
Цитата Dmitry_DM ()
Denfm, он у вас есть, смотрите внимательно. Все пользователи доступны в Панели управления: Пользователи – Список пользователей. Чтобы узнать свой ник от uAPI – сделайте get запрос на uapi/my
Действительно, есть такой логин. Но как он туда попал, если сайт был новым и от другого аккаунта?
Dmitry_DM
Сообщений: 553
Репутация: 113

Сообщение # 62 | 12:17:25
Denfm, Если на сайте нет пользователя – он его добавляет. Если он уже был бы – то не добавлял нового, а работал бы от существующего.
Запрос uAPI – происходит проверка пользователя:
1) Если его нет – добавить. Проверка его прав в веб-версии и соответствующие права устанавливаются для uAPI
2) Если пользователь есть – работает от него, существующего. Проверка права этого пользователя в веб-версии и последующая установка прав для uAPI
Denfm
Сообщений: 4
Репутация: 0

Сообщение # 63 | 14:17:27
Цитата Dmitry_DM ()
Denfm, Если на сайте нет пользователя – он его добавляет. Если он уже был бы – то не добавлял нового, а работал бы от существующего. Запрос uAPI – происходит проверка пользователя:
1) Если его нет – добавить. Проверка его прав в веб-версии и соответствующие права устанавливаются для uAPI
2) Если пользователь есть – работает от него, существующего. Проверка права этого пользователя в веб-версии и последующая установка прав для uAPI
Благодарю за ответ и пояснения. Далее сам разобрался - была включена возможность публикации новостей от любого пользователя.
Еще 1 вопрос касательно указания автора материала - в документации по АПИ указана возможность смены автора материала, но по факту что-то не получается изменить. http://api.ucoz.net/ru/manual/news/entry
K1l0
Сообщений: 104
Репутация: 26

Сообщение # 64 | 22:29:26
Доброго времени суток, подскажите:
Я доделываю возможность "быстро" редактировать материалы, суть в том, как мне через uAPI (модуль "Онлайн игры") реализовать добавление категории у материала. Как передать параметр, через какую переменную? И что отсылать, я так предполагаю что "ID" категории, которую хочу добавить.
Dmitry_DM
Сообщений: 553
Репутация: 113

Сообщение # 65 | 22:47:00
K1l0, при добавлении материала – указывайте category=ID.
Именно айди категории – да
K1l0
Сообщений: 104
Репутация: 26

Сообщение # 66 | 09:02:08
то есть в коде пишем:

Код
[s]'category' => 'АЙДИ Категории?'
Да так и пишем. Если включена возможность входа материала в несколько категорий, то перечисляем категории через запятую.

Код
'category' => '1,2,3,4,5,6,7'
Сообщение отредактировал K1l0 - Вторник, 06 Окт 2015, 14:48:48
llays
Сообщений: 12
Репутация: 0

Сообщение # 67 | 18:50:31
Когда уже обновление uApi выйдет наконец-то, уже две недели жду, чтобы исправили ошибку с тегами в каталоге файлов, которая приводит к ошибке "Доступ запрещен", при любом запросе.
Dmitry_DM
Сообщений: 553
Репутация: 113

Сообщение # 68 | 18:52:05
llays, завтра будет на s4, в течение недели + неск дней – уже на всех
Dmitry_DM
Сообщений: 553
Репутация: 113

Сообщение # 69 | 18:52:35
K1l0, про перечисление – сомневаюсь, а вот если один айди указать – да
K1l0
Сообщений: 104
Репутация: 26

Сообщение # 70 | 21:36:16
Цитата Dmitry_DM ()
про перечисление – сомневаюсь, а вот если один айди указать – да
Работает при перечислении =)
Dmitry_DM
Сообщений: 553
Репутация: 113

Сообщение # 71 | 13:57:45
Доступно обновление 19. Пока только на s4. Подробнее: http://api.ucoz.net/ru/version/update19
llays
Сообщений: 12
Репутация: 0

Сообщение # 72 | 03:30:44
Цитирую письмо на почту:
Цитата
Здравствуйте!

Пытаюсь зарегистрировать пользователя через uApi. uApi для модуля включён, новые токены сгенерированы, локальные пользователи включены. Ошибка:
Код
{"error":{"msg":"Invalid signature","code":"INVALID_SIGNATURE"}}


Пример кода:

Код
include ROOT_DIR . 'uAPImodule.php';
$parametrs = array(
'oauth_consumer_key' => $consumer_key, //обязательный параметр
'oauth_nonce' => $oauth_nonce, //обязательный параметр
'oauth_signature_method' => $sig_method, //обязательный параметр
'oauth_timestamp' => $timestamp, //обязательный параметр
'oauth_token' => $oauth_token, //обязательный параметр
'oauth_version' => $oauth_version, //обязательный параметр
'user' => 'uCozAPI',
'password' => '1234567890qwerty',
'email' => 'api@ucoz.com',
'name' => 'APIname'
);
ksort($parametrs);
echo uAPIModule('/users', 'post', $parametrs, '');


Т.е прямо из примера скопировано.
В файле uAPImodule.php:

Код
$oauth_nonce= md5(microtime().mt_rand()); //не изменять
$timestamp = time(); //не изменять
$sig_method = 'HMAC-SHA1'; //не изменять
$oauth_version = '1.0'; //не изменять
$consumer_key = 'YAMудалено';
$consumer_secret = 'удаленоzhkUtnTудалено';
$oauth_token = удаленоMn9xmz1fPz1reLc8.SKNудалено';
$oauth_token_secret = 'удаленоCQEqxT10k94удалено';
$main_url = 'http://yamудалено';


С уважением,
Андрей Лайс.
Сообщение отредактировал llays - Понедельник, 26 Окт 2015, 03:33:18
Dmitry_DM
Сообщений: 553
Репутация: 113

Сообщение # 73 | 11:51:45
llays, ответил там же
llays
Сообщений: 12
Репутация: 0

Сообщение # 74 | 01:57:46
Dmitry_DM, продолжая тот разговор:
Ошибка:
Код
{"error":{"msg":"Доступ запрещен","code":"ACCESS_DENIED"}
Фреймворк:
Код
<?php $___notjson=1; error_reporting( E_ERROR );
/*
        Версия 1.1
        Дата создания: 9 февраля 02:00
        Дата обновления 1.1: 14 июля 2015
        Информация о модуле: http://api.ucoz.net/ru/manual/module
        По всем вопросам вы можете обратиться на api@ucoz.net
*/
//setup для работы с uApi
$oauth_nonce= md5(microtime().mt_rand()); //не изменять
$timestamp = time(); //не изменять
$sig_method = 'HMAC-SHA1'; //не изменять
$oauth_version = '1.0'; //не изменять
$consumer_key = '';
$consumer_secret = '';
$oauth_token = '';
$oauth_token_secret = '';
$main_url = 'http://www.yamod.ru/uapi'; //нужно указать с http:// и с uapi. Например: http://yourwebsite.ucoz.ru/uapi

//формирование setup закончено

/*
функция для генерация подписанного запроса.
$method может принимать вид POST, GET, DELETE, PUT.
$request_url указывает куда делать запрос
$parametrs параметры к запросу
$format не поддерживается, создан для будуших доработок (todo)
*/

function uAPIModule ($request_url, $method, $parametrs, $format) {
    global $basestring, $consumer_key, $oauth_nonce, $sig_method, $timestamp, $oauth_token, $oauth_version, $hash_key, $oauth_signature, $consumer_secret, $oauth_token_secret, $main_url;

    //начинается формирование подписи для правильного запроса
$request_url = $main_url.mb_strtolower(trim($request_url));
$method = mb_strtoupper($method);
$parametrs2 = $parametrs;
$full_urlis = $main_url.$request_url;
$full_urlis = strpos($full_urlis, '/uapi/users');
if($full_urlis == '' && $method != 'POST') {
  $parametrs = str_replace('@', '', $parametrs);
}
$basestring = str_replace('+', '%20', http_build_query($parametrs));
$basestring = $method.'&'.urlencode($request_url).'&'.urlencode($basestring);
$hash_key = $consumer_secret.'&'.$oauth_token_secret;
$oauth_signature = urlencode(trim(base64_encode(hash_hmac('sha1', $basestring, $hash_key, true))));
$parametrs_forurl = http_build_query($parametrs);
$url = $request_url.'?oauth_signature='.$oauth_signature;
$url_for = $request_url.'?'.$parametrs_forurl.'&oauth_signature='.$oauth_signature;

$curl = curl_init();
switch ($method) {

    case 'GET':
      curl_setopt($curl, CURLOPT_URL, $url_for);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
      $uAPIcurlresult = curl_exec($curl);
      return $uAPIcurlresult;
    break;
  
    case 'POST':
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $parametrs2);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);      
      curl_setopt($curl, CURLOPT_VERBOSE, true);
      $uAPIcurlresult = curl_exec($curl);
      return $uAPIcurlresult;
    break;

    case 'PUT':
      $curl = curl_init($url);

      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);   
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');  
      curl_setopt($curl, CURLOPT_POSTFIELDS, $parametrs2);  
      $uAPIcurlresult = curl_exec($curl);
      return $uAPIcurlresult;
    break;

    case 'DELETE':
      curl_setopt($curl, CURLOPT_URL, $url_for);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
      $uAPIcurlresult = curl_exec($curl);
    return $uAPIcurlresult;

    break;

    default:
      echo 'Неизвестный метод передачи данных!';
    break;

    
}
    curl_close($curl);
}
?>
Скрипт:
Код
<?php $___notjson=1;
include 'uAPImodule.php';
$parametrs = array(
'oauth_consumer_key' => $consumer_key, //обязательный параметр
'oauth_nonce' => $oauth_nonce, //обязательный параметр
'oauth_signature_method' => $sig_method, //обязательный параметр
'oauth_timestamp' => $timestamp, //обязательный параметр
'oauth_token' => $oauth_token, //обязательный параметр
'oauth_version' => $oauth_version, //обязательный параметр
'user' => 'uCozAPI2   ',
  'password' => '1234567qwerty',
  'email' => 'api@ucoz.com',
  'name' => 'APIname'
);
ksort($parametrs);
$users =  uAPIModule('/users', 'post', $parametrs, '');

var_dump($users);
?>

Пробовал и http://www.yamod.ru/uapi, и http://www.yamod.ru/uapi/, и http://yamod.ru/uapi, и http://yamod.ru/uapi/. Токены подставлял свежие.
Сообщение отредактировал llays - Вторник, 08 Дек 2015, 01:58:31
Dmitry_DM
Сообщений: 553
Репутация: 113

Сообщение # 75 | 13:06:48
llays, у вас на ювебе довольно таки старый код почему-то.. выясняю у коллег
Сообщество uCoz » Мастерская uCoz » Использование PHP и API на uCoz » Новое uAPI (новое API для всех сайтов)
Поиск: