Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Агент, который деактивирует неоплаченные заказы



Задача: если заказ не оплачен в течение 10 мин (примерно), то деактивировать его
Агент, который запускается раз в 5 мин.
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();";
    
}
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!