-
-
Save igoogle/5a1ef4a97adcf174654792aa819b3249 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); ?> | |
<? | |
CModule::IncludeModule("sale"); | |
CModule::IncludeModule("catalog"); | |
if (isset($_POST['NAME']) && !empty($_POST['NAME'])) { | |
$name = $_POST['NAME']; | |
} | |
if (isset($_POST['EMAIL']) && !empty($_POST['EMAIL'])) { | |
$email = $_POST['EMAIL']; | |
} | |
if (isset($_POST['PHONE']) && !empty($_POST['PHONE'])) { | |
$phone = $_POST['PHONE']; | |
} | |
if (isset($_POST['QUANTITY']) && !empty($_POST['QUANTITY'])) { | |
$quantity = $_POST['QUANTITY']; | |
} else { | |
$quantity = 1; | |
} | |
if (isset($_POST['FAST']) && !empty($_POST['FAST'])) { | |
$description = "Быстрый заказ товара"; | |
} else { | |
$description = "Заказ товара"; | |
} | |
if ($email && !filter_var($email, FILTER_VALIDATE_EMAIL)) { | |
echo json_encode(array('status' => 'error', 'message' => 'Некорректно заполнено поле E-mail'), true); | |
die; | |
} elseif ($email) { | |
$arUsersFilter = array('EMAIL' => trim($email)); | |
if ($GLOBALS['USER']->IsAuthorized()) { | |
$arUsersFilter['!ID'] = $GLOBALS['USER']->GetID(); | |
} | |
$rsUsers = CUser::GetList($by = "", $order = "", $arUsersFilter); | |
if ($rsUsers->Fetch()) { | |
echo json_encode(array('status' => 'error', 'message' => 'Указанный E-mail уже используется на сайте, укажите другой или авторизуйтесь'), true); | |
die; | |
} | |
} | |
if (isset($_POST['USER_ID']) && !empty($_POST['USER_ID'])) { | |
$user_id = $_POST['USER_ID']; | |
} else { | |
$login = ($email) ? $email : $phone; | |
$arUsersFilter = array('LOGIN' => trim($login)); | |
$rsUsers = CUser::GetList($by = "", $order = "", $arUsersFilter); | |
if ($rsUsers->Fetch()) { | |
$loginMessage = ($email) ? 'E-mail' : 'телефон'; | |
echo json_encode(array('status' => 'error', 'message' => 'Указанный ' . $loginMessage . ' уже используется на сайте в качестве логина пользователя, укажите другой или авторизуйтесь'), | |
true); | |
die; | |
} | |
$pass = rand(100000, 999999); | |
$groups = array(3); | |
$user_id = $USER->Add(array( | |
"NAME" => $name, | |
"EMAIL" => $email, | |
"LOGIN" => $login, | |
"PERSONAL_PHONE" => $phone, | |
"LID" => "ru", | |
"ACTIVE" => "Y", | |
"GROUP_ID" => $groups, | |
"PASSWORD" => $pass, | |
"CONFIRM_PASSWORD" => $pass, | |
)); | |
$USER->Authorize($user_id, true); | |
} | |
$discountValue = getDiscountPrice(); | |
$arProduct = CCatalogProduct::GetByIDEx($_POST['ELEMENT_ID']); | |
$ORDER_ID = CSaleOrder::Add(array( | |
"LID" => SITE_ID, | |
"PERSON_TYPE_ID" => 1, | |
"PAYED" => "N", | |
"CANCELED" => "N", | |
"STATUS_ID" => "N", | |
"PRICE" => $arProduct['PRICES'][1]['PRICE'], | |
"CURRENCY" => "RUB", | |
"USER_ID" => $user_id, | |
"PAY_SYSTEM_ID" => 1, | |
"PRICE_DELIVERY" => 0, | |
"DELIVERY_ID" => 1, | |
"TAX_VALUE" => 0.0, | |
"USER_DESCRIPTION" => $description . ' ' . $arProduct['NAME'] | |
)); | |
/* Пересёт заказа */ | |
/* | |
$order = \Bitrix\Sale\Order::load($ORDER_ID); | |
$discount = $order->getDiscount(); | |
\Bitrix\Sale\DiscountCouponsManager::clearApply(true); | |
\Bitrix\Sale\DiscountCouponsManager::useSavedCouponsForApply(true); | |
$discount->setOrderRefresh(true); | |
$discount->setApplyResult(array()); | |
if (!($basket = $order->getBasket())) | |
throw new \Bitrix\Main\ObjectNotFoundException('Entity "Basket" not found'); | |
$basket->refreshData(array('PRICE', 'COUPONS')); | |
$discount->calculate(); | |
$order->save(); | |
*/ | |
$add = Add2BasketByProductID($arProduct['ID'], | |
$quantity, | |
array( | |
"PRICE" => $arProduct['PRICES'][1]['PRICE'], | |
"CURRENCY" => "RUB", | |
"DELAY" => "N", | |
"LID" => SITE_ID, | |
"CAN_BUY" => "Y", | |
"ORDER_ID" => $ORDER_ID, | |
"NAME" => $arProduct['NAME'], | |
"MODULE" => "catalog", | |
"NOTES" => "", | |
"DETAIL_PAGE_URL" => $arProduct['DETAIL_PAGE_URL'] | |
), | |
array()); | |
$arFields = Array( | |
"ORDER_ID" => $ORDER_ID, | |
"PRICE" => $arProduct['PRICES'][1]['PRICE'], | |
"ORDER_LIST" => $arProduct['NAME'] | |
. " </br>http://" . $_SERVER["HTTP_HOST"] . $arProduct['DETAIL_PAGE_URL'] | |
. " </br>", | |
"ORDER_USER" => $name, | |
"ORDERER_PHONE" => $phone, | |
"QUANTITY" => $quantity | |
); | |
//добавляем телефон | |
$arFieldsPHONE = array( | |
"ORDER_ID" => $ORDER_ID, | |
"ORDER_PROPS_ID" => 3, | |
"NAME" => "Телефон", | |
"CODE" => "PHONE", | |
"VALUE" => $phone | |
); | |
CSaleOrderPropsValue::Add($arFieldsPHONE); | |
//добавляем ФИО | |
$arFieldsFIO = array( | |
"ORDER_ID" => $ORDER_ID, | |
"ORDER_PROPS_ID" => 1, | |
"NAME" => "Ф.И.О.", | |
"CODE" => 'FIO', | |
"VALUE" => $name | |
); | |
CSaleOrderPropsValue::Add($arFieldsFIO); | |
//добавляем E-mail | |
$arFieldsEMAIL = array( | |
"ORDER_ID" => $ORDER_ID, | |
"ORDER_PROPS_ID" => 2, | |
"NAME" => "E-mail", | |
"CODE" => 'EMAIL', | |
"VALUE" => $email | |
); | |
CSaleOrderPropsValue::Add($arFieldsEMAIL); | |
//отправка почты | |
/* | |
* todo: раскомментировать | |
$event = new CEvent; | |
$event->Send("ZAKAZ_FORM", SITE_ID, $arFields, "N"); | |
*/ | |
if ($add) { | |
// e-commerce | |
$dbBasketItems = CSaleBasket::GetList(array("ID" => "ASC"), array("ORDER_ID" => $ORDER_ID), false, false, array("*")); | |
$arBasketItem = $dbBasketItems->Fetch(); | |
$arFilter = array( | |
'IBLOCK_ID' => Registry::get('CATALOG_IBLOCK_ID'), | |
'ID' => $arBasketItem['PRODUCT_ID'] | |
); | |
$arSelect = array('ID', 'IBLOCK_ID', 'IBLOCK_SECTION_ID', 'PROPERTY_MANUFACTER', 'PROPERTY_BRAND'); | |
$rsElements = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect); | |
while ($arElement = $rsElements->GetNext()): | |
if ($arElement['PROPERTY_BRAND_VALUE']) { | |
$arBrand = CIBlockElement::GetByID($arElement['PROPERTY_BRAND_VALUE'])->Fetch(); | |
$arBasketItem['BRAND'] = $arBrand['NAME']; | |
} else { | |
$arBasketItem['BRAND'] = $arElement['PROPERTY_MANUFACTER_VALUE']; | |
} | |
$arNavChain = array(); | |
$rsNavChain = CIBlockSection::GetNavChain($arElement['IBLOCK_ID'], $arElement['IBLOCK_SECTION_ID']); | |
while ($arNavChainItem = $rsNavChain->Fetch()): | |
$arNavChain[] = $arNavChainItem['NAME']; | |
endwhile; | |
$arBasketItem['CATEGORY'] = implode('/', $arNavChain); | |
endwhile; | |
$arDataLayer = array( | |
'ecommerce' => array( | |
'purchase' => array( | |
'actionField' => array( | |
'id' => $ORDER_ID, | |
'goal_id' => '30374904' | |
), | |
'products' => array( | |
array( | |
'id' => $arProduct['ID'], | |
'name' => $arProduct['NAME'], | |
'price' => $arProduct['PRICES'][1]['PRICE'], | |
'brand' => $arBasketItem['BRAND'], | |
'category' => $arBasketItem['CATEGORY'], | |
'variant' => '', | |
'quantity' => $quantity, | |
), | |
) | |
) | |
), | |
); | |
echo json_encode(array( | |
'status' => 'success', | |
'message' => 'Ваш заказ оформлен. В ближайшее время с вами свяжется наш менеджер.', | |
'dataLayer' => $arDataLayer | |
), true); | |
} | |
//sms | |
/* todo: раскомментить | |
$arOrder = CSaleOrder::GetByID($ORDER_ID); | |
$events = GetModuleEvents("sale", "OnSaleComponentOrderOneStepComplete"); | |
while ($arEvent = $events->Fetch()) | |
ExecuteModuleEventEx($arEvent, Array($arResult["ORDER_ID"], $arOrder)); | |
*/ | |
// Удалить все товары из корзины | |
//CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID()); | |
?> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment