добрый день. Импортируя заказы через xml, столкнулся с проблемой: если добавляю товары - заказ создается, товары тоже попадают, но отваливаются отгрузки и оплаты. Если закомментировать код добавления товара, то отгрузки с оплатами встают как надо. Чую проблема в задании свойств добавляемого товара, но не могу понять как надо сделать...
Подскажите, кто сталкивался, что я делаю не так? Заранее благодарен
Пользовался следующими статьями:
вот код:
Код |
---|
<?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-кой и айдишником создавшегося заказа. Так вот, при добавлении товара это письмо тоже не прилетает