====== Опір Гусака ======
===== Як виглядає? =====
ну якось так
{{ :gooseresistance00.png |}}
а ви що очікували?
===== Як вмикається? =====
За допомогою відповідної опції
GOOSE_RESISTANCE=1
===== Що дозволяє робити? =====
Ну для початку, можна на нього натискати
{{:gres1.png|}}
Щоб дізнатись, що в нас нема жодних стратегій
{{:gres2.png|}}
Тут ми можемо створювати "стратегії"
{{:gres3.png|}}
Звичайно ми можемо створити довільну кількість стратегій гуся
{{:gres4.png|}}
Опція "Використання прив'язок" в купі з значенням "Основний контрагент" напряму впливає на те, як вибиратиметься стратегія відносно базових прив'язок контрагентів, котрі описуються опціями AGENTS_ASSIGN та DEFAULT_ASSIGN_AGENT. У випадку, якщо чекбокс "Використання прив'язок" знято - стратегія просто собі є і є.
Кожну з них нам обов'язково необхідно налаштувати, додавши в неї всіх(!) контрагентів які будуть приймати в ній участь
{{:gres5.png|}}
Тип "розподілу" може мати наступні значення:
* **Жоден** - завжди 0
* **Відсоток від суми** - відсоток від суми платежа
* **Відсоток від залишку** - відсоток від залишків суми платежа після обчислень
* **Абсолютне** - абсолютне значення в грошах, від суми платежа
* **Залишки** - те що лишилось після обчислень. Якщо агентів з цим типом розподілу більше ніж 1 залишки це залишки/кількість агентів.
Також за необхідності, для кожного контрагента в рамках кожної окремої стратегії, ми можемо заповнити низку користувацьких даних, якось так:
{{:gres6.png|}}
Також ми у будь-який момент, можемо провести натурне тестування наших стратегій
{{:gres7.png|}}
Та прослідкувати за розподілом коштів в рамках стратегії
{{:gres8.png|}}
Тут варто зазначити, що в даному прикладі користувач проживає на вулиці "Бандери". А вона у нас де? Вірно, ось тут:
{{:gres9.png|}}
Тобто шлях вирішення того, яку стратегію буде обрано для конкретного користувача був "користувач=>Адреса=>Статична прив'язка / Контрагент за адресою / чи агент за замовчуванням=>Стратегія".
У випадку, якщо б цей користувач був примусово прив'язаний до основного контрагента іншої стратегії
{{:gres10.png|}}
{{:gres11.png|}}
то і результат тестування виглядав би якось трішки інакше
{{:gres12.png|}}
У випадку, якщо не вдалось визначити стратегію на основі "Використання прив`язок" + "Основний контрагент" буде використано першу ж наявну стратегію, незалежно від її типу. Коротше всі стратегії є "Користуваче-центричними". Також в стратегії є параметр "Тариф". Він має пріоритет над усім іншим та ігнорує легасі-прив'язки. Тобто, якби в попередньому прикладі в користувача навіть за наявності адресного присвоєння чи присвоєного вручну контрагента був би призначений тариф Turbo - для нього було б застосовано стратегію з ID 3.
Що до порядку обробки "Розподілу коштів", обробляються вони завжди в наступному порядку, зверху вниз:
- Абсолютне значення (від суми платежу віднімається значення)
- Відсоток від суми (від суми платежу віднімається відсоток значення)
- Відсоток від залишку (від залишку після п.1. та п.2. віднімається відсоток значення)
- Залишки (все що залишилось після п.1., п.2. та п.3. поділене на кількість агентів з цим типом)
- Жоден (завжди 0, просто створює присутність агента)
===== Для розробників =====
Можливі параметри виклику з RemoteAPI:
* **username** - логін користувача
* **paymentid** - платіжний ID користувача
* **amount** - сума коштів платежу
* **stratid** - примусово вказаний ID стратегії
* **runtime** - виклик рантайму ліцензії
Ясно, що один з двох параметрів username чи paymentid, на ваш розсуд є обов'язковим.
Запит:
https://billing.isp.ua/?module=remoteapi&key=UBxxxxxxxxxxxx&action=goose&username=sometestuser&amount=350
Або:
https://billing.isp.ua/?module=remoteapi&key=UBxxxxxxxxxxxx&action=goose&paymentid=123456789&amount=350
Коротко про те що відбувається в результатах та на що варто звертати увагу:
* **amount** - (float) сума платежу
* **userlogin** - (string) очевидно
* **paymentid** - (string) теж очевидно
* **payopts** - (array) масив з ключами:
* **minamount** - (float) мінімально допустима сума платежу
* **maxamount** - (float) максимально допустима сума платежу
* **isvalid** - (bool) флажок, платіж в запиті є валідним відносно стратегії чи ніт?
* **amount** -(float) власне та ж сума платежу з запиту
* **agents** - (array) масив з вкладеними в нього нутрощами контрагентів з стратегії в форматі id=>дані кожного
* **user** - (array) масив з нутрощами користувача визначеного за параметрами запиту username чи paymentid якщо він існує
* **runtime** - (array) вже розпакований масив рантайму ліцензії, якщо її було викликано в запиті та її встановлено в системі
//Зразок того, що міститься в включі agents://
[agents] => Array
(
[1] => Array
(
[id] => 1
[bankacc] => UA111111111111111111111111111
[bankname] => РогиТаКопита
[bankcode] => 666666
[edrpo] => 12345678
[ipn] =>
[licensenum] =>
[juraddr] => Лісова 42
[phisaddr] => Леонтовича 13
[phone] => 1234567
[contrname] => МПП НашПровайдер
[agnameabbr] =>
[agsignatory] =>
[agsignatory2] =>
[agbasis] =>
[agmail] =>
[siteurl] =>
[splitamount] => 265
[splittype] => leftovers
[splitvalue] => 0
[extinfo] => Array
(
)
[customdata] => Array
(
[somekey] => somevalue
[anotherkey] => такі буковки тут теж працюють
)
)
.....
Особливу увагу добре би звернути там на ось ці поля:
* **splitamount** - (float) вже поділена сума для кожного
* **splittype** - (string) тип розподілу (absolute/percent/percentlef/leftovers/none)
* **splitvalue** - (int) значення розподілу
* **extinfo** - (array) легасі дані з AGENTS_EXTINFO_ON для кожного агенту
* **customdata** - (array) масив користувацьких даних у форматі ключ=>значення
Повна відповідь JSON:
{
"amount": "350",
"userlogin": "sometestuser",
"paymentid": 123456789,
"payopts": {
"minamount": 50,
"maxamount": 0,
"isvalid": true,
"amount": "350"
},
"id": "1",
"name": "Базова стратегія",
"useassigns": "1",
"primaryagentid": "1",
"maxamount": null,
"tariff": "0",
"agents": {
"1": {
"id": "1",
"bankacc": "UA111111111111111111111111111",
"bankname": "РогиТаКопита",
"bankcode": "666666",
"edrpo": "12345678",
"ipn": "",
"licensenum": "",
"juraddr": "Лісова 42",
"phisaddr": "Леонтовича 13",
"phone": "1234567",
"contrname": "МПП НашПровайдер",
"agnameabbr": "",
"agsignatory": "",
"agsignatory2": "",
"agbasis": "",
"agmail": "",
"siteurl": "",
"splitamount": 265,
"splittype": "leftovers",
"splitvalue": "0",
"extinfo": [],
"customdata": {
"somekey": "somevalue",
"anotherkey": "такі буковки тут теж працюють"
}
},
"15": {
"id": "15",
"bankacc": "UA333333333333333333333333333",
"bankname": "ПриватБанк",
"bankcode": "305299",
"edrpo": "333333333",
"ipn": "",
"licensenum": "",
"juraddr": "",
"phisaddr": "",
"phone": "",
"contrname": "ФОП Нереаленко",
"agnameabbr": "",
"agsignatory": "",
"agsignatory2": "",
"agbasis": "",
"agmail": "",
"siteurl": "",
"splitamount": 35,
"splittype": "percent",
"splitvalue": "10",
"extinfo": [],
"customdata": []
},
"24": {
"id": "24",
"bankacc": "UA444444444444444444444444444",
"bankname": "ПриватБанк",
"bankcode": "305299",
"edrpo": "87654321",
"ipn": "",
"licensenum": "",
"juraddr": "",
"phisaddr": "",
"phone": "",
"contrname": "ТОВ ЧорнийЛіс",
"agnameabbr": "",
"agsignatory": "",
"agsignatory2": "",
"agbasis": "",
"agmail": "agent@site.com",
"siteurl": "https://ubilling.net.ua",
"splitamount": "50",
"splittype": "absolute",
"splitvalue": "50",
"extinfo": [],
"customdata": []
}
},
"user": {
"login": "sometestuser",
"realname": "Типу тестовий користувач",
"Passive": "0",
"Down": "0",
"Password": "cepizdets",
"AlwaysOnline": "1",
"Tariff": "Drift",
"TariffChange": "",
"Credit": "0",
"Cash": "666.75",
"ip": "172.16.0.6",
"mac": "98:de:d0:89:1e:31",
"cityname": "Зловісненськ",
"streetname": "Бандери",
"buildnum": "22",
"entrance": "1",
"floor": "3",
"apt": "124",
"geo": "48.52782,25.05541",
"fulladress": "Бандери 22/124",
"phone": "8101050",
"mobile": "+380501234567",
"contract": "13",
"email": "",
"paymentid": 123456789
},
"runtime": [],
"agentsextinfo": {
"5": {
"id": "5",
"agentid": "5",
"service_type": "Internet",
"internal_paysys_name": "CITY24M_RYS",
"internal_paysys_id": "",
"internal_paysys_srv_id": "",
"paysys_token": "",
"paysys_secret_key": "",
"paysys_password": "",
"payment_fee_info": "",
"paysys_callback_url": ""
},
"6": {
"id": "6",
"agentid": "5",
"service_type": "Internet",
"internal_paysys_name": "EASYPAYM_RYS",
"internal_paysys_id": "",
"internal_paysys_srv_id": "",
"paysys_token": "",
"paysys_secret_key": "",
"paysys_password": "",
"payment_fee_info": "",
"paysys_callback_url": ""
},
"7": {
"id": "7",
"agentid": "3",
"service_type": "Internet",
"internal_paysys_name": "CITY24M_CHER",
"internal_paysys_id": "",
"internal_paysys_srv_id": "",
"paysys_token": "",
"paysys_secret_key": "",
"paysys_password": "",
"payment_fee_info": "",
"paysys_callback_url": ""
},
"9": {
"id": "9",
"agentid": "5",
"service_type": "Internet",
"internal_paysys_name": "PBANKM_RYS",
"internal_paysys_id": "5",
"internal_paysys_srv_id": "2",
"paysys_token": "",
"paysys_secret_key": "",
"paysys_password": "",
"payment_fee_info": "subscriber",
"paysys_callback_url": ""
}
}
}
Вона ж у вигляді прямого масиву
Array
(
[amount] => 350
[userlogin] => sometestuser
[paymentid] => 123456789
[payopts] => Array
(
[minamount] => 50
[maxamount] => 0
[isvalid] => 1
[amount] => 350
)
[id] => 1
[name] => Базова стратегія
[useassigns] => 1
[primaryagentid] => 1
[maxamount] =>
[tariff] => 0
[agents] => Array
(
[1] => Array
(
[id] => 1
[bankacc] => UA111111111111111111111111111
[bankname] => РогиТаКопита
[bankcode] => 666666
[edrpo] => 12345678
[ipn] =>
[licensenum] =>
[juraddr] => Лісова 42
[phisaddr] => Леонтовича 13
[phone] => 1234567
[contrname] => МПП НашПровайдер
[agnameabbr] =>
[agsignatory] =>
[agsignatory2] =>
[agbasis] =>
[agmail] =>
[siteurl] =>
[splitamount] => 265
[splittype] => leftovers
[splitvalue] => 0
[extinfo] => Array
(
)
[customdata] => Array
(
[somekey] => somevalue
[anotherkey] => такі буковки тут теж працюють
)
)
[24] => Array
(
[id] => 24
[bankacc] => UA444444444444444444444444444
[bankname] => ПриватБанк
[bankcode] => 305299
[edrpo] => 87654321
[ipn] =>
[licensenum] =>
[juraddr] =>
[phisaddr] =>
[phone] =>
[contrname] => ТОВ ЧорнийЛіс
[agnameabbr] =>
[agsignatory] =>
[agsignatory2] =>
[agbasis] =>
[agmail] => agent@site.com
[siteurl] => https://ubilling.net.ua
[splitamount] => 50
[splittype] => absolute
[splitvalue] => 50
[extinfo] => Array
(
)
[customdata] => Array
(
)
)
[15] => Array
(
[id] => 15
[bankacc] => UA333333333333333333333333333
[bankname] => ПриватБанк
[bankcode] => 305299
[edrpo] => 333333333
[ipn] =>
[licensenum] =>
[juraddr] =>
[phisaddr] =>
[phone] =>
[contrname] => ФОП Нереаленко
[agnameabbr] =>
[agsignatory] =>
[agsignatory2] =>
[agbasis] =>
[agmail] =>
[siteurl] =>
[splitamount] => 35
[splittype] => percent
[splitvalue] => 10
[extinfo] => Array
(
)
[customdata] => Array
(
)
)
)
[user] => Array
(
[login] => sometestuser
[realname] => Типу тестовий користувач
[Passive] => 0
[Down] => 0
[Password] => cepizdets
[AlwaysOnline] => 1
[Tariff] => Drift
[TariffChange] =>
[Credit] => 0
[Cash] => 666.75
[ip] => 172.16.0.6
[mac] => 98:de:d0:89:1e:31
[cityname] => Зловісненськ
[streetname] => Бандери
[buildnum] => 22
[entrance] => 1
[floor] => 3
[apt] => 124
[geo] => 48.52782,25.05541
[fulladress] => Бандери 22/124
[phone] => 8101050
[mobile] => +380501234567
[contract] => 13
[email] =>
[paymentid] => 123456789
)
[runtime] => Array
(
)
[agentsextinfo] => Array
(
[7] => Array
(
[id] => 7
[agentid] => 3
[service_type] => Internet
[internal_paysys_name] => CITY24M_CHER
[internal_paysys_id] =>
[internal_paysys_srv_id] =>
[paysys_token] =>
[paysys_secret_key] =>
[paysys_password] =>
[payment_fee_info] =>
[paysys_callback_url] =>
)
[11] => Array
(
[id] => 11
[agentid] => 3
[service_type] => Internet
[internal_paysys_name] => PBANKM_CHER
[internal_paysys_id] => 3
[internal_paysys_srv_id] => 1
[paysys_token] =>
[paysys_secret_key] =>
[paysys_password] =>
[payment_fee_info] => subscriber
[paysys_callback_url] =>
)
[6] => Array
(
[id] => 6
[agentid] => 5
[service_type] => Internet
[internal_paysys_name] => EASYPAYM_RYS
[internal_paysys_id] =>
[internal_paysys_srv_id] =>
[paysys_token] =>
[paysys_secret_key] =>
[paysys_password] =>
[payment_fee_info] =>
[paysys_callback_url] =>
)
[5] => Array
(
[id] => 5
[agentid] => 5
[service_type] => Internet
[internal_paysys_name] => CITY24M_RYS
[internal_paysys_id] =>
[internal_paysys_srv_id] =>
[paysys_token] =>
[paysys_secret_key] =>
[paysys_password] =>
[payment_fee_info] =>
[paysys_callback_url] =>
)
[9] => Array
(
[id] => 9
[agentid] => 5
[service_type] => Internet
[internal_paysys_name] => PBANKM_RYS
[internal_paysys_id] => 5
[internal_paysys_srv_id] => 2
[paysys_token] =>
[paysys_secret_key] =>
[paysys_password] =>
[payment_fee_info] => subscriber
[paysys_callback_url] =>
)
)
)