19.01.2022
02:24
19.01.2022 02:24:42
Задача: если заказ не оплачен в течение 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();";
} |
19.01.202202:2419.01.2022 02:24:42