Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- require_once($_SERVER['DOCUMENT_ROOT']. "/bitrix/modules/main/include/prolog_before.php");
- // добавление заказа в один клик, только по имени и телефону
- CModule::IncludeModule("sale");
- CModule::IncludeModule("catalog");
- if(!empty($_REQUEST['name']) && !empty($_REQUEST['phone']))
- {
- $name = $_REQUEST['name'];
- $phone = $_REQUEST['phone'];
- if(!empty($_REQUEST['oneProduct']) && $_REQUEST['oneProduct'] == 'Y' && !empty($_REQUEST['productId']))
- {
- // заказ в один клик только одного товара
- // --- очистка корзины
- CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID());
- // --- создание пустого заказа
- $orderId = makeOrder($name,$phone);
- // --- добавление товара к заказу
- addProdToOrder($item['PRODUCT_ID'],$orderId, $item['QUANTITY']);
- // --- оформление заказа всей корзины (с одним товаром)
- $orderId = makeOrder();
- if($orderId)
- echo json_encode(array('success'=>'ok', 'order_id'=>$orderId));
- else
- echo json_encode(array('error'=>'Y'));
- }
- elseif(!empty($_REQUEST['bascetOrder']))
- {
- // заказ в один клик всей корзины
- // --- оформление заказа всей корзины (с одним товаром)
- $orderId = makeOrder($name,$phone);
- // --- достать товары текущей корзины
- $basecetItems = getBasketProducts();
- // --- добавить их в заказ
- foreach ($basecetItems as $key => $item)
- {
- addProdToOrder($item['PRODUCT_ID'],$orderId, $item['QUANTITY']);
- }
- // --- обновляем параметры заказа цена/скидка
- $strOrderList = '';
- updateOrderParams($orderId,$strOrderList);
- sendNotification($name,$phone, $strOrderList, $orderId);
- if($orderId)
- {
- echo json_encode(array('success'=>'ok', 'order_id'=>$orderId));
- // --- очистка корзины
- CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID());
- }
- else
- echo json_encode(array('error'=>'Y'));
- }
- else
- {
- echo json_encode(array('error'=>'Y'));
- }
- }
- else
- echo json_encode(array('error'=>'Не все поля заполнены'));
- // FUNCTIONS
- /**
- * Создает пустой заказ
- */
- function makeOrder($name,$phone)
- {
- global $USER;
- $arFields = array(
- "LID" => "s1",
- "PERSON_TYPE_ID" => 1,
- "PAYED" => "N",
- "CANCELED" => "N",
- "STATUS_ID" => "N",
- "PRICE" => 0,
- "CURRENCY" => "RUB",
- "USER_ID" => 1,
- "PAY_SYSTEM_ID" => 1,
- "PRICE_DELIVERY" => 0,
- "DELIVERY_ID" => 2,
- "DISCOUNT_VALUE" => 0,
- "TAX_VALUE" => 0,
- "USER_DESCRIPTION" => "Заказ в Один клик"
- );
- // add Guest ID
- if (CModule::IncludeModule("statistic"))
- $arFields["STAT_GID"] = CStatistic::GetEventParam();
- $ord = new CSaleOrder();
- $ORDER_ID = $ord->Add($arFields);
- if($ORDER_ID)
- {
- $arFields = array("ORDER_ID" => $ORDER_ID, "ORDER_PROPS_ID" => 1, "NAME" => "ФИО", "CODE" => "NAME", "VALUE" => $name );
- CSaleOrderPropsValue::Add($arFields);
- $arFields = array("ORDER_ID" => $ORDER_ID, "ORDER_PROPS_ID" => 3, "NAME" => "ФИО", "CODE" => "NAME", "VALUE" => $phone );
- CSaleOrderPropsValue::Add($arFields);
- return $ORDER_ID;
- }
- else
- echo json_encode(array('error'=>$ord->LAST_ERROR));
- }
- function getBasketProducts()
- {
- $arID = array();
- $arBasketItems = array();
- $dbBasketItems = CSaleBasket::GetList(
- array("NAME" => "ASC", "ID" => "ASC"),
- array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"),
- false,
- false,
- array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "PRODUCT_PROVIDER_CLASS")
- );
- while ($arItems = $dbBasketItems->Fetch())
- {
- if ('' != $arItems['PRODUCT_PROVIDER_CLASS'] || '' != $arItems["CALLBACK_FUNC"])
- {
- CSaleBasket::UpdatePrice(
- $arItems["ID"],
- $arItems["CALLBACK_FUNC"],
- $arItems["MODULE"],
- $arItems["PRODUCT_ID"],
- $arItems["QUANTITY"],
- "N",
- $arItems["PRODUCT_PROVIDER_CLASS"]
- );
- $arID[] = $arItems["ID"];
- }
- }
- if(!empty($arID))
- {
- $dbBasketItems = CSaleBasket::GetList(
- array("NAME" => "ASC", "ID" => "ASC"),
- array("ID" => $arID, "ORDER_ID" => "NULL"),
- false,
- false,
- array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "PRODUCT_PROVIDER_CLASS", "NAME")
- );
- while ($arItems = $dbBasketItems->Fetch())
- {
- $arBasketItems[] = $arItems;
- }
- }
- return $arBasketItems;
- }
- function addProdToOrder($productID,$orderID, $quantity=1,$weight='не задан')
- {
- $basket_props = array( array("NAME" => "Вес", "CODE" => "MASSA", "VALUE" => $weight));
- if (!Add2BasketByProductID($productID, $quantity, array('ORDER_ID' => $orderID, ), $basket_props))
- {
- $return['msg'] = 'Ошибка добавления товара в заказ';
- $fail = true;
- }
- }
- function updateOrderParams($orderId, &$strOrderList)
- {
- $dbBasketItems = CSaleBasket::GetList(
- array("NAME" => "ASC", "ID" => "ASC"),
- array("LID" => SITE_ID, "ORDER_ID" => $orderId),
- false, false,
- array("ID", "NAME", "QUANTITY", "CURRENCY", "CAN_BUY", "PRICE", "WEIGHT", "DISCOUNT_PRICE")
- );
- $summ = $weight = 0;
- $strOrderList = "";
- $arBasket = array();
- while ($arBasketItems = $dbBasketItems->GetNext())
- {
- $strOrderList .= $arBasketItems["NAME"] . " - " . $arBasketItems["QUANTITY"] . " шт на " . SaleFormatCurrency($arBasketItems["PRICE"] * $arBasketItems["QUANTITY"], $arBasketItems["CURRENCY"]);
- $strOrderList .= "\n";
- $summ += roundEx($arBasketItems["PRICE"], SALE_VALUE_PRECISION) * DoubleVal($arBasketItems["QUANTITY"]);
- $weight += doubleval($arBasketItems['WEIGHT']);
- $arBasket[] = $arBasketItems;
- }
- $arOrderForDiscount = array(
- 'SITE_ID' => SITE_ID,
- 'USER_ID' => $user_id,
- 'ORDER_PRICE' => $summ,
- 'ORDER_WEIGHT' => $weight,
- 'BASKET_ITEMS' => $arBasket,
- );
- $arDiscountOptions = array();
- $arDiscountErrors = array();
- CSaleDiscount::DoProcessOrder($arOrderForDiscount, $arDiscountOptions, $arDiscountErrors);
- $arOrderForDiscount['PRICE_BEFORE'] = $summ;
- $arOrderForDiscount['PRICE'] = $arOrderForDiscount['ORDER_PRICE'];
- $arOrderForDiscount['WEIGHT'] = $arOrderForDiscount['ORDER_WEIGHT'];
- if (!CSaleOrder::Update($ORDER_ID, $arOrderForDiscount))
- {
- $return['msg'] = 'Ошибка расчета цены заказа.';
- $fail = true;
- }
- }
- function sendNotification($name,$phone, $orderList, $ordrId)
- {
- $arEventFields = Array(
- "AUTHOR_NAME" => $name,
- "AUTHOR_PHONE" => $phone,
- "ELEMENTS" => $orderList,
- "ORDERID" => $ordrId,
- "SUMM" => ''
- );
- CEvent::SendImmediate("NEW_ONE_CLICK_ORDER", "s1", $arEventFields);
- }
Add Comment
Please, Sign In to add comment