Webhooks

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

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

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

webhooks_main

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

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

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

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

webhooks_edit

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


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

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

Получение:

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), режим редактирования.

Получение:

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 ".$structure->attributes()->name." 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
    }

}

Данные:


    
        
            
                07.09.2018 17:21
                17
                1
                1
                0
                33
                1
                0
                0
                18
                2
                
                
                    
                        
                            Product 1
                            28
                            1
                            17
                            15
                            0
                            0
                            1
                            1
                            0
                            
                            0
                            
0
Product 2 29 1 17 15 0 0 1 1 0 0
0
11 0 0 0 12 1 1 0 0 0 0 666 0 0 0 0 0 2 0

Класс 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, то запуск будет выглядеть так:

//$entry - object(references.contacts:1)
Webhooks::runEvent($entry, "edit")
Последние правки: 02.08.2019 13:04:51