Webhooks

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

Создание/Редактирование

Все настройки с webhooks производятся в раздели меню Настройки->Webhooks, при включенном параметре «webhooks_enable=1» в файле config.php

webhooks_main

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

В каждой группе может быть один из типов отправляемых данных. JSON или XML

Каждый webhook можно привязать к следующим событиям:

  • Добавление — когда происходит через форму добавления
  • Редактирование — когда форма редактируется
  • Удаление — кода объекту устанавливается значение visible=0 в форме
  • Стирание — когда объект уничтожается полностью в формах

webhooks_edit

Активность — Вы можете включить и выключить webhooks, без их удаления
Адрес обработчика — Вводите полный Url
Формат — Тип отправляемых данных. JSON($_POST[‘json’]), XML($_POST[‘xml’])
Поиск — Можно найти объект по имени или его коду. Поиск зависит от рядом нажатой галочки «Показать выбранные»
Показать выбранные — При активности — показывает только выбранные, иначе показывает весь список объектов. Если хотите добавить новый к списку, не забудьте снять галочку эту.


Пример получения JSON

Приходит, как $_POST[‘json’]
Например: documents.orders (id = 17), режим редактирования.

Получение:

1
2
3
4
5
6
7
8
9
10
11
12
if(isset($_POST['json'])){
    $result = json_decode($_POST['json'],true);
    //Получить имя
    if(     isset($result['request']) && 
            isset($result['request']['action']) && 
            isset($result['request']['action']['structure'])){
        $jsonStructure = $result['request']['action']['structure'];
        if($jsonStructure){
            echo $jsonStructure['name'];
        }   
     }
}

Данные:

"request": {
        "action": {
            "type": "edit",
            "structure": {
                "name": "documents.orders",
                "key": 17,
                "fields": {
                    "date": "07.09.2018 17:21",
                    "id": "17",
                    "visible": "1",
                    "owner": "1",
                    "total": "0",
                    "company_details": "33",
                    "organization": "1",
                    "contact": "0",
                    "contract": "0",
                    "responsible": "18",
                    "storehouse": "2",
                    "phone": "",
                    "products": [
                        {
                            "structure": {
                                "name": "documents.orders.products",
                                "key": 28,
                                "fields": {
                                    "name": "Product 1",
                                    "id": "28",
                                    "visible": "1",
                                    "owner": "17",
                                    "product": "15",
                                    "price_nds": "0",
                                    "nds": "0",
                                    "nds_procent": "1",
                                    "number": "1",
                                    "total": "0",
                                    "discount_conditions": "",
                                    "reserve": "0",
                                    "article": "",
                                    "profit": "0"
                                }
                            }
                        },
                        {
                            "structure": {
                                "name": "documents.orders.products",
                                "key": 29,
                                "fields": {
                                    "name": "Product 2",
                                    "id": "29",
                                    "visible": "1",
                                    "owner": "17",
                                    "product": "15",
                                    "price_nds": "0",
                                    "nds": "0",
                                    "nds_procent": "1",
                                    "number": "1",
                                    "total": "0",
                                    "discount_conditions": "",
                                    "reserve": "0",
                                    "article": "",
                                    "profit": "0"
                                }
                            }
                        }
                    ],
                    "stamp": "",
                    "noncash": "",
                    "comment": "",
                    "price_type": "11",
                    "email": "",
                    "profit": "0",
                    "id_1c": "0",
                    "payment_orders": "0",
                    "number": "12",
                    "new_1c": "1",
                    "order_payment_status": "1",
                    "branch": "0",
                    "position": "",
                    "limit": "0",
                    "order_comment": "",
                    "discount": "0",
                    "order": "",
                    "discount_text": "",
                    "payment_sum": "0",
                    "invoice_sum": "666",
                    "payment_percent": "0",
                    "task": "0",
                    "deal": "0",
                    "commercial": "0",
                    "phone_mobile": "",
                    "nds": "0",
                    "repair": "2",
                    "equipment": "0"
                }
            }
        }
    }


Пример получения XML

Приходит, как $_POST[‘xml’]
Например: documents.orders (id = 17), режим редактирования.

Получение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
if(isset($_POST['xml'])){
 
    libxml_use_internal_errors(true);
    $request = simplexml_load_string($_POST['xml']);
    while ($error = libxml_get_errors()) {
        throw new \ErrorException("XML parsing error: " . $error[0]->message . " on line " . $error[0]->line);
    }
 
    if(!isset($request->action)){
        throw new \ErrorException("XML parsing error: not action node ");
    }
 
    // "edit"
    //echo $request->action->attributes()->type;
 
    if(!isset($request->action->structure)){
        throw new \ErrorException("empty Structure");
    }
    $structure = $request->action->structure;
    if(!isset($structure->fields)){
        throw new \ErrorException("structure <b>".$structure->attributes()->name."</b> not found fields");
    }
 
    // "documents.orders"
   // echo (string)$structure->attributes()->name;
 
    foreach($structure->fields->children() as $field){
        //this data field        
        //$field->getName() - field Name
        //(string)$field->attributes()->type
    }
 
}

Данные:

<request>
    <action type="edit">
        <structure name="documents.orders" key="17">
            <fields>
                <date  type="date">07.09.2018 17:21</date>
                <id  type="numeric">17</id>
                <visible  type="bool">1</visible>
                <owner  type="delayed">1</owner>
                <total  type="numeric">0</total>
                <company_details  type="delayed">33</company_details>
                <organization  type="delayed">1</organization>
                <contact  type="delayed">0</contact>
                <contract  type="delayed">0</contract>
                <responsible  type="delayed">18</responsible>
                <storehouse  type="delayed">2</storehouse>
                <phone  type="varchar"></phone>
                <products  type="set">
                    <structure name="documents.orders.products" key="28">
                        <fields>
                            <name  type="varchar">Product 1</name>
                            <id  type="numeric">28</id>
                            <visible  type="bool">1</visible>
                            <owner  type="delayed">17</owner>
                            <product  type="delayed">15</product>
                            <price_nds  type="numeric">0</price_nds>
                            <nds  type="numeric">0</nds>
                            <nds_procent  type="delayed">1</nds_procent>
                            <number  type="numeric">1</number>
                            <total  type="numeric">0</total>
                            <discount_conditions  type="varchar"></discount_conditions>
                            <reserve  type="numeric">0</reserve>
                            <article  type="varchar"></article>
                            <profit  type="numeric">0</profit>
                        </fields>
                    </structure>
                    <structure name="documents.orders.products" key="29">
                        <fields>
                            <name  type="varchar">Product 2</name>
                            <id  type="numeric">29</id>
                            <visible  type="bool">1</visible>
                            <owner  type="delayed">17</owner>
                            <product  type="delayed">15</product>
                            <price_nds  type="numeric">0</price_nds>
                            <nds  type="numeric">0</nds>
                            <nds_procent  type="delayed">1</nds_procent>
                            <number  type="numeric">1</number>
                            <total  type="numeric">0</total>
                            <discount_conditions  type="varchar"></discount_conditions>
                            <reserve  type="numeric">0</reserve>
                            <article  type="varchar"></article>
                            <profit  type="numeric">0</profit>
                        </fields>
                    </structure>
                </products>
                <stamp  type="bool"></stamp>
                <noncash  type="bool"></noncash>
                <comment  type="varchar"></comment>
                <price_type  type="delayed">11</price_type>
                <email  type="varchar"></email>
                <profit  type="numeric">0</profit>
                <id_1c  type="numeric">0</id_1c>
                <payment_orders  type="delayed">0</payment_orders>
                <number  type="numeric">12</number>
                <new_1c  type="bool">1</new_1c>
                <order_payment_status  type="delayed">1</order_payment_status>
                <branch  type="delayed">0</branch>
                <position  type="varchar"></position>
                <limit  type="numeric">0</limit>
                <order_comment  type="varchar"></order_comment>
                <discount  type="delayed">0</discount>
                <order  type="varchar"></order>
                <discount_text  type="varchar"></discount_text>
                <payment_sum  type="numeric">0</payment_sum>
                <invoice_sum  type="numeric">666</invoice_sum>
                <payment_percent  type="numeric">0</payment_percent>
                <task  type="delayed">0</task>
                <deal  type="delayed">0</deal>
                <commercial  type="delayed">0</commercial>
                <phone_mobile  type="varchar"></phone_mobile>
                <nds  type="numeric">0</nds>
                <repair  type="delayed">2</repair>
                <equipment  type="delayed">0</equipment>
            </fields>
        </structure>
    </action>
</request>

Класс Webhooks

Используется, если вы явно хотите вызвать цепочку webhooks. Например если не через форму удалили объект(visible=0), а явно через запрос, то можно вызвать Webhooks::runEvent

Для использования класса, необходимо подключить его — use Kernel\Actions\WebHooks\Webhooks

Получить весь список webhooks. Учитывает группу и возвращает многомерный массив. [ group_id => [] ]
Array public static function getGroupedList()

Получить список webhooks по group_id
Array public static function getListByGroupId(int $group_id)

Основной метод, если вы хотите явно запустить цепочку webhooks. Запустить все процессы webhook по данному типу и объекту
Void public static function runEvent(\Kernel\Data\Entry &$entry, String $action)
Например: $entry — references.contacts:1. Запустить все webhooks на references.contacts Edit, то запуск будет выглядеть так:

1
2
//$entry - object(references.contacts:1)
Webhooks::runEvent($entry, "edit")
Последние правки: 27.09.2018 14:15:45