Skip to content

Instantly share code, notes, and snippets.

@igoogle
Last active July 30, 2018 10:11
Show Gist options
  • Save igoogle/5a1ef4a97adcf174654792aa819b3249 to your computer and use it in GitHub Desktop.
Save igoogle/5a1ef4a97adcf174654792aa819b3249 to your computer and use it in GitHub Desktop.
<? 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