24.окт.2024
Заказ. Создаем заказ из веб-формы.
Перехватываем событие веб-формы
$eventManager->addEventHandler(
'form',
'onAfterResultAdd',
'onAfterFormCreateOrder'
);
Сам обработчик
function onAfterFormCreateOrder($formId, $resId)
{
if ($formId == 2) {
Bitrix\Main\Loader::includeModule("sale");
Bitrix\Main\Loader::IncludeModule("form");
global $USER;
$arQuestions = [];
$arAnswer = [];
$resultId = $resId;
$email = '';
$name = '';
$phone = '';
$aptekaNum = '';
$pickupAddress = '';
CFormResult::GetDataByID($resultId, [], $arQuestions, $arAnswer);
\Bitrix\Main\Diag\Debug::writeToFile($arAnswer, '', 'rpoLog.txt');
foreach ($arAnswer as $code => $answer) {
switch ($code) {
case 'EMAIL' :
{
$email = array_values(array_values($answer))[0]['USER_TEXT'];
break;
}
case 'NAME' :
{
$name = array_values(array_values($answer))[0]['USER_TEXT'];
break;
}
case 'PHONE' :
{
$phone = array_values(array_values($answer))[0]['USER_TEXT'];
$phone = str_replace(['+', ' ', '(', ')', '-'], ['', '', '', '', ''], $phone);
break;
}
case 'PICKUP' :
{
$aptekaNum = array_values(array_values($answer))[0]['ANSWER_VALUE'];
$pickupAddress = array_values(array_values($answer))[0]['ANSWER_TEXT'];
break;
}
}
}
// Допустим некоторые поля приходит в запросе
$request = Context::getCurrent()->getRequest();
$siteId = Context::getCurrent()->getSite();
$currencyCode = CurrencyManager::getBaseCurrency();
// Создаёт новый заказ
$order = Order::create($siteId, $USER->isAuthorized() ? $USER->GetID() : 1);
$order->setPersonTypeId(1);
$order->setField('CURRENCY', $currencyCode);
// Создаём одну отгрузку и устанавливаем способ доставки - "Без доставки" (он служебный)
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem();
$service = Delivery\Services\Manager::getById(
Delivery\Services\EmptyDeliveryService::getEmptyDeliveryServiceId()
);
$shipment->setFields(array(
'DELIVERY_ID' => $service['ID'],
'DELIVERY_NAME' => $service['NAME'],
));
// Создаём оплату со способом #11 (онлайн оплата)
$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem();
$paySystemService = PaySystem\Manager::getObjectById(11);
$payment->setFields(array(
'PAY_SYSTEM_ID' => $paySystemService->getField("PAY_SYSTEM_ID"),
'PAY_SYSTEM_NAME' => $paySystemService->getField("NAME"),
));
// Устанавливаем свойства
$propertyCollection = $order->getPropertyCollection();
$phoneProp = $propertyCollection->getItemByOrderPropertyCode('PHONE');
$phoneProp->setValue($phone);
$nameProp = $propertyCollection->getPayerName();
$resName = $nameProp->setValue($name);
\Bitrix\Main\Diag\Debug::writeToFile($resName, '', 'rpoLog.txt');
$emailProp = $propertyCollection->getUserEmail();
$emailProp->setValue($email);
$obPickupAddress = $propertyCollection->getItemByOrderPropertyCode('PICKUP_ADDRESS');
$obPickupAddress->setValue($pickupAddress);
$obAptekaNum = $propertyCollection->getItemByOrderPropertyCode('APTEKA_NUM');
$obAptekaNum->setValue($aptekaNum);
$obIsRpoOrder = $propertyCollection->getItemByOrderPropertyCode('IS_RPO_ORDER');
$obIsRpoOrder->setValue('Y');
$order->setField("STATUS_ID", "FR");
// Сохраняем
$order->doFinalAction(true);
$order->save();
$order->getId();
// запишем в дополнительное поле 'user_ip' IP-адрес пользователя
}
}
© LazarovStudio 2017 - 20252022>
Есть что-то, что не любит ограждений ©