Документация Sitebill API PHP SDK
Оглавление
- Введение
- Установка
- Быстрый старт
- Аутентификация
- Методы SDK
- Работа с моделями (Model API)
- Работа с пользователями (User API)
- Работа с профилями (Profile API)
- Работа с загрузками файлов (Uploads API)
- Работа с комментариями (Comment API)
- Работа с бронированием (Reservation API)
- Работа с поиском (MySearch API)
- Работа со списками памяти (MemoryList API)
- Работа со слоями (Layers API)
- Работа с конфигурацией (Config API)
- Работа со статистикой (Stat API)
- Регистрация (Register API)
- Обработка ошибок
- Примеры использования
Введение
Sitebill API PHP SDK — это библиотека для взаимодействия с REST API системы управления контентом Sitebill. SDK предоставляет простой объектно-ориентированный интерфейс для выполнения операций CRUD (Create, Read, Update, Delete) над данными, управления пользователями, файлами и другими сущностями системы.
Основные возможности:
- Аутентификация через OAuth
- Работа с моделями данных (CRUD операции)
- Управление пользователями и профилями
- Загрузка файлов
- Работа с комментариями
- Система бронирования
- Расширенный поиск
- Работа с конфигурацией
- Статистика
Установка
Требования
- PHP 5.6 или выше
- Расширение cURL
- Доступ к серверу Sitebill с включенным API
Способ 1: Скачивание из репозитория
git clone https://github.com/rumantic/sitebill_api_php_sdk.git
cd sitebill_api_php_sdkСпособ 2: Прямое подключение
Скачайте файл sitebill_sdk.php и подключите его в вашем проекте:
require_once 'path/to/sitebill_sdk.php';
Быстрый старт
Инициализация и подключение
<?php require_once 'sitebill_sdk.php'; // Инициализация SDK $api = new Sitebill_SDK( 'http://your-domain.com/apps/api/rest.php', // URL API endpoint 'admin', // Логин 'password' // Пароль ); // Подключение к API if ($api->connect()) { echo "Успешное подключение!\n"; } else { echo "Ошибка подключения\n"; }
Простой пример работы
// Создание новой записи $data = [ 'topic_id' => 1, 'city_id' => 1, 'text' => 'Новое объявление', 'price' => 5000000 ]; $result = $api->native_insert('data', $data); $new_id = $result['data']['new_record_id']; echo "Создана запись с ID: $new_id\n"; // Загрузка записи $record = $api->load_data('data', 'id', $new_id); print_r($record); // Удаление записи $api->delete('data', 'id', $new_id);
Аутентификация
Метод connect()
Устанавливает соединение с API и получает session_key для дальнейших запросов.
$api = new Sitebill_SDK($url, $login, $password); $connected = $api->connect(); if (!$connected) { die('Не удалось подключиться к API'); }
Возвращает: bool - true при успешной аутентификации, false при ошибке
Внутренний метод get_auth($login, $password)
Получает session_key по логину и паролю. Вызывается автоматически при connect().
Параметры:
$login(string) - Логин пользователя$password(string) - Пароль
Возвращает:
[
'success' => true,
'session_key' => 'abc123...'
]Endpoint: POST /apps/api/rest.php
Параметры запроса:
[
'action' => 'oauth',
'do' => 'login',
'login' => 'admin',
'password' => 'password'
]Методы SDK
1. load_grid_columns($model_name)
Загружает список колонок для указанной модели.
Параметры:
$model_name(string) - Название модели (например, 'data', 'user', 'page')
Возвращает: array - Массив с описанием колонок модели
Пример:
$columns = $api->load_grid_columns('data'); print_r($columns);
Ответ:
[
'state' => 'success',
'columns' => [
[
'name' => 'id',
'type' => 'primary_key',
'title' => 'ID',
...
],
[
'name' => 'text',
'type' => 'textarea',
'title' => 'Описание',
...
]
]
]2. native_insert($model_name, $ql_items)
Добавляет новую запись в таблицу модели.
Параметры:
$model_name(string) - Название модели$ql_items(array) - Ассоциативный массив значений полей
Возвращает: array - Результат операции с ID новой записи
Пример:
$data = [ 'topic_id' => 6162, // Тип недвижимости 'city_id' => 1, // Город 'street_id' => 100, // Улица 'text' => 'Продается квартира', 'price' => 10000000, 'square_all' => 75.5, 'floor' => 5, 'room_count' => 3 ]; $result = $api->native_insert('data', $data); if ($result['state'] == 'success') { $new_id = $result['data']['new_record_id']; echo "Создана запись ID: $new_id\n"; }
Ответ:
[
'state' => 'success',
'data' => [
'new_record_id' => 12345
]
]3. load_data($model_name, $primary_key, $key_value)
Загружает данные одной записи из таблицы.
Параметры:
$model_name(string) - Название модели$primary_key(string) - Имя первичного ключа (обычно 'id')$key_value(int) - Значение первичного ключа
Возвращает: array - Полные данные записи со всеми полями
Пример:
$record = $api->load_data('data', 'id', 12345); if ($record['state'] == 'success') { echo "Цена: " . $record['data']['price']['value'] . "\n"; echo "Описание: " . $record['data']['text']['value'] . "\n"; }
Структура ответа:
[
'state' => 'success',
'id' => 12345,
'primary_key' => 'id',
'table_name' => 'data',
'data' => [
'id' => [
'name' => 'id',
'value' => 12345,
'title' => 'ID',
'type' => 'primary_key'
],
'text' => [
'name' => 'text',
'value' => 'Продается квартира...',
'title' => 'Описание',
'type' => 'textarea'
],
'price' => [
'name' => 'price',
'value' => 10000000,
'title' => 'Цена',
'type' => 'text'
]
]
]4. delete($model_name, $primary_key, $key_value)
Удаляет запись из таблицы.
Параметры:
$model_name(string) - Название модели$primary_key(string) - Имя первичного ключа$key_value(int) - Значение первичного ключа
Возвращает: array - Результат операции
Пример:
$result = $api->delete('data', 'id', 12345); if ($result['state'] == 'success') { echo "Запись успешно удалена\n"; }
Ответ:
[
'state' => 'success',
'message' => 'Record deleted'
]Работа с моделями (Model API)
API для работы с моделями предоставляет расширенные возможности управления данными.
Endpoint: action=model
Доступные методы (параметр do):
1. get_models
Получает список всех моделей в системе.
Запрос:
POST /apps/api/rest.php action=model do=get_models session_key=xxx
Ответ:
[
['id' => 1, 'name' => 'data'],
['id' => 2, 'name' => 'user'],
['id' => 3, 'name' => 'page']
]2. get_models_list
Получает расширенный список моделей с описаниями.
Ответ:
[
'status' => 'success',
'message' => 'models loaded',
'data' => [
[
'id' => 1,
'name' => 'data',
'description' => 'Объявления'
],
[
'id' => 2,
'name' => 'user',
'description' => 'Пользователи'
]
]
]3. load_config
Загружает публичную конфигурацию системы.
Ответ:
[
'state' => 'success',
'data' => [
'site_title' => 'Мой сайт',
'site_url' => 'http://example.com',
'languages' => ['ru', 'en', 'tj'],
'apps.mailbox.complaint_mode_variants' => [
'spam' => 'Спам',
'fraud' => 'Мошенничество'
]
]
]4. load_only_model
Загружает структуру модели без данных.
Параметры:
model_name- название модели
Ответ:
[
'state' => 'success',
'columns' => [...],
'columns_index' => [...],
'data' => [...],
'tabs' => [...]
]5. load_data
Загружает данные записи с проверкой прав доступа.
Параметры:
model_name- название моделиprimary_key- имя первичного ключаkey_value- значение ключаentity_uri(опционально) - URI сущностиql_items(опционально) - массив для фильтрации полей
Пример с фильтрацией полей:
POST /apps/api/rest.php action=model do=load_data model_name=data primary_key=id key_value=100 ql_items[text]=1 ql_items[price]=1
Вернет только поля text и price.
6. graphql_update
Обновляет только указанные поля записи (GraphQL-стиль).
Параметры:
model_name- название моделиkey_value- ID записиql_items- массив полей для обновленияonly_ql(optional) - если true, обновляет только указанные поля
Пример:
$params = [ 'action' => 'model', 'do' => 'graphql_update', 'model_name' => 'data', 'key_value' => 100, 'ql_items' => [ 'price' => 15000000, 'active' => 1 ], 'only_ql' => true ];
JavaScript пример:
$.ajax({ url: '/apps/api/rest.php', data: { action: 'model', do: 'graphql_update', model_name: 'data', only_ql: true, key_value: 100, ql_items: { active: 0 } }, type: 'post', success: function(response) { console.log(response); } });
7. native_insert
Создает новую запись с валидацией и обработкой зависимых полей.
Дополнительные возможности:
- Автоматическое создание URI из заголовка
- Обработка geodata (координат)
- Загрузка связанных данных
Пример:
POST /apps/api/rest.php action=model do=native_insert model_name=data ql_items[topic_id]=6162 ql_items[city_id]=1 ql_items[text]=Новое объявление ql_items[price]=5000000 ql_items[geo][lat]=38.5598 ql_items[geo][lng]=68.7738
8. load_grid_columns
Загружает описание колонок для отображения в таблице.
Ответ:
[
'state' => 'success',
'columns' => [
[
'name' => 'id',
'title' => 'ID',
'type' => 'primary_key',
'show_in_grid' => true,
'sortable' => true
]
]
]9. get_list
Получает список записей с пагинацией и фильтрацией.
Параметры:
model_name- название моделиpage- номер страницы (по умолчанию 1)per_page- записей на страницу (по умолчанию 20)filter- массив фильтровsort_by- поле сортировкиsort_order- порядок (ASC/DESC)
Пример:
POST /apps/api/rest.php action=model do=get_list model_name=data page=1 per_page=10 filter[city_id]=1 filter[price_from]=1000000 sort_by=date_added sort_order=DESC
Ответ:
[
'state' => 'success',
'data' => [
['id' => 100, 'text' => '...', 'price' => 5000000],
['id' => 101, 'text' => '...', 'price' => 6000000]
],
'pagination' => [
'total' => 150,
'per_page' => 10,
'current_page' => 1,
'total_pages' => 15
]
]Работа с пользователями (User API)
Endpoint: action=user
1. register
Регистрация нового пользователя.
Параметры:
login- логинpassword- парольemail- emailfio- ФИОphone- телефон
Пример:
POST /apps/api/rest.php action=user do=register login=newuser password=secret123 email=user@example.com fio=Иван Иванов phone=+992000000000
2. get_user_info
Получить информацию о текущем пользователе.
Ответ:
[
'state' => 'success',
'user_id' => 5,
'login' => 'admin',
'email' => 'admin@example.com',
'fio' => 'Администратор',
'user_group_id' => 1
]3. update_profile
Обновление профиля пользователя.
Параметры:
user_id- ID пользователя- массив полей для обновления
Пример:
POST /apps/api/rest.php action=user do=update_profile user_id=5 fio=Новое имя phone=+992111111111
Работа с профилями (Profile API)
Endpoint: action=profile
1. load_profile
Загрузка данных профиля.
Параметры:
user_id- ID пользователя
Ответ:
[
'state' => 'success',
'data' => [
'user_id' => 5,
'fio' => 'Иван Иванов',
'phone' => '+992000000000',
'company' => 'ООО "Компания"',
'address' => 'г. Душанбе'
]
]Работа с загрузками файлов (Uploads API)
Endpoint: action=uploads
1. upload_file
Загрузка файла на сервер.
Параметры:
file- файл (POST multipart/form-data)model_name- модель для привязкиrecord_id- ID записи
Пример с cURL:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://example.com/apps/api/rest.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, [ 'action' => 'uploads', 'do' => 'upload_file', 'session_key' => $session_key, 'model_name' => 'data', 'record_id' => 100, 'file' => new CURLFile('/path/to/image.jpg') ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch);
Ответ:
[
'state' => 'success',
'file_id' => 456,
'file_name' => 'image.jpg',
'file_url' => '/img/data/image.jpg'
]2. delete_file
Удаление файла.
Параметры:
file_id- ID файла
3. get_files
Получить список файлов записи.
Параметры:
model_name- модельrecord_id- ID записи
Ответ:
[
'state' => 'success',
'files' => [
[
'id' => 456,
'name' => 'image.jpg',
'url' => '/img/data/image.jpg',
'size' => 102400
]
]
]Работа с комментариями (Comment API)
Endpoint: action=comment
1. add_comment
Добавить комментарий.
Параметры:
model_name- модельrecord_id- ID записиtext- текст комментарияparent_id(optional) - ID родительского комментария
Пример:
POST /apps/api/rest.php action=comment do=add_comment model_name=data record_id=100 text=Отличное предложение!
2. get_comments
Получить список комментариев.
Параметры:
model_name- модельrecord_id- ID записи
Ответ:
[
'state' => 'success',
'comments' => [
[
'id' => 1,
'user_id' => 5,
'user_name' => 'Иван',
'text' => 'Отличное предложение!',
'date_added' => '2024-01-15 10:30:00',
'replies' => []
]
]
]Работа с бронированием (Reservation API)
Endpoint: action=reservation
1. create_reservation
Создать бронирование.
Параметры:
record_id- ID объектаdate_from- дата началаdate_to- дата окончанияclient_name- имя клиентаclient_phone- телефон
2. get_reservations
Получить список бронирований.
Параметры:
record_id- ID объекта
Работа с поиском (MySearch API)
Endpoint: action=mysearch
1. search
Поиск по записям.
Параметры:
model_name- модель для поискаquery- поисковый запросfilters- массив фильтров
Пример:
POST /apps/api/rest.php action=mysearch do=search model_name=data query=квартира filters[city_id]=1 filters[price_from]=1000000 filters[price_to]=10000000
Работа со списками памяти (MemoryList API)
Endpoint: action=memorylist
Сохранение временных списков (избранное, сравнение и т.д.).
1. add_to_list
Добавить элемент в список.
Параметры:
list_name- название спискаrecord_id- ID записи
2. get_list
Получить список.
Параметры:
list_name- название списка
Работа со слоями (Layers API)
Endpoint: action=layers
Управление слоями карт (для недвижимости).
Работа с конфигурацией (Config API)
Endpoint: action=config
1. get_config
Получить конфигурацию.
2. update_config
Обновить конфигурацию (требуются права администратора).
Работа со статистикой (Stat API)
Endpoint: action=stat
1. get_stats
Получить статистику.
Параметры:
model_name- модельdate_from- дата началаdate_to- дата окончания
Регистрация (Register API)
Endpoint: action=register
1. register_user
Регистрация нового пользователя с валидацией.
Обработка ошибок
Все ответы API содержат поле state или status:
Успешный ответ:
[
'state' => 'success',
'data' => [...]
]Ответ с ошибкой:
[
'state' => 'error',
'message' => 'Описание ошибки',
'error_code' => 'ERROR_CODE'
]Типичные ошибки:
| Код | Описание |
|---|---|
check_session_key_failed |
Неверный или истекший session_key |
access_denied |
Доступ запрещен |
model_not_defined |
Модель не найдена |
record_not_found |
Запись не найдена |
validation_error |
Ошибка валидации данных |
Примеры использования
Пример 1: CRUD операции с объявлениями
<?php require_once 'sitebill_sdk.php'; $api = new Sitebill_SDK( 'http://estate.sitebill.ru/apps/api/rest.php', 'admin', 'admin' ); if (!$api->connect()) { die('Ошибка подключения'); } // CREATE - Создание объявления $newAd = [ 'topic_id' => 6162, // Квартира 'city_id' => 1, // Душанбе 'street_id' => 50, 'number' => '10', 'text' => 'Продается 3-комнатная квартира', 'price' => 15000000, 'currency_id' => 1, // Сомони 'square_all' => 85.5, 'square_live' => 60, 'square_kitchen' => 12, 'floor' => 5, 'floor_count' => 9, 'room_count' => 3, 'active' => 1 ]; $result = $api->native_insert('data', $newAd); $adId = $result['data']['new_record_id']; echo "Создано объявление ID: $adId\n"; // READ - Чтение объявления $ad = $api->load_data('data', 'id', $adId); echo "Цена: " . $ad['data']['price']['value'] . "\n"; echo "Площадь: " . $ad['data']['square_all']['value'] . " м²\n"; // UPDATE - Обновление через GraphQL // (требуется прямой HTTP запрос, т.к. в SDK нет этого метода) // DELETE - Удаление $api->delete('data', 'id', $adId); echo "Объявление удалено\n";
Пример 2: Работа с пользователями
<?php // Получение списка колонок пользователей $columns = $api->load_grid_columns('user'); print_r($columns); // Загрузка данных пользователя $user = $api->load_data('user', 'user_id', 5); echo "Пользователь: " . $user['data']['login']['value'] . "\n"; echo "Email: " . $user['data']['email']['value'] . "\n";
Пример 3: Массовая загрузка объявлений
<?php require_once 'sitebill_sdk.php'; $api = new Sitebill_SDK($url, $login, $password); $api->connect(); // Массив объявлений для загрузки $ads = [ ['text' => 'Квартира 1', 'price' => 5000000], ['text' => 'Квартира 2', 'price' => 6000000], ['text' => 'Квартира 3', 'price' => 7000000], ]; $createdIds = []; foreach ($ads as $adData) { $adData['topic_id'] = 6162; $adData['city_id'] = 1; $adData['active'] = 1; $result = $api->native_insert('data', $adData); if ($result['state'] == 'success') { $createdIds[] = $result['data']['new_record_id']; echo "Создано: ID {$result['data']['new_record_id']}\n"; } else { echo "Ошибка: " . $result['message'] . "\n"; } } echo "\nВсего создано: " . count($createdIds) . " объявлений\n";
Пример 4: Поиск и фильтрация (прямой HTTP запрос)
<?php function apiRequest($url, $params) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); curl_close($ch); return json_decode($result, true); } // Получение session_key $authResult = apiRequest($apiUrl, [ 'action' => 'oauth', 'do' => 'login', 'login' => 'admin', 'password' => 'admin' ]); $sessionKey = $authResult['session_key']; // Поиск объявлений $searchResult = apiRequest($apiUrl, [ 'action' => 'model', 'do' => 'get_list', 'session_key' => $sessionKey, 'model_name' => 'data', 'filter' => [ 'city_id' => 1, 'price_from' => 1000000, 'price_to' => 10000000, 'room_count' => 3 ], 'sort_by' => 'date_added', 'sort_order' => 'DESC', 'page' => 1, 'per_page' => 10 ]); foreach ($searchResult['data'] as $ad) { echo "ID: {$ad['id']}, Цена: {$ad['price']}\n"; }
Пример 5: Загрузка изображений
<?php $apiUrl = 'http://your-domain.com/apps/api/rest.php'; $sessionKey = '...'; // получен через connect() // Загрузка файла $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, [ 'action' => 'uploads', 'do' => 'upload_file', 'session_key' => $sessionKey, 'model_name' => 'data', 'record_id' => 100, 'file' => new CURLFile('/path/to/photo.jpg', 'image/jpeg', 'photo.jpg') ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = json_decode(curl_exec($ch), true); curl_close($ch); if ($result['state'] == 'success') { echo "Файл загружен: {$result['file_url']}\n"; }
Расширенные возможности
Работа с вкладками (Tabs)
Модели могут содержать вкладки для группировки полей:
$data = $api->load_data('data', 'id', 100); $tabs = $data['tabs']; foreach ($tabs as $tabName => $tabFields) { echo "Вкладка: $tabName\n"; foreach ($tabFields as $field) { echo " - {$field['title']}: {$field['value']}\n"; } }
Работа с координатами (Geodata)
$adData = [ 'text' => 'Квартира в центре', 'price' => 10000000, 'geo' => [ 'lat' => 38.5598, 'lng' => 68.7738 ] ]; $result = $api->native_insert('data', $adData);
Мультиязычность
// Загрузка конфигурации с языками $config = apiRequest($apiUrl, [ 'action' => 'model', 'do' => 'load_config', 'session_key' => $sessionKey ]); $languages = $config['data']['languages']; // ['ru', 'en', 'tj']
Советы по использованию
-
Храните session_key в сессии: После первого подключения сохраните session_key, чтобы не аутентифицироваться при каждом запросе.
-
Проверяйте ответы: Всегда проверяйте
stateв ответе перед обработкой данных. -
Обрабатывайте ошибки: Используйте try-catch для обработки исключений сети.
-
Кэшируйте структуру моделей: Загружайте
load_grid_columnsодин раз и кэшируйте результат. -
Используйте пагинацию: При работе с большими списками используйте параметры
pageиper_page. -
Валидация на клиенте: Проверяйте данные перед отправкой на сервер.
Заключение
Sitebill API PHP SDK предоставляет мощный и гибкий инструмент для интеграции с системой Sitebill. Документация охватывает основные возможности, но система поддерживает множество дополнительных функций. Для получения полной информации о доступных методах изучите исходный код в директории /apps/api/classes/.
Полезные ссылки:
- GitHub репозиторий SDK: https://github.com/rumantic/sitebill_api_php_sdk
- Исходный код API:
/apps/api/classes/ - Документация по моделям:
/apps/api/classes/class.model.php
Версия документации: 1.0
Дата: Ноябрь 2025
Автор: Generated for Sitebill CMS