External API предназначен для интеграции Smarty с внешними сервисами через, например, API биллинга или кинотеатра, а также для кастомизации поведения.
Интеграция - это скрипт на языке Python, который содержит класс, отнаследованный от класса SmartyBilling, в котором можно переопределять опеределённые методы, вызываемые в процессе работы Smarty. Полный список доступных методов приведён ниже. Краткий пример интеграции:
class CustomBillingClient(SmartyBilling):
def __init__(self, param1, param2, *args, **kwargs):
# Инициализация интеграции, выполняется во время запроса от устройства и не должна содержать тяжёлых операций
# Может принимать параметры в качестве аргументов, как например param1, param2 здесь,
# которые заполняются в поле "Дополнительные атрибуты" в панели администрирования
# Если параметр указан в аргументах, то и в настройках интеграции данный параметр должен присутствовать,
# иначе интеграция не будет работать
self.param1 = param1
self.param2 = param2
super(SmartyBilling, self).__init__(**kwargs)
def get_customer_balance(self, params, *args, **kwargs):
# Получение баланса.
customer = params.account.customer
# здесь request - это некая функция, которая получает баланс из внешнего источника
# customer.ext_id - это поле "Внешний ID у абонента"
balance = request(self.param1, self.param2, customer.ext_id)
return balance, payment, customer.id
Реализованные методы должны принимать позиционные и именованные аргументы (*args и **kwargs).
Также, класс необходимо зарегистрировать операцией:
external_api.registry.add('custom_billing_client', CustomBillingClient)
Где 'custom_billing_client' - имя интеграции, которое будет отображаться в панели администрирования. Без данной операции интеграция будет игнорироваться.
Более подробные примеры интеграции можно найти по ссылке https://github.com/microimpuls/smarty-api-lib/tree/master/external-api.
Установка модуля происходит следующим образом: - Файл с модулем необходимо поместить в /usr/share/microimpuls/smarty/modules_available/, после чего перезапустить сервис uwsgi. - В разделе "Общие настройки"-"Интеграция с API внешних систем" необходимо создать новую интеграцию, в поле "API handler class" выбрать нужный модуль, выставить флаг "По умолчанию для биллинга" и заполнить параметры. У оператора должна быть только одна интеграция с флагом "По умолчанию для биллинга".
is_internalОписание: Является ли встроенным обработчиком биллинга.
use_internal_billingОписание: Разрешено ли использование внутреннего биллинга для данной интеграции.
check_ticketОписание: Проверка состояния билета.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| code | str |
Код билета. |
| sid | str |
ID сессии. |
| params | TVMiddlewareApiParams |
Параметры API. |
Возвращаемое значение bool: Является ли билет активным.
get_customer_balanceОписание: Информация о балансе абонента.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| params | TVMiddlewareApiParams |
Параметры API. |
Возвращаемое значение Tuple[float, float, float]: Баланс абонента, рекомендуемую суммы оплаты и идентификатор аккаунта для оплаты.
get_customer_payment_listОписание: Cписок транзакций пользователя за период.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| date_from | datetime |
Дата начала периода. |
| date_to | datetime |
Дата окончания периода. |
| params | TVMiddlewareApiParams |
Параметры API. |
Возвращаемое значение List[dict]: Список транзакций пользователя за период в фиксированном формате.
get_video_actions_listОписание: Возвращает массив вариантов действий с видео. Если видео не куплено это может быть возможность покупки или аренды в разных форматах. Если куплено - запрос ссылки. Если пользователь не заргистрирован у поставщика - предложение регистрации.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| video | Video |
Объект видео. |
| goods_id | int |
Идентификатор товара или видео. |
| params | TVMiddlewareApiParams |
Параметры API. |
Возвращаемое значение List[dict]: Массив вариантов действий с видео в фиксированном формате.
perform_video_actionОписание: Выполнение действия с видео.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| video | Video |
Объект видео. |
| action | str |
Идентификатор действия с видео. |
| goods_id | int |
Идентификатор товара или видео. |
| params | TVMiddlewareApiParams |
Параметры API. |
activate_accountОписание: Разблокировка аккаунта во внешнем биллинге.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| account | Account |
Объект аккаунта. |
| account_device | AccountDevice |
Устройство, с которого производится активация. |
| params | TVMiddlewareApiParams |
Параметры API. |
Возвращаемое значение str: Сообщение о результате или ошибке.
deactivate_accountОписание: Деактивация аккаунта во внешнем биллинге.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| account | Account |
Объект аккаунта. |
Возвращаемое значение str: Ничего не возвращает, при ошибке вызывает ExternalApiException.
update_accountОписание: Обновление аккаунта во внешнем биллинге.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| account | Account |
Объект аккаунта. |
| method | str |
Метод авторизации. Доступные значения: 'ip', 'abomenent', 'phone', 'passoword'. |
| ip | str |
IP-адрес абонента. |
| params | TVMiddlewareApiParams |
Параметры API. |
| login_params | LoginParams |
Параметры авторизации. |
Возвращаемое значение str: Сообщение о результате или ошибке.
authorize_accountОписание: Авторизация аккаунта во внешнем биллинге.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| account | Account |
Объект аккаунта. |
| method | str |
Метод авторизации. Доступные значения: 'ip', 'abomenent', 'phone', 'passoword'. |
| ip | str |
IP-адрес абонента. |
| device_uid | str |
уникальный идентификатор устройства. |
| abonement | int |
Логин. |
| password | str |
Пароль, переданный при логине. |
| params | TVMiddlewareApiParams |
Параметры API. |
Возвращаемое значение str: Ничего не возвращает, при ошибке авторизации (ExternalApiException) возвращает error = 3.
check_accountОписание: Проверка статуса аккаунта во внешнем биллинге. При ошибке проверки нужно кидать исключение ExternalApiException.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| account | Account |
Объект аккаунта. |
| ip | str |
IP-адрес абонента. |
| device_uid | str |
уникальный идентификатор устройства. |
| device_model | str |
модель устройства. |
| params | TVMiddlewareApiParams |
Параметры API. |
Возвращаемое значение str: Сообщение о результате или ошибке.
register_account_newОписание: Регистрация аккаунта во внешнем биллинге.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| register_params | RegisterParams |
Параметры регистрации. |
| params | TVMiddlewareApiParams |
Параметры API. |
Возвращаемое значение AccountRegisterResponse: Результат регистрации.
validate_registration_paramsОписание: Проверка параметров регистрации во внешнем биллинге. В зависимости от исключения, TVMW API метод AccountRegister вернет определенный код ошибки:
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| register_params | RegisterParams |
Параметры регистрации. |
Возвращаемое значение ``: Ничего не возвращает, в случае ошибки вызывает исключение.
Исключения:
| Имя | Описание |
|---|---|
| Exception | error = 1 |
| AccountRegisterException.RegistrationNotAllowedForClient | error = 2 |
| AccountRegisterException.IPLimitExceeded | error = 3 |
| AccountRegisterException.AutoActivationPeriodInvalid | error = 4 |
| AccountRegisterException.InvalidPhoneNumber | error = 5 |
| AccountRegisterException.PhoneBusyError | error = 6 |
| AccountRegisterException.PhoneOrDeviceUIDIsRequired | error = 7 |
| ExternalApiException | error = 8 |
| ConfirmationError.VerificationCodeWasSent | error = 9 |
| ConfirmationError.VerificationCodeIsWrong | error = 10 |
| AccountRegisterException.ExternalApiWasNotCreated | error = 11 |
| AccountRegisterException.CaptchaRequired | error = 12 |
| AccountRegisterException.InvalidCaptcha | error = 13 |
| AccountRegisterException.CaptchaLimitExceeded | error = 14 |
| AccountRegisterException.InvalidDealerId | error = 15 |
| ConfirmationError.ConfirmPhoneWithCall | error = 16 |
| ConfirmationError.PhoneWithCallConfirmationWaiting | error = 17 |
| AccountRegisterException.RegistrationNotAllowed | error = 18 |
| ConfirmationError.VerificationCodeWithPhoneNumberWasSent | error = 19 |
| ConfirmationError.VerificationCodeWithPhoneNumberIsWrong | error = 20 |
| ConfirmationError.VerificationWithCodeConfirmationWaiting | error = 21 |
| ConfirmationError.VerificationWithPhoneNumberConfirmationWaiting | error = 22 |
| AccountRegisterException.InvalidBillingApiId | error = 23 |
| AccountRegisterException.PhoneNumberDoesntMatch | error = 24 |
| ConfirmationError.VerificationCodeSendingFrequencyExceeded | error = 25 |
post_account_registrationОписание: Выполнение действие с аккаунтом после регистрации.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| account | Account |
Объект аккаунта. |
get_accountОписание: Возвращает аккаунт во время авторизации, позволяет подменять логику авторизации.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| client | Client |
Клиент. |
| abonement | Optional[int] |
Логин. |
| password | Optional[str] |
Пароль, переданный при логине. |
| device_uid | Optional[str] |
Уникальный идентификатор устройства. |
| phone_number | Optional[str] |
Номер телефона. |
| ip | Optional[str] |
IP-адрес абонента. |
Возвращаемое значение GetAccountResponse: Результат авторизации.
accept_legal_documentОписание: Подтверждает правовой документ.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| accept_params | LegalAcceptParams |
Параметры подтверждения. |
Возвращаемое значение LegalAcceptResponse: Результат подтверждения.
invoice_completeОписание: Заканчивает обработку внешнего инвойса.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| invoice_complete_params | InvoiceCompleteParams |
Параметры обработки. |
Возвращаемое значение InvoiceCompleteResponse: Результат обработки.
customer_assign_nonbasic_tariffОписание: Подключает дополнительный тариф.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| customer | Customer |
Объект абонента. |
| tariff | Tariff |
Объект тарифа. |
| is_free | bool |
Флаг для бесплатного подключения тарифа. |
| free_for_inactive | bool |
Флаг бесплатного подключения тарифа для неактивных абонентов. |
Возвращаемое значение TariffAssignResponse: Объект TariffAssignResponse.
customer_change_basic_tariffОписание: Подключает базовый тариф.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| customer | Customer |
Объект абонента. |
| tariff | Tariff |
Объект тарифа. |
| check_balance | bool |
Флаг проверки баланса при подключении тарифа. |
| is_free | bool |
Флаг для бесплатного подключения тарифа. |
| free_for_inactive | bool |
Флаг бесплатного подключения тарифа для неактивных абонентов. |
Возвращаемое значение TariffAssignResponse: Объект TariffAssignResponse.
customer_unassign_nonbasic_tariffОписание: Отключает дополнительный тариф.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| customer | Customer |
Объект абонента. |
| tariff | Tariff |
Объект тарифа. |
Возвращаемое значение ``:
get_customer_tariff_listОписание: Возвращает список тарифов абонента.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| customer | Customer |
Объект абонента. |
| ip | str |
IP-адрес с которого выполняется запрос. |
| country | geo_models.Country |
Объект страны с которого выполняется запрос. |
| city | geo_models.City |
Объект города с которого выполняется запрос. |
Возвращаемое значение GetCustomerTariffListResponse: Список тарифов абонента.
on_tariff_addОписание: Колбэк, который вызывается при подключении тарифов абоненту.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| customer | Customer |
Объект абонента. |
| pk_set | Set[int] |
Список id тарифов. |
Возвращаемое значение ``:
get_authkeyОписание: Возвращает ключ авторизации. Позволяет использовать ключ, сгенерированный другим сервисом.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| account | Account |
Объект аккаунта. |
| params | TVMiddlewareApiParams |
Параметры API. |
| login_params | LoginParams |
Параметры авторизации. |
Возвращаемое значение Tuple[str, bool]: Ключ авторизации и флаг возможности продолжения авторизации штатными методами Smarty.
disable_autopaymentОписание: Отключение автоплатежа у абонента.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| customer | Customer |
Объект абонента. |
Возвращаемое значение ``:
post_payment_completeОписание: Действие после успешного получения статуса транзакции.
Описание объекта CustomerTransaction
transaсtion.customer (tvmiddleware.models.Customer) - Объект абонента, от имени которого осуществляется транзакция.
transaсtion.amount (Decimal) - сумма транзакции. Может принимать положительные значения (пополнение баланса) и отрицательные (списание с баланса).
transaction.datetime (datetime) - дата и время создания транзакции.
transaction.source (int) - тип платежного шлюза, через который осуществляется транзакция
0 - Wallet One
1 - Wallet One Card
2 - PayPal
3 - API (транзакция создана через Billing API)
4 - Manual (транзакция создана вручную через панель администрирования Smarty)
5 - Internal (внутренний биллинг Smarty)
6 - Armenian Card
7 - Paymaster
8 - Paymaster Card
9 - Square Up
10 - Payture
11 - Null (только для тестов)
12 - Fortebank
13 - Stripe
14 - Sber
transaction.status (int) - статус транзакции. Принимает значения:
0 - не обработана, статус неизвестен
1 - обработана, транзакция прошла успешно
2 - ошибка, транзакция не прошла
transaction.is_autopayment (bool) - флаг указывающий, является ли транзакция автоплатежом (рекуррентным).
Описание объекта TVMiddlewareApiParams
params.request (django.http.request.HttpRequest) - объект запроса к TVMW API методу PaymentComplete.
params.params_dict (dict) - словарь, содержащий GET и POST параметры запроса, в зависимости от http метода.
params.ip (str) - IP-адрес с которого производится запрос.
params.authkey (str) - authkey запроса.
params.client (clients.models.Client) - объект клиента Smarty.
params.account (tvmiddleware.models.Account) - объект аккаунта, от лица которого осуществляется запрос.
params.device_uid (str) - uid устройства, с которого осуществляется запрос.
params.auth (bool) - флаг указывающий, авторизован ли аккаунт.
params.lang (str) - код языка источника запроса.
Описание объекта PaymentSource
source.payment_type (int) - тип платежного шлюза. Может принимать значения
0 - Wallet One
1 - Wallet One Card
2 - PayPal
3 - Armenian Card
4 - Paymaster
5 - Paymaster Card
6 - Square Up
7 - Payture
8 - Null (только для тестов)
9 - Fortebank
10 - Stripe
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| transaction | CustomerTransaction |
(billing.models.CustomerTransaction) Объект транзакции с актуальным статусом. |
| params | TVMiddlewareApiParams |
(tvmiddleware.api_base.TVMiddlewareApiParams) Параметры API запроса. |
| source | PaymentSource |
(billing.payment.PaymentSource) Объект источника платежа, соответствующий используемому платежному шлюзу. |
get_tariff_priceОписание: Возвращает стоимость тарифа.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| tariff | Tariff |
Объект тарифа. |
get_payment_sumОписание: Возвращает стоимость для всех тарифов абонента.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| customer_billing_compact | CustomerBillingCompat |
Объект CustomerBillingCompat. |
get_payment_sum_no_discountОписание: Возвращает стоимость для всех тарифов абонента без дисконта.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| customer_billing_compact | CustomerBillingCompat |
Объект CustomerBillingCompat. |
customer_payment_infoОписание: Возвращает детализацию платежа.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| api_request_params | CustomerPaymentInfoParams |
Параметры детализации. |
Возвращаемое значение CustomerPaymentInfoResponse: Детализация платежа
get_account_by_phone_number_1Описание: Возвращает аккаунт по полю phone_number_1.
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| client | Client |
Клиент. |
| phone_number | Optional[str] |
Номер телефона. |
Возвращаемое значение QuerySet[Account]: результат запроса к таблице модели Account