СТРУКТУРА //безналичная оплата из 1с если заказ был создан на софте http://www.xcom-soft.ru/bitrix/order/json.php?mode=set&id='.$soft_order_id.'&paid=y ОФОРМЛЕНИЕ ЗАКАЗА 1 - В компоненте sale.basket.order.ajax добавлено несколько функций через класс Intaro\DigitalDistribution\Dispatcher $dc_dispatcher->includeJs(); - подключает js $dc_dispatcher->getVendors - получает вендеров и формы $dc_dispatcher->validateForms - проверяет введенные данные в формы $dc_dispatcher->saveFormsData - добавляет в товар заказа нужные свойства связанные с вендером //после оформления заказа 2 - в файле модуля intaro.digital_distribution/install/index.php - есть регистрация события на изменение статуса на готово при данном изменении статуса, запускаеться функция /Intaro/DigitalDistribution/OrderProcessor::execute 2.2 - если ранее небыл добавлен заказ в таблицу Highload-блок "DcOrder", тогда происходит получение ключей self::_statusCanBeProcessed - проверка, был ли добавлен элемент ранее self::_getDigitalProducts - получает товары в заказе и свойства товаров, там записан вендер self::_processDigitalProducts - добавление заказа в сервис MONT и отправка писем с ключами через эту функцию запускаеться класс из папки vendors_services, который содержит методы работы с АПИ и запускает функцию getLicences 2.3 - потом меняються статусы на "Обработка завершена" 2.4 - при смене статуса на "Обработка завершена", запускаеться событие из php_interface //Детальная процедура получения ключей 1 - \Intaro\DigitalDistribution\OrderProcessor::execute($ID, $status); //запус получения ключей 2 - \Intaro\DigitalDistribution\OrderProcessor::_initParams($order_id); //записывает в класс значения переменных 2.1 - self::$_order_id - номер заказа 2.2 - self::$_statuses_to_process - берет из настроек модуля значение (Отслеживать изменение в статусы) 2.3 - self::$_user_id - береться id пользователя из заказа 2.4 - self::$_site_id - береться id сайта из заказа 3 - \Intaro\DigitalDistribution\OrderProcessor::_statusCanBeProcessed($status); //проверяет можно ли запускать процесс получения ключей 3.1 - количество товаров в заказе должно быть больше 0 3.2 - self::$_user_id не равен 0 3.3 - текущий статус заказа находиться в списке статусов на получение ключей 3.4 - проверка, был ли ранее добавлен этот заказ и id позиции в корзине в DcOrder 4 - \Intaro\DigitalDistribution\OrderProcessor::_getDigitalProducts(); 4.1 - self::$_digital_basket_items[$basket_id] - собирает массив, где ключи это id позиций в корзине 4.2 - значение массива self::$_digital_basket_items[$basket_id]['IDD_*'] - массив со списком свойств, ключ это код свойства 4.3 - свойства записывають только если они начинаються на 'IDD_' 5 - \Intaro\DigitalDistribution\OrderProcessor::_processDigitalProducts(); //запуск процесса получения ключей 5.1 - проверка, массив со списком товаров self::$_digital_basket_items не должен быть пустой 5.2 - проверяет, есть ли свойство с id поставщика IDD_VENDOR_ID 5.3 - формируеться новый массив $vendor_to_basket_items[$vendor_id][$bi_id], где товары разделены на поставщиков 5.4 - процесс получения поставщиков Helper::getVendorsData() 5.5 - переберает поставщиков 5.5.1 - получает класс достави ключей Helper::getClassName 5.5.2 - создает класс доставки и передает туда даннные 5.5.2.1 - Id пользователя 5.5.2.2 - Id заказа 5.5.2.3 - массив элементов корзины 5.5.2.3.1 - ключ = id элемента корзины 5.5.2.3.2 - значение = массив со свойствами товара в корзине 5.5.3 - запуск функции getDeliveredContent - получает ключи у поставщика 5.5.4 - запуск функции deliver - рассылка ключей на почту 5.5.5 - запуск функции _allKeysSent - проверяет есть ли незавершенные позиции в DcOrder у данного заказа 5.5.5.1 - если все завершено, получаем статус Cтатус заказа "Все ключи разосланы" из свойств модуля (all_keys_sent_status) 5.5.5.2 - поменять статус заказа, на статус (all_keys_sent_status) //из истории заказов можно вызвать функцию rerequestKeyData - повторное получение ключей //процедура получени ключей после запуска функции getDeliveredContent 1 - запускаеться функция getLicences - функция начинает процедуру получение ключей у вендора 2 - $this->_dc_order->orderRecExists 3 - если заказ ранее небыл добавлен до запускаеться функция _processNewOrder по созданию заказа 4 - если заказ был добавлен то запускаеться _processExistsingOrder