Всем доброго дня!
Столкнулся с очередным шайтанизмом битрикса, требуется помощь коллективного разума, сам уже не понимаю куда копать.
В карточке товара есть покупка в 1 клик, открывается popup, заполняется телефон, жмется кнопка и уходят ajax запрос на oneClickBuy.php
Задача, пробить номер телефона по базе скидок, и если он найден, вернуть % скидки.
Далее по этому % применить купон правил корзины.
Встрял на применении купона.
Как только я не танцевал с кодом, ничего не получалось.
В итоге решил вынести для более удобной отладки в отдельный файл со статичным id заказа и всё сразу заработало...
Вот код файла, в котором применяется купон с кодом pl_10 применяется к заказу 13233
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
use Bitrix\Main\Loader;
use Bitrix\Sale\DiscountCouponsManager;
use Bitrix\Sale;
$orderId = 13233;
$coupon = "pl_10";
if(isset($coupon)){
$couponinfo = DiscountCouponsManager::getData($coupon, true);
if ($couponinfo['ACTIVE'] == 'Y') {
$discountOrder = Sale\Order::load($orderId);
Sale\DiscountCouponsManager::add($coupon);
$discounts = $discountOrder->getDiscount();
$discounts->calculate();
$discountOrder->refreshData();
$discountOrder->save();
}
}
Вставляю этот код в oneclickBuy.php почти в самый конец, перед
$arResult["ORDER_ID"] = $orderId;
die(\Bitrix\Main\Web\Json::encode($arResult));
И купон не применяется к заказу.
Никаких ошибок нет, просто стоимость в заказе остается прежней.
if(isset($coupon)){
$file = "/@del/coupon.log";
Diag\Debug::writeToFile("coupon ".$coupon." found", "", $file);
$couponinfo = DiscountCouponsManager::getData($coupon, true);
if ($couponinfo['ACTIVE'] == 'Y') {
Diag\Debug::writeToFile("coupon ".$coupon." active", "", $file);
$discountOrder = Sale\Order::load($orderId);
Sale\DiscountCouponsManager::add($coupon);
$discounts = $discountOrder->getDiscount();
$discounts->calculate();
$discountOrder->refreshData();
$discountOrder->save();
Diag\Debug::writeToFile("coupon ".$coupon." for order id ".$orderId." saved", "", $file);
Diag\Debug::writeToFile("errors: ".print_r(Sale\DiscountCouponsManager::getErrors(),true), "", $file);
}
Diag\Debug::writeToFile("done", "", $file);
}
coupon pl_10 found
coupon pl_10 active
coupon pl_10 for order id 13233 saved
errors: Array
(
)
done
Т.е. все переменные подставляются, ошибок нет...
Как так?
Куда копать?