API REST v2.0

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (10)

просмотр истории страницы

Некоторые готовые примеры работы с API с помощью Python вы можете посмотреть здесь: [github|https://github.com/carbonsoft/rest_api_example]
{warning:title=Очень Важно!}При выполнении API-запроса к серверу, происходит формирование задачи для изменения записей в БД, а не моментальное исполнение требуемых действий.
Поэтому, будьте внимательны, когда делаете запрос к большому количеству записей(массовое изменение NAS и т.д), требуется подождать некоторое время (10-30 минут) для завершения заданий, и после этого можете приступать к новым запросам. Иначе, могут возникнуть наложения действий со следующим запросов и начальный запрос выполнится некорректно. {warning}

h3. Абоненты
curl -XPOST -d 'method1=objects.get&arg1={"id":"1321"}&method2=set&arg2={"tarif_next_id":"1119","tarif_next_date":"2016-05-26"}&method3=save&arg3={}' http://<ip-биллинга>:8082/rest_api/v2/Abonents/ -D
{code}
# h5. Запланировать переход абонентов с тарифа с id 1127 на тариф с id 1132 на 2021-03-01
{code}sqlexec "set list on; select distinct id from abonents where tarif_id=1127" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"tarif_next_id":"1132","tarif_next_date":"2021-03-01"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -; done{code}
# h5. Создание абонента и добавление ему учетной записи
1. Создаем абонента abonent с тарифом Основной(id=1) в группе Все (id=1)
{code}
Пароль при этом генерирует биллинг.
# h5. Скрипт для создания абонента и учетной записи. Создаёт абонента в папке "Все" с именем "ФИО1", номером договора TEST_API1, тарифом с id=1, балансом 10, логином abonent2, паролем 1234
{code}
#!/bin/bash
curl -XPOST -d 'method1=objects.create&arg1={"name":"ФИО1", "parent_id":1, "tarif_id":1, "contract_number":"TEST_API1"}&method2=add_payment&arg2={"SUM_IN": "10"}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -
sqlexec "set list on; select id from abonents where contract_number='TEST_API1'" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.create&arg1={"abonent_id":'$line', "login":"abonent2"}&method2=set_password&arg2={"psw":"1234","dontshow":false}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done
{code}
# h5. Сделать приход 10 рублей абоненту с номером договора BILL0000021
{code}curl -XPOST -d 'method1=objects.get&arg1={"contract_number": "BILL0000021"}&method2=add_payment&arg2={"SUM_IN": "10"}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -{code}
curl -XPOST -d 'method1=objects.get&arg1={"id":"101"}&method2=set&arg2={"push_token":"123456"}&method3=save&arg3={}'' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -
{code}
# h5. Перерасчетать абонента начиная с выбранного периода (обязательно указывать первое число месяца\!)
Перерасчет абонента с ID 1392 с июня 2019 года
{code}curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.get&arg1={"id":"1392"}&method2=set&arg2={"need_recalc":"2019-06-01"}&method3=save&arg3={}'{code}
# h5. Получение данных об операторе, обслуживающем абонента
{code}curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.filter&arg1={"id":1111}&fields=["operator"]'{code}
# h5. Отключение автоплатежа
{code}curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.get&arg1={"id":"1385"}&method2=set&arg2={"autopay_pay_log_id":null}&method3=save&arg3={}'{code}

h3. Реквизиты
*14* - id реквизита паспорт серия
*1363* - id абонента
# h5. Удалить все незаполненные реквизиты у абонентов
{code}sqlexec "set list on; select id from attribute_values where coalesce(attribute_value,'')=''" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=delete' http://169.254.80.82:8082/rest_api/v2/AttributeValues/ -D - ; done {code}

h3. Учётные записи
В примере: массовое удаление [автоматический подключенных обещанных платежей по льготному периоду|CarbonBilling:Льготный период оплаты]
{code}sqlexec "set heading off; select id from users_usluga where comment like 'Автоматический%предоплате%2017-12-31%'" | sed '/^$/d' | sed 's/ *//g' | while read -r uusligaid; do echo "$uusligaid"; curl -XPOST -d 'method1=objects.get&arg1={"id":"$uusligaid"}&method2=delete' http://169.254.80.82:8082/rest_api/v2/UsersUsluga/ -D -; done{code}
# h5. Привязать услугу с id 105 к оператору связи с id 3
{code}
curl -XPOST -d 'method1=objects.get&arg1={"id":"105"}&method2=set&arg2{"operator_id":"3"}&method3=save&arg3={}' 'http://169.254.80.82:8082/rest_api/v2/Usluga/' -D -
{code}
# h5. Назначить новую дату "Cледующего списания" по подключенной услуге 127 на 13.09.2020 у абонента 94
{code}
curl -XPOST -d 'method1=objects.get&arg1={"abonent_id":94, "usluga_id":"127"}&method2=set&arg2={"next_date":"2020-09-13 00:00:00"}&method3=save&arg3={"allow_set_none_manager":true}' http://169.254.80.82:8082/rest_api/v2/UsersUsluga/ -D -;
{code}
# h5. Удалить все версии услуги с ID 167
ID услуги указывается в переменной usluga_id в начале скрипта.
{code}
usluga_id=167; sqlexec -l "select id from usluga_history where usluga_id=$usluga_id" | awk '$2{print $2}' | while read usluga_version_id; do curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/UslugaHistory/' -d 'method1=objects.get&arg1={"id":'$usluga_version_id'}&method2=delete'; done
{code}
# h5. Назначить новую дату списания на 13.09.2020 услуге, которая имеет статус "включена" у абонента с id 9135.
{code}
sqlexec "set list on;select uu.id from users_usluga uu join abonents a on uu.abonent_id=a.id where a.id=9135 and uu.enabled=1 " | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"next_date":"2020-09-13 00:00:00"}&method3=save&arg3={"allow_set_none_manager":true}' 'http://169.254.80.82:8082/rest_api/v2/UsersUsluga/' -D -; done
{code}


h3. Дома

## [Детализация списаний за период|CarbonBilling:Детализация расхода]
{code}curl -XPOST -d 'method1=objects.filter&arg1={"abonent_id":"1242","change_balance_time__range":["2018-10-01", "2018-11-01"],"storno":0}' http://169.254.80.82:8082/rest_api/v2/ArchAccountStack/ -D -{code}
# h5. Скрипт для создания абонента и учетной записи. Создаёт абонента в папке "Все" с именем "ФИО1", номером договора TEST_API1, тарифом с id=1, балансом 10, логином abonent2, паролем 1234
{code}
#!/bin/bash
curl -XPOST -d 'method1=objects.create&arg1={"name":"ФИО1", "parent_id":1, "tarif_id":1, "contract_number":"TEST_API1"}&method2=add_payment&arg2={"SUM_IN": "10"}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -
sqlexec "set list on; select id from abonents where contract_number='TEST_API1'" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.create&arg1={"abonent_id":'$line', "login":"abonent2"}&method2=set_password&arg2={"psw":"1234","dontshow":false}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done
{code}
# h5. Список абонентов блокировкой negbal, выводим логин и IP адерес.
{code}curl -XPOST -d 'method1=objects.filter&arg1={"abonent__deleted": 0, "abonent__abonent_id_abonentsblock__b_negbal": 1 }&method2=distinct&fields=["login", "ip"]' "http://169.254.80.82:8082/rest_api/v2/Users/" -D -{code}
Изменить запись в истории блокировок ID 118, установить время изменения и снятия на 1 июня 2019 года
{code}curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/AbonentsBlockHistory/' -d 'method1=objects.get&arg1={"id":118}&method2=set&arg2={"time_changed":"2019-06-01 00:00:00","time_del":"2019-06-01 00:00:00"}&method3=save'{code}
# h5. Перерасчетать абонента начиная с выбранного периода (обязательно указывать первое число месяца\!)
Перерасчет абонента с ID 1392 с июня 2019 года
{code}curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.get&arg1={"id":"1392"}&method2=set&arg2={"need_recalc":"2019-06-01"}&method3=save&arg3={}'{code}
# h5. Получение данных об операторе, обслуживающем абонента
{code}curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.filter&arg1={"id":1111}&fields=["operator"]'{code}
# h5. Привязать услугу с id 105 к оператору связи с id 3
{code}
curl -XPOST -d 'method1=objects.get&arg1={"id":"105"}&method2=set&arg2{"operator_id":"3"}&method3=save&arg3={}' 'http://169.254.80.82:8082/rest_api/v2/Usluga/' -D -
{code}
# h5. Назначить новую дату "Cледующего списания" по подключенной услуге 127 на 13.09.2020 у абонента 94
{code}
curl -XPOST -d 'method1=objects.get&arg1={"abonent_id":94, "usluga_id":"127"}&method2=set&arg2={"next_date":"2020-09-13 00:00:00"}&method3=save&arg3={"allow_set_none_manager":true}' http://169.254.80.82:8082/rest_api/v2/UsersUsluga/ -D -;
{code}
# h5. Удалить все версии услуги с ID 167
ID услуги указывается в переменной usluga_id в начале скрипта.
{code}
usluga_id=167; sqlexec -l "select id from usluga_history where usluga_id=$usluga_id" | awk '$2{print $2}' | while read usluga_version_id; do curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/UslugaHistory/' -d 'method1=objects.get&arg1={"id":'$usluga_version_id'}&method2=delete'; done
{code}
# h5. Назначить новую дату списания на 13.09.2020 услуге, которая имеет статус "включена" у абонента с id 9135.
{code}
sqlexec "set list on;select uu.id from users_usluga uu join abonents a on uu.abonent_id=a.id where a.id=9135 and uu.enabled=1 " | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"next_date":"2020-09-13 00:00:00"}&method3=save&arg3={"allow_set_none_manager":true}' 'http://169.254.80.82:8082/rest_api/v2/UsersUsluga/' -D -; done
{code}

h2. Отладка
{code}chroot /app/asr_billing/ service admin_web_server restart{code}
По окончанию отладки, рекомендуется вернуть уровень логирования в статус *error*.

h3. Неудобно читать ответ биллинга при выполнении curl: всё в одну стороку и вместо русских символов что-то вроде "\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440"

Используйте утилиту *jq* для форматирования вывода.
{note:title=jq нужно установить!}Утилита не идёт "из коробки", но её можно просто установить:
{code}yum install -y jq{code}{note}
Например:
{code:title=Команда}curl -ss -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.get&arg1={"id":"3"}&fields=["name"]' | jq .{code}
{code:title=Вывод}{
"result": {
"fields": {
"name": "ООО Лучший провайдер"
},
"model": "Abonents",
"pk": 3
},
"call": "/rest_api/v2/Abonents/"
}{code}