Добрый день
UPD:
проблема в корзине оказалась как я и подозревал поначалу.
Поскольку я все равно передаю все данные о товарах в метод создания заказа, оказалось достаточно в начало метода поместить:
CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID());
Симптом вылечил, осталось найти саму причину...
В общем спасибо за уделенное время
--------
Заказы на сайте создавались через d7, на основе методики, описанной в доке ( )
Все работало без проблем, обновили сайт (до версии БУС 18.5.180) и товары при создании заказа стали дублироваться.
Так же добавляется системная отгрузка "Без отгрузки". Но у нее стоит галочка "не показывать в административном разделе" и ее не должно быть видно.
Из консоли php код отрабатывает нормально, а если из корзины вызывать этот же код, то эта проблема снова проявляется.
Я проводил такой эксперимент: на сайте закинул 2 единицы товара, а в коде из консоли захардкодил 3 единицы того же товара. Добавилось 3 единицы кодом из консоли и еще 2 единицы непонятно чем. Причем для этих двух единиц название товара подтянулось из предложения (они отличаются немного). И так же дополнительно создалась отгрузка "Без доставки".
Это получается где-то повесился слушатель на событие создания заказа. В смысле добавился новый
Но не понятно как его найти.
Кто-нибудь сталкивался с подобным? Что тут вообще можно сделать?
Буду сильно благодарен за советы
Вот сам код, который используется для создания заказа:
UPD:
проблема в корзине оказалась как я и подозревал поначалу.
Поскольку я все равно передаю все данные о товарах в метод создания заказа, оказалось достаточно в начало метода поместить:
CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID());
Симптом вылечил, осталось найти саму причину...
В общем спасибо за уделенное время
--------
Заказы на сайте создавались через d7, на основе методики, описанной в доке ( )
Все работало без проблем, обновили сайт (до версии БУС 18.5.180) и товары при создании заказа стали дублироваться.
Так же добавляется системная отгрузка "Без отгрузки". Но у нее стоит галочка "не показывать в административном разделе" и ее не должно быть видно.
Из консоли php код отрабатывает нормально, а если из корзины вызывать этот же код, то эта проблема снова проявляется.
Я проводил такой эксперимент: на сайте закинул 2 единицы товара, а в коде из консоли захардкодил 3 единицы того же товара. Добавилось 3 единицы кодом из консоли и еще 2 единицы непонятно чем. Причем для этих двух единиц название товара подтянулось из предложения (они отличаются немного). И так же дополнительно создалась отгрузка "Без доставки".
Это получается где-то повесился слушатель на событие создания заказа. В смысле добавился новый
Но не понятно как его найти.Кто-нибудь сталкивался с подобным? Что тут вообще можно сделать?
Буду сильно благодарен за советы
Вот сам код, который используется для создания заказа:
| Код |
|---|
Bitrix\Main\Loader::includeModule('sale');
Bitrix\Main\Loader::includeModule('catalog');
global $USER;
$user_id = $USER->GetID();
$siteId = 's2' ;
$basket_data['ITEMS'] = array(
array('PRODUCT_ID' => 29091, 'NAME' => 'Убер-плюшка', 'PRICE' => 554, 'CURRENCY' => 'RUB', 'QUANTITY' => 3)
);
$currencyCode = 'RUB';
$basket = Bitrix\Sale\Basket::create($siteId);
$count = 0;
foreach ($basket_data['ITEMS'] as $item) {
$productID = $item['PRODUCT_ID'];
$basket_item = $basket->createItem("catalog", $productID);
unset($item["PRODUCT_ID"]);
$fieldArray = array(
'QUANTITY' => (int) $item['QUANTITY'],
'CURRENCY' => $currencyCode,
'LID' => $siteId,
'NAME' => (string) $item['NAME'],
'PRICE' => (string) $item['PRICE'],
);
$basket_item->setFields($fieldArray);
$count += (int) $item['QUANTITY'];
}
$order = Bitrix\Sale\Order::create($siteId, $user_id);
$order->setPersonTypeId(1); # физ.лицо
$order->setField('CURRENCY', $currencyCode);
$order->setField('STATUS_ID','NP');
$order->setBasket($basket);
$order->save();
#отгрузка
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem(
Bitrix\Sale\Delivery\Services\Manager::getObjectById(2)
);
$shipmentItemCollection = $shipment->getShipmentItemCollection();
# вся корзина в одной отгрузке
foreach ($basket as $basketItem)
{
$item = $shipmentItemCollection->createItem($basketItem);
$item->setQuantity($basketItem->getQuantity());
}
# оплаты
$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem(
Bitrix\Sale\PaySystem\Manager::getObjectById(8)
);
$payment->setField("SUM", $order->getPrice());
$payment->setField("CURRENCY", $order->getCurrency());
// $order->doFinalAction(true);
$result = $order->save(); |