добрый день. Импортируя заказы через xml, столкнулся с проблемой: если добавляю товары - заказ создается, товары тоже попадают, но отваливаются отгрузки и оплаты. Если закомментировать код добавления товара, то отгрузки с оплатами встают как надо. Чую проблема в задании свойств добавляемого товара, но не могу понять как надо сделать...
Подскажите, кто сталкивался, что я делаю не так? Заранее благодарен
Пользовался следующими статьями: https://github.com/SidiGi/bitrix-info/wiki/%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0...
https://mrcappuccino.ru/blog/post/work-with-order-bitrix-d7
https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=8409
вот код:
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
use \Bitrix\Main,
\Bitrix\Main\Localization\Loc as Loc,
Bitrix\Main\Loader,
Bitrix\Main\Config\Option,
Bitrix\Sale\Delivery,
Bitrix\Sale\PaySystem,
Bitrix\Sale,
Bitrix\Sale\Order,
Bitrix\Sale\DiscountCouponsManager,
Bitrix\Main\Context;
if (!Loader::IncludeModule('sale'))
die();
if (!Loader::IncludeModule('iblock'))
die();
if ($_POST['pass']=='' && $_POST['login']=='shop_order') { # задумать пароль
///fields
$order_status = 0; ///выставляемый статус заказа. т.е. при 0 - у нас все ОК, 1- "Загружен с ошибками", что-то иное - по усмотрению
$shippingId = 2;
$paymentId = 1; # т.к. эти два параметра будут передаваться с shop.ru(константно причем), а, следовательно, отличаться от имеющихся тут, укажем их вручную: доставка курьером и оплата наликом ему же
function getPropertyByCode($propertyCollection, $code) {
foreach ($propertyCollection as $property)
{
if($property->getField('CODE') == $code)
return $property;
}
}
$siteId = \Bitrix\Main\Context::getCurrent()->getSite();
/* пример входного xml
<?xml version="1.0" encoding="UTF-8"?><orders><order>
<order_code>e_29680</order_code>
<name>Евгений тестовыйЗаказ не_звоните</name>
<phone>+7 (000) 000-00-00</phone>
<email>my@mail.ru</email>
<address>Москва, ул. Пушкина, кв. Колотушкина</address>
<comment>Оплата наличными</comment>
<shipping_id>1</shipping_id>
<shipping_cost>0</shipping_cost>
<payment_id>1</payment_id>
<discount>0</discount>
<total_cost>1055</total_cost>
<order_time>1504152151</order_time>
<products>
<product>
<code>eap211957</code>
<name>product_name</name>
<amount>5.00</amount>
<price>211</price>
<barcode>1234567</barcode>
</product>
</products></order></orders>
*/
$orderxml = new SimpleXMLElement($_POST['data']);
$currencyCode = Option::get('sale', 'default_currency', 'RUB');
DiscountCouponsManager::init();
$basket = Bitrix\Sale\Basket::create($siteId);
foreach ($orderxml->order->products->product as $product) {
#есть у нас штрих $product['barcode'], по нему ищем предложение, на основе которого уже достаем продукт
if ($product->barcode=='') {
#send angry mail
}else {
$result=CIBlockElement::GetList([],["IBLOCK_ID"=>3,"PROPERTY_BARCODE"=>$product->barcode,false,false,['ID'] ]);
if ($result->SelectedRowsCount() ) {
$offer = $result->fetch(); ///беру только первое попавшееся предложение
$productArr = CCatalogSku::GetProductInfo($offer['ID']);
if ($productArr) {
$productID = $productArr['ID'];
# Если создается товар, то не добавляются отгрузки и оплаты !!!!
$item = $basket->createItem("catalog", $productID);
$item->setFields(array(
'QUANTITY' => $product->amount,
'CURRENCY' => $currencyCode,
'LID' => $siteId,
'NAME' => $product->name,
'PRICE' => $product->price,
));
} else {
$order_status = 1;
}
} else {
$order_status = 1;
}
}
}
$order = Order::create($siteId, \CSaleUser::GetAnonymousUserID());
$order->setPersonTypeId(1); # физ.лицо
$order->setField('CURRENCY', $currencyCode);
$order->setField('USER_DESCRIPTION', $orderxml->order[0]->comment); // Устанавливаем поля комментария покупателя
$order->setBasket($basket);
$order->save();
#отгрузка
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem(
Bitrix\Sale\Delivery\Services\Manager::getObjectById($shippingId)
);
$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($paymentId)
);
$payment->setField("SUM", $order->getPrice());
$payment->setField("CURRENCY", $order->getCurrency());
# Устанавливаем свойства
$propertyCollection = $order->getPropertyCollection();
$phoneProp = $propertyCollection->getPhone();
$phoneProp->setValue($orderxml->order[0]->phone);
$nameProp = $propertyCollection->getPayerName();
$nameProp->setValue($orderxml->order[0]->name);
$emailProperty = getPropertyByCode($propertyCollection, 'EMAIL');
$emailProperty->setValue($orderxml->order[0]->email);
$order->doFinalAction(true);
$result = $order->save();
if (!$result->isSuccess()) {
//$result->getErrors();
}
$orderId = $order->GetId();
ob_start();
var_dump($_POST);
$result = ob_get_clean();
ob_start();
var_dump($_POST['data']);
$result2 = ob_get_clean();
///return $result;
$to = '';
$subject = 'intercept order';
$headers = 'From: request@sender.com' . "\r\n" .
'Reply-To: request@sender.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$message = $result.' + orderId = '.$orderId;
mail($to, $subject, $message, $headers);
}
В конце кода мне на почту засылается письмо с прилетевшей xml-кой и айдишником создавшегося заказа. Так вот, при добавлении товара это письмо тоже не прилетает
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть таблицы товаров, их свойств и их значенийЗначения хранятся в разных таблицах, в зависимости от их типа
У QTreeView него нет метода аналогичного QTableView::setShowGridИ как теперь отобразить сетку?
Имеется основной CMakelists
Написал я маленькую программу, которая в свою очередь запускает другую программуИ мне нужно добавить первую программу в автозагрузу желательно...