Ноябрь 21, 2023
Теги: События, Интеграция с iiko
Для модуля Интеграция с iiko. Установка типа заказа при отправке заказа в iiko.
Используется событие модуля "OnBuildIikoOrderBody".
<?php
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'grain.iiko',
'OnBuildIikoOrderBody',
'\Partner\SetOrderType::onBuildIikoOrderBody'
);
// список типов заказа можно получить так:
// \Bitrix\Main\Loader::includeModule('grain.iiko');
// $account = Grain\Iiko\Rest::getAccount(ИД ресторана);
// print_r(Grain\Iiko\Rest\v1::query('/deliveries/order_types',array("organizationIds"=>["ИД организации = внешний код ресторана"]),"POST",$account));
class SetOrderType
{
public static function onBuildIikoOrderBody(\Bitrix\Main\Event $event)
{
$restaurant = $event->getParameter('RESTAURANT');
$order = $event->getParameter('ORDER');
$params = $event->getParameter('PARAMS');
$body = $event->getParameter('BODY');
foreach ($event->getResults() as $eventResult) // получение данных после другого обработчика, если он был
{
if($eventResult->getType() == \Bitrix\Main\EventResult::ERROR)
continue;
if($eventResult->getParameters())
$body = $eventResult->getParameters();
}
$account = \Grain\Iiko\Rest::getAccount($restaurant['ID']);
if($account['API_VERSION']==1)
{
if(isset($body['order']['orderServiceType']))
// to prevent error:
// INVALID_BODY_JSON_FORMAT Only one of this fields required: orderTypeId or orderServiceType.
{
if($body['order']['orderServiceType']=='DeliveryByCourier')
{
$body['order']['orderTypeId'] = '16067ea3-356f-eb93-9d14-1fa00d082c4e';
}
else
{
$body['order']['orderTypeId'] = '3b1508f9-fe5b-d6af-cb8d-043af587d5c2';
}
unset($body['order']['orderServiceType']);
}
}
$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $body);
return $result;
}
}