@hoindex

Битрикс — почему не применяется купон к заказу?

Всем доброго дня!
Столкнулся с очередным шайтанизмом битрикса, требуется помощь коллективного разума, сам уже не понимаю куда копать.

В карточке товара есть покупка в 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

Т.е. все переменные подставляются, ошибок нет...
Как так?
Куда копать?
  • Вопрос задан
  • 784 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы