|
Цитата |
---|
Евгений Жуков написал: Если Вы используете CSaleOrder::DoSaveOrder, то корзину необходимо передавать в ключе BASKET_ITEMS первого параметра метода. |
Добрый день, Евгений. Она там и передаётся. Для Код |
---|
$arResult["ORDER_ID"] = (int)CSaleOrder::DoSaveOrder($arOrderDat, $arFields, 0);
|
сделал дамп Код |
---|
var_dump($arOrderDat["BASKET_ITEMS"]);
|
Вот что там: Скрытый текст |
---|
array(1) { [0]=> array(88) { ["ID"]=> string(2) "57" ["~ID"]=> string(2) "57" ["LID"]=> string(2) "s1" ["~LID"]=> string(2) "s1" ["FUSER_ID"]=> string(1) "1" ["~FUSER_ID"]=> string(1) "1" ["ORDER_ID"]=> NULL ["~ORDER_ID"]=> NULL ["PRODUCT_ID"]=> string(3) "140" ["~PRODUCT_ID"]=> string(3) "140" ["PRODUCT_PRICE_ID"]=> string(2) "17" ["~PRODUCT_PRICE_ID"]=> string(2) "17" ["NAME"]=> string(78) "Аккумуляторная дрель-шуруповёрт BOSCH PSR 10,8 LI" ["~NAME"]=> string(78) "Аккумуляторная дрель-шуруповёрт BOSCH PSR 10,8 LI" ["PRICE"]=> string(9) "2979.0000" ["~PRICE"]=> string(9) "2979.0000" ["CURRENCY"]=> string(3) "RUB" ["~CURRENCY"]=> string(3) "RUB" ["BASE_PRICE"]=> float(3310) ["~BASE_PRICE"]=> string(9) "3310.0000" ["VAT_INCLUDED"]=> string(1) "Y" ["~VAT_INCLUDED"]=> string(1) "Y" ["DATE_INSERT"]=> object(Bitrix\Main\Type\DateTime)#682 (1) { ["value":protected]=> object(DateTime)#683 (3) { ["date"]=> string(26) "2016-09-19 15:53:09.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Moscow" } } ["~DATE_INSERT"]=> object(Bitrix\Main\Type\DateTime)#682 (1) { ["value":protected]=> object(DateTime)#683 (3) { ["date"]=> string(26) "2016-09-19 15:53:09.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Moscow" } } ["DATE_UPDATE"]=> object(Bitrix\Main\Type\DateTime)#684 (1) { ["value":protected]=> object(DateTime)#685 (3) { ["date"]=> string(26) "2016-09-19 15:53:09.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Moscow" } } ["~DATE_UPDATE"]=> object(Bitrix\Main\Type\DateTime)#684 (1) { ["value":protected]=> object(DateTime)#685 (3) { ["date"]=> string(26) "2016-09-19 15:53:09.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Moscow" } } ["WEIGHT"]=> string(4) "0.00" ["~WEIGHT"]=> string(4) "0.00" ["QUANTITY"]=> float(1) ["~QUANTITY"]=> float(1) ["DELAY"]=> string(1) "N" ["~DELAY"]=> string(1) "N" ["CAN_BUY"]=> string(1) "Y" ["~CAN_BUY"]=> string(1) "Y" ["MODULE"]=> string(7) "catalog" ["~MODULE"]=> string(7) "catalog" ["PRODUCT_PROVIDER_CLASS"]=> string(23) "CCatalogProductProvider" ["~PRODUCT_PROVIDER_CLASS"]=> string(23) "CCatalogProductProvider" ["NOTES"]=> string(27) "Розничная цена" ["~NOTES"]=> string(27) "Розничная цена" ["DETAIL_PAGE_URL"]=> string(64) "/catalog/akkumuljatornye-shurupoverty-i-dreli/bosch-psr-10-8-li/" ["~DETAIL_PAGE_URL"]=> string(64) "/catalog/akkumuljatornye-shurupoverty-i-dreli/bosch-psr-10-8-li/" ["DISCOUNT_PRICE"]=> float(331) ["~DISCOUNT_PRICE"]=> string(8) "331.0000" ["CATALOG_XML_ID"]=> string(10) "catalog_s1" ["~CATALOG_XML_ID"]=> string(10) "catalog_s1" ["PRODUCT_XML_ID"]=> string(7) "prod_29" ["~PRODUCT_XML_ID"]=> string(7) "prod_29" ["DISCOUNT_NAME"]=> string(16) "[1] Скидка" ["~DISCOUNT_NAME"]=> string(16) "[1] Скидка" ["DISCOUNT_VALUE"]=> string(3) "10%" ["~DISCOUNT_VALUE"]=> string(3) "10%" ["DISCOUNT_COUPON"]=> string(0) "" ["~DISCOUNT_COUPON"]=> string(0) "" ["VAT_RATE"]=> string(6) "0.0000" ["~VAT_RATE"]=> string(6) "0.0000" ["SUBSCRIBE"]=> string(1) "N" ["~SUBSCRIBE"]=> string(1) "N" ["RESERVED"]=> string(1) "N" ["~RESERVED"]=> string(1) "N" ["RESERVE_QUANTITY"]=> NULL ["~RESERVE_QUANTITY"]=> NULL ["BARCODE_MULTI"]=> string(1) "N" ["~BARCODE_MULTI"]=> string(1) "N" ["CUSTOM_PRICE"]=> string(1) "N" ["~CUSTOM_PRICE"]=> string(1) "N" ["DIMENSIONS"]=> string(128) "a:3:{s:5:"WIDTH";s:1:"0";s:6:"HEIGHT";s:1:"0";s:6:"LENGTH";s:1:"0";}" ["~DIMENSIONS"]=> string(68) "a:3:{s:5:"WIDTH";s:1:"0";s:6:"HEIGHT";s:1:"0";s:6:"LENGTH";s:1:"0";}" ["TYPE"]=> string(1) "0" ["~TYPE"]=> string(1) "0" ["SET_PARENT_ID"]=> NULL ["~SET_PARENT_ID"]=> NULL ["MEASURE_CODE"]=> string(3) "796" ["~MEASURE_CODE"]=> string(3) "796" ["MEASURE_NAME"]=> string(4) "шт" ["~MEASURE_NAME"]=> string(4) "шт" ["CALLBACK_FUNC"]=> NULL ["~CALLBACK_FUNC"]=> NULL ["ORDER_CALLBACK_FUNC"]=> NULL ["~ORDER_CALLBACK_FUNC"]=> NULL ["CANCEL_CALLBACK_FUNC"]=> NULL ["~CANCEL_CALLBACK_FUNC"]=> NULL ["PAY_CALLBACK_FUNC"]=> NULL ["~PAY_CALLBACK_FUNC"]=> NULL ["RECOMMENDATION"]=> NULL ["~RECOMMENDATION"]=> NULL ["SORT"]=> string(3) "100" ["~SORT"]=> string(3) "100" } } |
Цитата |
---|
Евгений Жуков написал: CSaleBasket::OrderBasket не нужен вообще. |
ок, я его закоментировал Ситуация та же... заказы без скидки на всякий случай ещё раз выкладываю сам код: Скрытый текст |
---|
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); require(dirname(__FILE__)."/lang/".LANGUAGE_ID."/script.php");
if(!CModule::IncludeModule("sale") || !CModule::IncludeModule("iblock") || !CModule::IncludeModule("catalog") || !CModule::IncludeModule("currency")) die();
var_dump(\Bitrix\Sale\Compatible\DiscountCompatibility::isUsed()); \Bitrix\Sale\Compatible\DiscountCompatibility::revertUsageCompatible(); var_dump(\Bitrix\Sale\Compatible\DiscountCompatibility::isUsed());
if($_SERVER["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest" && $_POST["METHOD"] == "boc") {
$error = "";
$REQUIRED = array(); $REQUIRED = explode("/", $_POST["REQUIRED"]);
if(empty($REQUIRED) || in_array("NAME", $REQUIRED)): if(!isset($_POST["NAME"]) || !strlen($_POST["NAME"])) { $error .= GetMessage("NAME_NOT_FILLED")."<br />"; $return = true; } endif;
if(empty($REQUIRED) || in_array("TEL", $REQUIRED)): if(!isset($_POST["TEL"]) || !strlen($_POST["TEL"])) { $error .= GetMessage("TEL_NOT_FILLED")."<br />"; $return = true; } endif;
if(empty($REQUIRED) || in_array("EMAIL", $REQUIRED)): if(!isset($_POST["EMAIL"]) || !strlen($_POST["EMAIL"])) { $error .= GetMessage("EMAIL_NOT_FILLED")."<br />"; $return = true; } endif;
if(empty($REQUIRED) || in_array("MESSAGE", $REQUIRED)): if(!isset($_POST["MESSAGE"]) || !strlen($_POST["MESSAGE"])) { $error .= GetMessage("MESSAGE_NOT_FILLED")."<br />"; $return = true; } endif;
if(!$USER->IsAuthorized()): echo "<script>$('#boc_captcha_word_".$_POST["ELEMENT_CODE"].$_POST["ELEMENT_ID"]."').attr('value', '');</script>"; if(!$APPLICATION->CaptchaCheckCode($_POST["captcha_word"], $_POST["captcha_sid"])) { $error .= GetMessage("WRONG_CAPTCHA")."<br />"; $return = true; } endif;
if($return == true) { if(!$USER->IsAuthorized()) { $cCode = $APPLICATION->CaptchaGetCode(); echo "<script>$('#boc_cImg_".$_POST["ELEMENT_CODE"].$_POST["ELEMENT_ID"]."').attr('src','/bitrix/tools/captcha.php?captcha_sid=".$cCode."');$('#boc_captcha_sid_".$_POST["ELEMENT_CODE"].$_POST["ELEMENT_ID"]."').val('".$cCode."');</script>"; } echo "<span class='alertMsg bad'><i class='fa fa-times'></i><span class='text'>".$error."</span></span>"; return; }
$_POST["NAME"] = iconv("UTF-8", SITE_CHARSET, strip_tags(trim($_POST["NAME"]))); $_POST["TEL"] = iconv("UTF-8", SITE_CHARSET, strip_tags(trim($_POST["TEL"]))); $_POST["EMAIL"] = iconv("UTF-8", SITE_CHARSET, strip_tags(trim($_POST["EMAIL"]))); $_POST["MESSAGE"] = iconv("UTF-8", SITE_CHARSET, strip_tags(trim($_POST["MESSAGE"]))); /***USER_REGISTER***/ global $USER, $APPLICATION; $register_new_user = $send_letter = false; /***USER_NOT_AUTHORIZED***/ if(!$USER->IsAuthorized()) { $new_login = "user_".time(); $new_email = $new_login."@".$new_login.".com"; $register_new_user = true;
if(!empty($_POST["EMAIL"])) $send_letter = true; if($register_new_user) { $use_captcha = COption::GetOptionString("main", "captcha_registration", "N"); if($use_captcha == "Y") COption::SetOptionString("main", "captcha_registration", "N"); $new_password = randString(10);
$use_email_confirm = COption::GetOptionString("main", "new_user_registration_email_confirmation", "N"); if($use_email_confirm == "Y") COption::SetOptionString("main", "new_user_registration_email_confirmation", "N"); $newUser = $USER->Register($new_login, $_POST["NAME"], "", $new_password, $new_password, $new_email); if($use_captcha == "Y") COption::SetOptionString("main", "captcha_registration", "Y");
if($use_email_confirm == "Y") COption::SetOptionString("main", "new_user_registration_email_confirmation", "Y"); if($newUser["TYPE"] != "ERROR") { $registeredUserID = $USER->GetID(); } } /***USER_AUTHORIZED***/ } else { $send_letter = true; $registeredUserID = $USER->GetID(); }
$basketUserID = CSaleBasket::GetBasketUserID(); /***CREATE_ORDER***/ if($_POST["buyMode"] == "ONE") { CSaleBasket::DeleteAll($basketUserID); $arProps = array(); if(isset($_POST["element_props"]) && !empty($_POST["element_props"])): $arPropsBefore = unserialize(gzuncompress(stripslashes(base64_decode(strtr($_POST["element_props"], "-_,", "+/="))))); foreach($arPropsBefore as $arProp): $arProps[] = $arProp; endforeach; endif; if(isset($_POST["element_select_props"]) && !empty($_POST["element_select_props"])): $select_props = explode("||", $_POST["element_select_props"]); foreach($select_props as $arSelProp): $arProps[] = unserialize(gzuncompress(stripslashes(base64_decode(strtr($arSelProp, "-_,", "+/="))))); endforeach; endif;
Add2BasketByProductID($_POST["ELEMENT_ID"], $_POST["quantity"], array(), $arProps); } global $USER; CSaleBasket::UpdateBasketPrices($USER->GetID(), SITE_ID);
$dbBasketItems = CSaleBasket::GetList( array("ID" => "ASC"), array( "FUSER_ID" => $basketUserID, "LID" => SITE_ID, "ORDER_ID" => "NULL", "DELAY" => "N" ), false, false, array() );
while($arItem = $dbBasketItems->GetNext()) { if($arItem["VAT_RATE"] > 0) { $arResult["bUsingVat"] = "Y"; } $arResult["BASKET_ITEMS"][] = $arItem; }
/***PERSON_TYPE***/ $personTypeId = intval($_POST["personTypeId"]) > 0 ? $_POST["personTypeId"] : 0; if($personTypeId <= 0) { $obPersonType = CSalePersonType::GetList( array("SORT" => "ASC"), array("LID" => SITE_ID, "ACTIVE" => "Y"), false, array("nTopCount" => "1"), array("ID", "NAME") ); if($arPersonType = $obPersonType->Fetch()) { $personTypeId = $arPersonType["ID"]; } } /***DELIVERY***/ $deliveryId = intval($_POST["deliveryId"]) > 0 ? $_POST["deliveryId"] : 0; if($deliveryId <= 0) { $obDelivery = CSaleDelivery::GetList( array("SORT" => "ASC"), array("LID" => SITE_ID, "ACTIVE" => "Y"), false, array("nTopCount" => "1"), array("ID", "NAME") ); if($arDelivery = $obDelivery->Fetch()) { $deliveryId = $arDelivery["ID"]; } } //$deliveryId = intval($deliveryId) > 0 ? \Bitrix\Sale\Delivery\Services\Table::getCodeById($deliveryId) : ""; /***PAYSYSTEM***/ $paysystemId = intval($_POST["paysystemId"]) > 0 ? $_POST["paysystemId"] : 0; if($paysystemId <= 0) { $obPaySystem = CSalePaySystem::GetList( array("SORT" => "ASC"), array("LID" => SITE_ID, "ACTIVE" => "Y"), false, array("nTopCount" => "1"), array("ID", "NAME") ); if($arPaySystem = $obPaySystem->Fetch()) { $paysystemId = $arPaySystem["ID"]; } } /***ORDER_PROPS***/ $orderProps = array( $_POST["propNameId"] => $_POST["NAME"], $_POST["propTelId"] => $_POST["TEL"], $_POST["propEmailId"] => $_POST["EMAIL"] ); $obOrderProps = CSaleOrderProps::GetList( array("SORT" => "ASC"), array("PERSON_TYPE_ID" => $personTypeId), false, false, array() ); while($arOrderProp = $obOrderProps->Fetch()) { if($arOrderProp["TYPE"] == "LOCATION") { $orderProps[$arOrderProp["ID"]] = ""; } if($arOrderProp["CODE"] == "CITY") { $orderProps[$arOrderProp["ID"]] = ""; } } /***CALCULATE_ORDER***/ $arOrderDat = CSaleOrder::DoCalculateOrder( SITE_ID, $registeredUserID, $arResult["BASKET_ITEMS"], $personTypeId, $orderProps, $deliveryId, $paysystemId, array(), $arErrors, $arWarnings );
$arResult["BASE_LANG_CURRENCY"] = CSaleLang::GetLangCurrency(SITE_ID);
$arResult["ORDER_PRICE"] = $arOrderDat["ORDER_PRICE"]; $arResult["ORDER_PRICE_FORMATED"] = SaleFormatCurrency($arResult["ORDER_PRICE"], $arResult["BASE_LANG_CURRENCY"]);
$arResult["USE_VAT"] = $arOrderDat["USE_VAT"]; $arResult["VAT_SUM"] = $arOrderDat["VAT_SUM"]; $arResult["VAT_SUM_FORMATED"] = SaleFormatCurrency($arResult["VAT_SUM"], $arResult["BASE_LANG_CURRENCY"]);
$arResult["TAX_PRICE"] = $arOrderDat["TAX_PRICE"]; $arResult["TAX_LIST"] = $arOrderDat["TAX_LIST"];
$arResult["DISCOUNT_PRICE"] = $arOrderDat["DISCOUNT_PRICE"];
$arResult["DELIVERY_PRICE"] = $arOrderDat["PRICE_DELIVERY"]; $arResult["DELIVERY_PRICE_FORMATED"] = SaleFormatCurrency($arOrderDat["DELIVERY_PRICE"], $arResult["BASE_LANG_CURRENCY"]);
$arResult["BASKET_ITEMS"] = $arOrderDat["BASKET_ITEMS"];
$orderTotalSum = $arResult["ORDER_PRICE"] + $arResult["DELIVERY_PRICE"] + $arResult["TAX_PRICE"] - $arResult["DISCOUNT_PRICE"];
$arFields = array( "LID" => SITE_ID, "PERSON_TYPE_ID" => $personTypeId, "PAYED" => "N", "CANCELED" => "N", "STATUS_ID" => "N", "PRICE" => $orderTotalSum, "CURRENCY" => $arResult["BASE_LANG_CURRENCY"], "USER_ID" => $registeredUserID, "PAY_SYSTEM_ID" => $paysystemId, "PRICE_DELIVERY" => $arResult["DELIVERY_PRICE"], "DELIVERY_ID" => $deliveryId, "DISCOUNT_VALUE" => $arResult["DISCOUNT_PRICE"], "TAX_VALUE" => $arResult["bUsingVat"] == "Y" ? $arResult["VAT_SUM"] : $arResult["TAX_PRICE"], "USER_DESCRIPTION" => !empty($_POST["MESSAGE"]) ? $_POST["MESSAGE"] : "", "COMMENTS" => GetMessage("ORDER_COMMENT") ); /***STAT_GID***/ if(CModule::IncludeModule("statistic")) $arFields["STAT_GID"] = CStatistic::GetEventParam();
/***AFFILIATE_ID***/ $affiliateID = CSaleAffiliate::GetAffiliate(); if($affiliateID > 0) { $dbAffiliat = CSaleAffiliate::GetList(array(), array("SITE_ID" => SITE_ID, "ID" => $affiliateID)); $arAffiliates = $dbAffiliat->Fetch(); if(count($arAffiliates) > 1) $arFields["AFFILIATE_ID"] = $affiliateID; } else $arFields["AFFILIATE_ID"] = false; /***SAVE_ORDER***/ var_dump($arOrderDat["BASKET_ITEMS"]); $arResult["ORDER_ID"] = (int)CSaleOrder::DoSaveOrder($arOrderDat, $arFields, 0);
/* //Применение скидок на товары в корзинах $arOrderNew = array( 'SITE_ID' => SITE_ID, 'USER_ID' => $USER->GetID(), 'BASKET_ITEMS' => $tmp ); $arOptions = array(); $arErrors = array(); CSaleDiscount::DoProcessOrder($arOrderNew, $arOptions, $arErrors); */
$arOrder = array(); if($arResult["ORDER_ID"] > 0) { $arOrder = CSaleOrder::GetByID($arResult["ORDER_ID"]); //CSaleBasket::OrderBasket($arResult["ORDER_ID"], $basketUserID, SITE_ID, false);
/***MESSAGE***/ echo "<span class='alertMsg good'><i class='fa fa-check'></i><span class='text'>".GetMessage("ORDER_CREATE_SUCCESS")."</span></span>"; echo "<script>$('#boc_".$_POST["ELEMENT_CODE"].$_POST["ELEMENT_ID"]." .btn_buy').prop('disabled', true);</script>";
/***LOGOUT_NEW_USER***/ if($register_new_user) { $USER->Logout(); }
/***MAIL_MESSAGE***/ $strOrderList = ""; $arBasketList = array(); global $USER; CSaleBasket::UpdateBasketPrices($USER->GetID(), SITE_ID);
$dbBasketItems = CSaleBasket::GetList( array("ID" => "ASC"), array("ORDER_ID" => $arResult["ORDER_ID"]), false, false, array("ID", "PRODUCT_ID", "NAME", "QUANTITY", "PRICE", "CURRENCY", "TYPE", "SET_PARENT_ID") ); while($arItem = $dbBasketItems->Fetch()) { $arBasketList[] = $arItem; }
$arBasketList = getMeasures($arBasketList);
foreach($arBasketList as $arItem) { $measureText = (isset($arItem["MEASURE_TEXT"]) && strlen($arItem["MEASURE_TEXT"])) ? $arItem["MEASURE_TEXT"] : GetMessage("SOA_SHT");
$strOrderList .= $arItem["NAME"]." - ".$arItem["QUANTITY"]." ".$measureText.": ".SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"]); $strOrderList .= "\n"; }
$email = ""; $bcc = array(); $duplicate = "N"; if(isset($_POST["dubLetter"]) && 0 < strlen($_POST["dubLetter"])) { $rsSites = CSite::GetList($by = "sort", $order = "desc", Array("ACTIVE" => "Y")); while($arSite = $rsSites->Fetch()) { if(strpos($_POST["dubLetter"], "default_".$arSite["LID"]) !== false) { $default_email = $arSite["EMAIL"]; if(!empty($default_email)) $bcc[] = $default_email; } }
if(strpos($_POST["dubLetter"], "admin") !== false) { $admin_email = COption::GetOptionString("main", "email_from", ""); if(!empty($admin_email)) $bcc[] = $admin_email; }
if(strpos($_POST["dubLetter"], "sales") !== false) { $sales_email = COption::GetOptionString("sale", "order_email", ""); if(!empty($sales_email)) $bcc[] = $sales_email; }
if(strpos($_POST["dubLetter"], "dub") !== false) { $dub_email = COption::GetOptionString("main", "all_bcc", ""); if(!empty($dub_email)) $duplicate = "Y"; } } $bcc = array_unique($bcc);
if($send_letter) { $email = $_POST["EMAIL"]; } else { if(empty($bcc)) { if($duplicate == "Y") $email = COption::GetOptionString("main", "all_bcc", ""); } else $email = array_shift($bcc); }
if(strlen($email) > 0) { $arFields = Array( "ORDER_ID" => $arOrder["ACCOUNT_NUMBER"], "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", SITE_ID))), "ORDER_USER" => $_POST["NAME"], "PRICE" => SaleFormatCurrency($orderTotalSum, $arResult["BASE_LANG_CURRENCY"]), "BCC" => !empty($bcc) ? implode(",", $bcc) : "", "EMAIL" => $email, "ORDER_LIST" => $strOrderList, "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "sales@".$SERVER_NAME), "DELIVERY_PRICE" => $arResult["DELIVERY_PRICE"], );
$eventName = "SALE_NEW_ORDER"; $event = new CEvent; $event->Send($eventName, SITE_ID, $arFields, "N"); }
CSaleMobileOrderPush::send("ORDER_CREATED", array("ORDER_ID" => $arFields["ORDER_ID"]));
/***STATISTIC***/ if(CModule::IncludeModule("statistic")) { $event1 = "eStore"; $event2 = "order_confirm"; $event3 = $arResult["ORDER_ID"];
$e = $event1."/".$event2."/".$event3;
if(!is_array($_SESSION["ORDER_EVENTS"]) || (is_array($_SESSION["ORDER_EVENTS"]) && !in_array($e, $_SESSION["ORDER_EVENTS"]))) { CStatistic::Set_Event($event1, $event2, $event3); $_SESSION["ORDER_EVENTS"][] = $e; } } } else { /***MESSAGE***/ echo "<span class='alertMsg bad'><i class='fa fa-times'></i><span class='text'>".GetMessage("ORDER_CREATE_ERROR")."</span></span>"; /***LOGOUT_NEW_USER***/ if($register_new_user) { $USER->Logout(); } } } ?> |
|