====quote====
Задача: если заказ не оплачен в течение 10 мин (примерно), то деактивировать его
=============
Агент, который запускается раз в 5 мин.
====code====
function CancelUnpaidOrders(){ CModule::IncludeModule("iblock"); CModule::IncludeModule("sale"); $arFilter = Array( "PAYED" => "N", "CANCELED" => "N", "<=DATE_INSERT" => date("d.m.Y H:i:s",(time()-600)), //10 мин назад и ранее ); $arSelect = array("ID"); $db_order = CSaleOrder::GetList(array("DATE_INSERT" => "ASC"), $arFilter,false,false,$arSelect); // AddMessage2Log(date("d.m.Y h:i:s",(time()-600))); $unpaidOrders = array(); while ($arOrder = $db_order->Fetch()) { $unpaidOrders[] = $arOrder["ID"]; } if(count($unpaidOrders)>0){ $dbBasketItems = CSaleBasket::GetList( array( "NAME" => "ASC", "ID" => "ASC" ), array( "ORDER_ID" => $unpaidOrders ), false, false, array("ID","ORDER_ID") ); $arBasketIds = array(); $arBasket = array(); while ($arBasketItem = $dbBasketItems->Fetch()){ $arBasketIds[] = $arBasketItem["ID"]; $arBasket[$arBasketItem["ID"]] = $arBasketItem["ORDER_ID"]; } $db_res = CSaleBasket::GetPropsList( array( "SORT" => "ASC","NAME" => "ASC"), array( "CODE" => "CALENDAR_ID", "BASKET_ID" => $arBasketIds ), false, false, array("BASKET_ID") ); $unpaidOrders = array(); while ($arBasketProps = $db_res->Fetch()){ $unpaidOrders[$arBasket[$arBasketProps["BASKET_ID"]]] = $arBasket[$arBasketProps["BASKET_ID"]]; } //отменяем заказы, деактивируем билеты $el = new CIBlockElement; foreach ($unpaidOrders as $orderId) { CSaleOrder::StatusOrder($orderId, "CP"); CSaleOrder::CancelOrder($orderId, "Y", "Ваш заказ не был оплачен в течение 10 мин., для покупки необходимо оформить новый заказ"); $arTickets = GetTicketsByOrderId($orderId); foreach ($arTickets as $key => $arTicket) { CIBlockElement::SetPropertyValuesEx($arTicket["ID"], false, array(PROPERTY_TICKET_STATUS => TICKET_STATUS_CANCEL_UNPAID)); $el->Update($arTicket["ID"], array("ACTIVE"=>"N")); } } } return "CancelUnpaidOrders();"; }
=============
Подробнее…