Отправка уведомлений магазина

Модуль расширенного управления меню для битрикс

Декабрь 19, 2019

Теги: Магазин

Отправка уведомлений магазина: сообщений о новом заказе, оплате и других.

Хотя сообщение о новом заказе отправляется пользователю автоматически, иногда необходимо отправить его вручную, например, при оплате заказа, если при создании заказа мы это сообщение отменили с помощью событий. Сделать это короткими методами, к сожалению, нельзя система разрешает отправлять его только для новых заказов.

Класс для отправки сообщения о новом заказе:


<?


namespace 
Partner;

class 
SaleNotifyCustom
{
    function 
sendOrderNew(\Bitrix\Sale\Order $order)
    {
        
$basketList '';
        
/** @var Basket $basket */
        
$basket $order->getBasket();
        if (
$basket)
        {
            
$basketTextList $basket->getListOfFormatText();
            if (!empty(
$basketTextList))
            {
                foreach (
$basketTextList as $basketItemCode => $basketItemData)
                {
                    
$basketList .= $basketItemData.$separator;
                }
            }
        }

        
$fields = Array(
            
"ORDER_ID" => $order->getField("ACCOUNT_NUMBER"),
            
"ORDER_REAL_ID" => $order->getField("ID"),
            
"ORDER_ACCOUNT_NUMBER_ENCODE" => urlencode(urlencode($order->getField("ACCOUNT_NUMBER"))),
            
"ORDER_DATE" => $order->getDateInsert()->toString(),
            
"ORDER_USER" => self::getUserName($order),
            
"PRICE" => \SaleFormatCurrency($order->getPrice(), $order->getCurrency()),
            
"BCC" => \Bitrix\Main\Config\Option::get("sale""order_email""order@".$_SERVER["SERVER_NAME"]),
            
"EMAIL" => self::getUserEmail($order),
            
"ORDER_LIST" => $basketList,
            
"SALE_EMAIL" => \Bitrix\Main\Config\Option::get("sale""order_email""order@".$_SERVER["SERVER_NAME"]),
            
"DELIVERY_PRICE" => $order->getDeliveryPrice(),
            
"ORDER_PUBLIC_URL" => \Bitrix\Sale\Helpers\Order::isAllowGuestView($order) ? \Bitrix\Sale\Helpers\Order::getPublicLink($order) : ""
        
);

        
$send true;

        foreach(\
GetModuleEvents("sale", \Bitrix\Sale\Notify::EVENT_ON_ORDER_NEW_SEND_EMAILtrue) as $oldEvent)
        {
            if (
ExecuteModuleEventEx($oldEvent, array($order->getId(), &$eventName, &$fields)) === false)
            {
                
$send false;
            }
        }

        
$siteData = \Bitrix\Main\SiteTable::GetById($order->getSiteId())->fetch();

        if(
$send)
        {
            
$event = new \CEvent;
            
$event->Send('SALE_NEW_ORDER'$order->getField('LID'), $fields"Y""", array(),$siteData['LANGUAGE_ID']);
        }
    }

    function 
getUserEmail(\Bitrix\Sale\Order $order)
    {
        
/** @var PropertyValueCollection $propertyCollection */
        
if ($propertyCollection $order->getPropertyCollection())
        {
            if (
$propUserEmail $propertyCollection->getUserEmail())
            {
                
$userEmail $propUserEmail->getValue();
            }
        }

        if (empty(
$userEmail))
        {
            
$userRes Main\UserTable::getList(array(
                
'select' => array('ID''LOGIN''NAME''LAST_NAME''SECOND_NAME''EMAIL'),
                
'filter' => array('=ID' => $order->getUserId()),
            ));
            if (
$userData $userRes->fetch())
            {
                
$userEmail $userData['EMAIL'];
            }
        }
        return 
$userEmail;
    }

    function 
getUserName(\Bitrix\Sale\Order $order)
    {
        
/** @var PropertyValueCollection $propertyCollection */
        
if ($propertyCollection $order->getPropertyCollection())
        {
            if (
$propPayerName $propertyCollection->getPayerName())
            {
                
$userName $propPayerName->getValue();
            }
        }
        if (empty(
$userName))
        {
            
$userRes = \Bitrix\Main\UserTable::getList(array(
                
'select' => array('ID''LOGIN''NAME''LAST_NAME''SECOND_NAME''EMAIL'),
                
'filter' => array('=ID' => $order->getUserId()),
            ));
            if (
$userData $userRes->fetch())
            {
                
$userData['PAYER_NAME'] = \CUser::FormatName(\CSite::GetNameFormat(null$order->getSiteId()), $userDatatrue);
                
$userName $userData['PAYER_NAME'];
            }
        }
        return 
$userName;
    }
}

Использование (в переменной $order должен быть объект заказа):


\Partner\SaleNotifyCustom::sendOrderNew($order);

Отправка сообщения об отмене заказа (отправить можно, только если заказ действительно отменен и только один раз, поэтому использовать в таком виде его вряд ли получится, но можно взять исходный код):


$order = \Bitrix\Sale\Order::load(9184);

\
Bitrix\Sale\Notify::sendOrderCancel($order);

Отправка сообщения о том, что заказ оплачен (аналогично предыдущему методу):


$order = \Bitrix\Sale\Order::load(9184);

\
Bitrix\Sale\Notify::sendOrderPaid($order);

← Переход к списку