это какойто тихий ужас а не апи работы со скидками и купонами
прописал так:
| Код |
|---|
$productId = $_GET['id'];
$coupon = $_GET['coupon'];//'CP-X9YAY-CYH6GV3';
$json = [];
if($USER->IsAuthorized()):
$old_price = (int)CPrice::GetBasePrice($productId)['PRICE'];
$siteId = Context::getCurrent()->getSite();
$currencyCode = CurrencyManager::getBaseCurrency();
$order = Order::create($siteId,$USER->GetID());
$order->setPersonTypeId(1);
$order->setField('CURRENCY', $currencyCode);
$basket = Basket::create($siteId);
$item = $basket->createItem('catalog', $productId);
$item->setFields(array(
'QUANTITY' => 1,
'CURRENCY' => $currencyCode,
'LID' => $siteId,
'PRODUCT_PROVIDER_CLASS' => '\CCatalogProductProvider',
));
$order->setBasket($basket);
Sale\DiscountCouponsManager::init();
Sale\DiscountCouponsManager::clear(true);
//Sale\DiscountCouponsManager::clearApply(true);
Sale\DiscountCouponsManager::add($coupon);
$discounts = $order->getDiscount();
$r = $discounts->calculate();
if ($r->isSuccess() && ($discountData = $r->getData()) && !empty($discountData) && is_array($discountData))
{
//echo var_dump($discountData);
$r = $order->applyDiscount($discountData);
if (!$r->isSuccess())
{
//echo 'Ошибка';
}
}
else
{
//echo 'error';
}
$price = $order->getPrice();
if($price && $price != $old_price):
$json['price'] = $price;
else:
endif;
else:
$json['error'] = 'Авторизуйтесь';
endif;
echo json_encode($json);
|
получается если купон дал какуюто скидку (не 100%) то мне вернется массив и там есть ключ price
но получается так - если я ввожу купон верно то мне возвращает цену со скидкой
если потом введу неверно - то мне снова вернет цену со скидкой
и только когда я второй раз введу купон неверно он уже ничего не вернет
то же самое и наоборот - если ввести неверно то ничего не вернет - если потом верно то опять ничего и если еще раз верно то тогда уже вернет цену
и как с этим работать?