Частные объявления

API3 Накопителя. Протокол SOAP

API доступно по адресу: http://api3.nako-reactor.ru/soap/

WSDL находится здесь: http://api3.nako-reactor.ru/soap/?wsdl

Кодировка по-умолчанию: UTF-8.

На данный момент поддерживаются следующие методы:

  • array status(terminal_id, code) - получение статуса терминала.
  • array region(terminal_id, code, id) - получение списка дочерних регионов по отношению к указанному.
  • array region_path(terminal_id, code, id) - получение пути к указанному региону.
  • array category(terminal_id, code, id) - получение списка дочерних категорий по отношению к указанной.
  • array category_path(terminal_id, code, id) - получение пути к указанной категории.
  • array form(terminal_id, code, category_id, type, detail) - получение элементов формы выбранной категории и типа формы.
  • array add(terminal_id, code, category_id, region_id, contact, is_paid, ad_data, ad_files) - добавление объявления.
  • array search(terminal_id, code, category_id, region_id, keywords, search_params, only_paid, deep_search, detail, limit, offset, sort) - получение списка объявлений по заданным параметрам поиска.
  • integer search_count(terminal_id, code, category_id, region_id, keywords, search_params, only_paid) - получение количества объявлений по заданным параметрам поиска.
  • array search_quick(terminal_id, code, region_id, category_id, tag_id, keywords, only_paid, deep_search, detail, limit, offset) - быстрый поиск объявлений по ключевым словам.
  • array info(terminal_id, code, id) - получение информации об указанном объявлении.
  • boolean promote(terminal_id, code, id) - пометка объявления, как оплаченного.

Общая схема ответа сервера

Ответ от сервера возвращается либо в логическом типе либо в виде массива (часто содержащего вложенные массивы).

В случае серверной ошибки или при отправке неправильных данных возвращается SoapFault.

Экономия трафика

В целях экономии трафика поддерживается GZIP-сжатие SOAP-ответов. Для включения сжатия при создании SOAP-клиента необходимо указать HTTP-заголовок "Accept-Encoding: gzip". В PHP это делается так:

$client = new SoapClient($wsdl, array( 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP ) );

Готовый PHP-класс для работы с API

Чтобы вам не приходилось каждый раз заново писать класс для работы с API, мы предоставляем вам в общее пользование наш класс. Помимо основных функций, в нем есть еще и пара дополнительных, которые здорово облегчат вам жизнь.

Язык — PHP. Смотреть исходный код.

Подробное описание команд

В этом разделе параметры, отмеченные звездочкой (*) обязательны.

array status(terminal_id, code)

Возвращает информацию о том:

  • Активен ли терминал (может ли он вообще работать с системой). Зависит от того, активны ли терминал и партнер. Если хоть кто-то из них заблокирован, то терминал не активен.
  • Может ли терминал добавлять платные объявления. Зависит от активности терминала, способа оплаты и баланса. Если партнер работает по факту и терминал активен, то возможность имеется. Если партнер работает в кредит и терминал активен, то возможность имеется. Если партнер работает по предоплате и на счету еще есть предоплаченные объявления, то возможность имеется.
  • Может ли терминал добавлять бесплатные объявления. Зависит от активности терминала и способа оплаты партнера. Если партнер работает в кредит или по факту, то возможность запрещена. Может быть разрешена в исключительных случаях.
  • Может ли терминал искать бесплатные объявления. Зависит от активности терминала и способа оплаты партнера. Если партнер работает в кредит или по факту, то возможность запрещена. Может быть разрешена в исключительных случаях.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.

Возвращаемые данные

Данные возвращаются в виде обычного массива со строковыми ключами.

array(
    is_active         => (boolean)[Флаг активности терминала],
    allow_add_paid    => (boolean)[Можно добавлять платные объявления],
    allow_search_free => (boolean)[Можно искать бесплатные объявления],
    allow_add_free    => (boolean)[Можно добавлять бесплатные объявления]
);

array region(terminal_id, code, id)

Команда получает идентификатор региона и возвращает объект-массив записей о дочерних регионах.

Если дочерних регионов не было, то возвращается пустой объект-массив.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer id - идентификатор региона. Не меньше 1.

Возвращаемые данные

array(
    parent   => (array)[Текущий регион и информация о нем],
    elements => (array)[Массив дочерних регионов]
);

Каждый элемент региона из массива elements, а также сам элемент parent представляют собой массив информации о регионе:

array(
    id         => (integer)[Идентификатор региона],
    path       => (string)[Путь к региону],
    title      => (string)[Название региона],
    depth      => (integer)[Глубина региона],
    is_popular => (boolean)[Отмеченный,популярный]
);

Вам, скорее всего, потребуются только три свойства - id, title и is_popular.

Свойство is_popular означает, что регион выносится в начало списка. Например, города федерального значения. Или столица региона.

array region_path(terminal_id, code, id)

Команда получает идентификатор региона и возвращает цепочку регионов от корня до указанного.

Если указан неправильный идентификатор региона, то возвращается ошибка.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer id - идентификатор региона. Не меньше 1.

Возвращаемые данные

array(
    current  => (array)[Указанный регион],
    path => (array)[Массив дочерних регионов]
);

Каждый элемент региона из массива path, а также и объект current представляет собой следующую структуру:

array(
    id         => (integer)[Идентификатор региона],
    path       => (string)[Путь к региону],
    title      => (string)[Название региона],
    depth      => (integer)[Глубина региона],
    is_popular => (boolean)[Отмеченный,популярный]
);

Вам, скорее всего, потребуются только два свойства - id и title.

array category(terminal_id, code, id)

Команда получает идентификатор категории и возвращает массив записей о дочерних категориях.

Если дочерних категорий не было, то возвращается пустой массив.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer id - идентификатор категории. Не меньше 1.

Возвращаемые данные

array(
    parent   => (array)[Текущая категория и информация о ней],
    elements => (array)[Массив дочерних категорий]
);

Каждый элемент категории из массива elements, а также сам элемент parent представляют собой массив информации о категории:

array(
    id         => (integer)[Идентификатор категории],
    path       => (string)[Путь к категории],
    title      => (string)[Название категории],
    depth      => (integer)[Глубина категории]
);

Вам, скорее всего, потребуются только два свойства - id и title.

array category_path(terminal_id, code, id)

Команда получает идентификатор категории и возвращает цепочку категорий от корня до указанной.

Если указан неправильный идентификатор категории, то возвращается ошибка.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer id - идентификатор категории. Не меньше 1.

Возвращаемые данные

array(
    current  => (array)[Указанная категория],
    path => (array)[Массив дочерних категорий]
);

Каждый элемент категории из массива path, а также и объект current представляет собой следующую структуру:

array(
    id         => (integer)[Идентификатор категории],
    path       => (string)[Путь к категории],
    title      => (string)[Название категории],
    depth      => (integer)[Глубина категории]
);

Вам, скорее всего, потребуются только два свойства - id и title.

array form(terminal_id, code, category_id, type, detail)

Команда получает идентификатор категории, тип требуемой формы и уровень детализации и возвращает массив элементов формы со специфичными параметрами для каждого элемента (в зависимости от типа данных элемента).

Если для указанной категории не заведена форма, то ищется форма категории уровнем выше и так до тех пор, пока не найдется категория, у которой есть форма (в крайнем случае корневая категория - у нее точно есть форма).

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer id - идентификатор категории. Не меньше 1.
  • * string type - тип формы. Возможные варианты: add, search, edit.
  • integer detail - уровень детализации формы. Возможные варианты: 1, 2, 3. По-умолчанию: 2.

Возвращаемые данные

Возвращается массив, содержащий вложенный массив, описывающий поле формы. Каждый элемент возвращенного массива - это одно из полей формы.

array(
    (array)[Поле 1],
    (array)[Поле 2],
    (array)[Поле 3],
    (array)[Поле 4],
    (array)[Поле 5],
    ...
);

Каждый возвращаемый элемент (атрибут) имеет набор свойств. В зависимости от типа данных атрибута, полезными могут оказаться следующие свойства:

Целое число (integer)

array(
    attribute  => (integer)[Идентификатор атрибута],
    is_range   => (boolean)[Флаг, что атрибут является интервалом],
    solid_size => (integer)[Длина целой части],
    unit       => (string)[Единица измерения],
    title      => (string)[Название атрибута],
    type       => (string)'integer'
)

Дробное число (numeric)

array(
    attribute   => (integer)[Идентификатор атрибута],
    is_range    => (boolean)[Флаг, что атрибут является интервалом],
    solid_size  => (integer)[Длина целой части],
    frac_size   => (integer)[Длина дробной части],
    unit        => (string)[Единица измерения],
    title       => (string)[Название атрибута],
    type        => (string)'numeric'
)

Текст (text)

array(
    attribute       => (integer)[Идентификатор атрибута],
    max_text_length => (integer)[Максимальная длина текста],
    is_textarea     => (boolean)[Флаг, что следует отображать в виде TEXTAREA],
    title           => (string)[Название атрибута],
    type            => (string)'text'
)

Дата (date)

array(
    attribute  => (integer)[Идентификатор атрибута],
    is_range   => (boolean)[Флаг, что атрибут является интервалом],
    title      => (string)[Название атрибута],
    type       => (string)'date'
)

Логический (boolean)

array(
    attribute  => (integer)[Идентификатор атрибута], 
    title      => (string)[Название атрибута],
    type       => (string)'boolean'
)

Список (list)

array(
    attribute      => (integer)[Идентификатор атрибута],
    is_multiselect => (boolean)[Флаг, что атрибут является интервалом],
    title          => (string)[Название атрибута],
    type           => (string)'list',
    elements       => (array)[Список вариантов значений спискового атрибута]
}

В объекте elements содержится список вариантов значения для выпадающего списка. Каждый элемент вариантов значений спискового атрибута состоит из следующих полей:

array(
    label      => (string)[Название элемента],
    value      => (integer)[Значение элемента],
    is_popular => (boolean)[Отмеченный]
)

Внимание: при отрисовке поля формы <SELECT> необходимо указывать имя поля с квадратными скобками (массив) - data-32[].

Поле is_popular означает, что это свойство специально выносится в начало списка. Например, самые популярные производители из всего числа производителей.

Описание свойств

is_range - означает, что элемент формы представляет собой интервал из минимального и максимального значений. Поэтому, в случае, если is_range равен true, необходимо отрисовывать не одно поле формы, а два. С именами data-NN-min и data-NN-max, где NN - идентификатор атрибута. Может использоваться в атрибутах типа integer, numeric, date.

solid_size - означает максимальную длину целой части значения. Например, атрибут Год может быть длиной не больше 4 символов. Если значение не указано либо равно 0, то проверять длину целой части не нужно. В интерфейсе желательно проводить проверку. Но в любом случае проверка выполняется также и в API и лишние символы обрезаются. Может использоваться в атрибутах типа integer, numeric.

frac_size - означает максимальную длину дробной части значения. Например, дробная часть атрибута Цена может быть длиной не больше 2 символов (копейки). Если значение не указано либо равно 0, то проверять длину дробной части не нужно. В интерфейсе желательно проводить проверку. Но в любом случае проверка выполняется также и в API и лишние символы обрезаются. Может использоваться в атрибутах типа integer, numeric.

max_text_length - максимальная длина текстового поля. Если не указана, то длина текста не ограничена. По этому параметру можно также определять и атрибут size тега <input>, чтобы для текстовых строк с максимальной длиной в 5 символов не выводить текстовое поле длиной 60 символов. Но, если максимальная длина указана как 500 символов, то не устанавливайте атрибут size="500". Может использоваться в атрибутах типа text.

is_multiselect - означает, что в выпадающем списке можно выбрать несколько значений, удерживая при щелчке по элементам клавишу CTRL. Соответственно, не забывайте о том, чтобы для тега <select> в этом случае нужно установить атрибут multiple, который позволяет выбирать несколько элементов, а также атрибут size="N", который меняет вид выпадающего списка, делая его не однострочным, а в несколько строк. К примеру, для N можно выбрать значение 5. Может использоваться в атрибутах типа list.

array add(terminal_id, code, category_id, region_id, contact, is_paid, ad_data, ad_files)

Команда получает данные и добавляет их в базу данных. Возвращает идентификатор объявления и код доступа к нему.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer category_id - идентификатор категории. Не меньше 1.
  • * integer region_id - идентификатор региона. Не меньше 1.
  • * string contact - контактная информация (максимум 150 символов).
  • * boolean is_paid - флаг "оплаченное объявление" (для партнеров, работающих в кредит или по предоплате).
  • * array ad_data - значения полей формы для добавления в массиве с текстовыми ключами в формате data-XX[-min|-max]. XX - номер атрибута из формы. Поля могут иметь следующие имена: data-XX-min (для минимального значения), data-XX-max (для максимального значения), data-XX (для единичного значения).
  • * array ad_files - массив файлов. Каждый элемент массива описывает один файл. Элемент состоит из двух ключей: 'content-type' и 'content'. Поле 'content-type' не обязательно. В поле 'content' находится содержимое файла с изображением в формате base64 (т.е. зашифровано). Поддерживаемые типы файлов на данный момент: jpg, gif, png. Максимальное число загружаемых файлов — 10.

Возвращаемые данные

array(
    id         => (integer)[Идентификатор объявления],
    code       => (string)[Код объявления]
)

array search(terminal_id, code, category_id, region_id, keywords, search_params, only_paid, deep_search, detail, limit, offset, sort)

Команда получает данные для поиска и возвращает результат поиска объявлений. Если успешно, возвращается список найденных объявлений в виде текстовых записей.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer category_id - идентификатор категории. Не меньше 1.
  • * integer region_id - идентификатор региона. Не меньше 1.
  • * string keywords - ключевые слова (не используется).
  • * array search_params - значения полей формы для добавления с текстовыми индексами в формате data-XX[-min|-max]. XX - номер атрибута из формы. Поля могут иметь следующие имена: data-XX-min (для минимального значения), data-XX-max (для максимального значения), data-XX (для единичного значения).
  • * boolean only_paid - искать только оплаченные объявления.
  • * boolean deep_search - Флаг того, что искать нужно не только в указанной категории, но и во всех дочерних категориях. Если установлено в 1, то ищет во всех дочерних категориях. Внимание: при использовании данной функции при расширенном поиске (при заполненой форме с параметрами) качество результата не гарантируется, т.к. для каждой категории существует свой набор поисковых атрибутов и они могут не пересекаться.
  • * boolean detail - вместо сокращенной формы объявлений возвращать их в полной форме (как результат функции info(...)). В этом случае максимальное количество возвращаемых объявлений не превышает 20.
  • * integer limit - количество возвращаемых объявлений. 1..100
  • * integer offset - смещение в результатах поиска. 0..
  • * array sort - массив вариантов сортировки результатов поиска. Должен передаваться одномерный массив со строковым значением: array('price') или array('date'). По-умолчанию сортировка по дате.

Возвращаемые данные

array(
    (array)[Объявление],
    (array)[Объявление],
    (array)[Объявление],
    (array)[Объявление],
    (array)[Объявление],
    (array)[Объявление],
    ...
)

Структура отдельного объекта объявления:

array(
    id             => (integer)[Идентификатор объявления],
    text           => (string)[Текст объявления (параметры)],
    text_region    => (string)[Текстовое представление региона],
    text_category  => (string)[Текстовое представление категории],
    contact        => (string)[Контактная информация],
    date           => (string)[Дата создания в формате YYYY-MM-DD HH:MM:SS.MS],
    is_free        => (boolean)[Флаг "Бесплатное объявление"]
)

integer search_count(terminal_id, code, category_id, region_id, keywords, search_params, only_paid, deep_search)

Команда получает данные для поиска и возвращает количество объявлений, которое подходит под указанные параметры.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer category_id - идентификатор категории. Не меньше 1.
  • * integer region_id - идентификатор региона. Не меньше 1.
  • * string keywords - ключевые слова (не используется).
  • * array search_params - значения полей формы для добавления с текстовыми индексами в формате data-XX[-min|-max]. XX - номер атрибута из формы. Поля могут иметь следующие имена: data-XX-min (для минимального значения), data-XX-max (для максимального значения), data-XX (для единичного значения).
  • * boolean only_paid - искать только оплаченные объявления.
  • * boolean deep_search - Флаг того, что искать нужно не только в указанной категории, но и во всех дочерних категориях. Если установлено в 1, то ищет во всех дочерних категориях. Внимание: при использовании данной функции при расширенном поиске (при заполненой форме с параметрами) качество результата не гарантируется, т.к. для каждой категории существует свой набор поисковых атрибутов и они могут не пересекаться.

Возвращаемые данные

(integer)

array search_quick(terminal_id, code, region_id, category_id, tag_id, keywords, only_paid, deep_search, detail, limit, offset)

Команда получает данные для поиска и возвращает результат поиска объявлений. Если успешно, возвращается список найденных объявлений в виде текстовых записей.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer region_id - идентификатор региона.
  • * integer category_id - идентификатор категории.
  • * integer tag_id - идентификатор тега.
  • * string keywords - контактная информация.
  • * boolean only_paid - искать только оплаченные объявления.
  • * boolean deep_search - Флаг того, что искать нужно не только в указанной категории, но и во всех дочерних категориях. Если установлено в 1, то ищет во всех дочерних категориях. Внимание: при использовании данной функции при расширенном поиске (при заполненой форме с параметрами) качество результата не гарантируется, т.к. для каждой категории существует свой набор поисковых атрибутов и они могут не пересекаться.
  • * boolean detail - вместо сокращенной формы объявлений возвращать их в полной форме (как результат функции info(...)). В этом случае максимальное количество возвращаемых объявлений не превышает 20.
  • * integer limit - количество возвращаемых объявлений. 1..100
  • * integer offset - смещение в результатах поиска. 0..

Теги

Теги представляют из себя метки для категорий, которые могут объединять категории по типу.

Существующие метки:

  • куплю (значение 1)
  • продаю (значение 2)
  • сниму (значение 3)
  • сдам (значение 4)
  • требуется (значение 5)
  • ищу работу (значение 6)
  • отдам (значение 7)

Используя теги можно производить быстрый поиск по нескольким категориям.

Возвращаемые данные

array(
	'total' => (integer)[Общее количество найденных объявлений],
	'elements' => array(
		(array)[Объявление],
		(array)[Объявление],
		(array)[Объявление],
		(array)[Объявление],
		(array)[Объявление],
		(array)[Объявление],
		...
	)
)

Структура отдельного объекта объявления:

array(
    id             => (integer)[Идентификатор объявления],
    text           => (string)[Текст объявления (параметры)],
    is_free        => (boolean)[Флаг "Бесплатное объявление"]
)

При установке флага detail в значение 1 объявления будут возвращаться в таком же формате, в каком их возвращает функция info(...).

array info(terminal_id, code, id)

Команда получает идентификатор объявления и возвращает массив информации об указанном объявлении.

Если объявление имеет статус бесплатного, а партнеру запрещен доступ к бесплатным данным (большинство партнеров, работающих в оффлайне в кредит или по предоплате), то возвращается ошибка.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer id - идентификатор объявления. Не меньше 1.

Возвращаемые данные

array(
    id             => (integer)[Идентификатор объявления],
    region         => (integer)[Идентификатор региона],
    text_region    => (string)[Название региона],
    category       => (integer)[Идентификатор категории],
    text_category  => (string)[Название категории],
    text           => (string)[Текст объявления],
    contact        => (string)[Контактная информация],
    date           => (string)[Дата создания в формате YYYY-MM-DD HH:MM:SS.MS],
    is_free        => (boolean)[Флаг бесплатного объявления],
    attributes     => (array)[Массив атрибутов объявления],
    files          => (array)[Массив файлов объявления]
)

Массив атрибутов

Массив атрибутов состоит из элементов (далее "атрибутов"), каждый из которых также является массивом.

array(
    (array)[Атрибут],
    (array)[Атрибут],
    (array)[Атрибут],
    (array)[Атрибут]
    ...
)

Каждый атрибут содержит информацию, в зависимости от типа данных атрибута:

Целое число (integer)

array(
    attribute      => (integer)[Идентификатор атрибута в системе],
    is_range       => (boolean)[Флаг, что атрибут является интервалом],
    solid_size     => (integer)[Длина целой части],
    unit           => (string)[Единица измерения],
    title          => (string)[Название атрибута],
    type           => (string)'integer',
    value          => (integer|array)[Значение атрибута]
)

Значение атрибута может быть объектом, если атрибут имеет свойство is_range. В таком случае оно будет состоять из двух элементов:

array(
    min       => (integer)[Минимальное значение],
    max       => (integer)[Максимальное значение]
)

Дробное число (numeric)

array(
    attribute      => (integer)[Идентификатор атрибута в системе],
    is_range       => (boolean)[Флаг, что атрибут является интервалом],
    solid_size     => (integer)[Длина целой части],
    frac_size      => (integer)[Длина дробной части],
    unit           => (string)[Единица измерения],
    title          => (string)[Название атрибута],
    type           => (string)'numeric',
    value          => (integer|array)[Значение атрибута]
)

Значение атрибута может быть объектом, если атрибут имеет свойство is_range. В таком случае оно будет состоять из двух элементов:

array(
    min       => (float)[Минимальное значение],
    max       => (float)[Максимальное значение]
)

Текст (text)

array(
    attribute      => (integer)[Идентификатор атрибута в системе],
    max_text_length => (integer)[Максимальная длина текста],
    title          => (string)[Название атрибута],
    type           => (string)'text',
    value          => (string)[Значение атрибута]
)

Дата (date)

array(
    attribute      => (integer)[Идентификатор атрибута в системе],
    is_range       => (boolean)[Флаг, что атрибут является интервалом],
    title          => (string)[Название атрибута],
    type           => (string)'date',
    value          => (string|array)[Значение атрибута]
)

Значение атрибута может быть объектом, если атрибут имеет свойство is_range. В таком случае оно будет состоять из двух элементов:

array(
    min       => (string)[Минимальное значение],
    max       => (string)[Максимальное значение]
)

Логический

array(
    attribute      => (integer)[Идентификатор атрибута в системе],
    title          => (string)[Название атрибута],
    type           => (string)'boolean',
    value          => (boolean)[Значение атрибута]
)

Список

array(
    attribute      => (integer)[Идентификатор атрибута в системе],
    is_multiselect => (boolean)[Флаг мультивыбора],
    title          => (string)[Название атрибута],
    type           => (string)'list',
    value          => (array)[Массив значений атрибута]
)

Каждый элемент вариантов значений спискового атрибута состоит из следующих полей:

array(
    label          => (string)[Название элемента],
    value          => (integer)[Значение элемента]
)

Массив файлов

Массив файлов состоит из элементов, каждый из которых также является массивом.

array(
    (array)[Файл],
    (array)[Файл],
    ...
)

Каждый элемент файла содержит в свою очередь массив информации о файле:

array(
    type          => (string)[MIME-тип файла],
    path          => (string)[URL файла]
)

MIME-тип может быть как image/jpeg, image/png, image/gif, так в будущем могут быть и другие типы.

URL файла, это поле, содержащее полный путь к файлу.

boolean promote(terminal_id, code, id)

Команда получает идентификатор объявления и отмечает его оплаченным. При этом в зависимости от способа оплаты партнера выполняет соответствующие действия.

Выполняемые действия в зависимости от способа оплаты:

  • По факту - исполнение команды запрещено.
  • В кредит - меняется счет партнера (увеличивается его задолженность).
  • Предоплата - если у партнера еще есть на счету предоплаченные объявления, то счет уменьшается на 1. Если нет, то возвращается ошибка.

Входящие данные

  • * integer terminal_id - идентификатор терминала. Не меньше 1.
  • * string code - код доступа к терминалу.
  • * integer id - идентификатор объявления. Не меньше 1.

Возвращаемые данные

В случае успеха возвращается true.