Автоматическая отмена заказа Bitrix

Возврат к списку

Многие владельцы интернет-магазинов сталкивались с проблемой, когда некоторые пользователи хитрят, делают заказ, ждут некоторое время, а только потом оплачивают его. За это время "ожидания" цена на товар может вырасти, что особенно актуально на сегодняшний день, когда курс меняется каждый день, в результате владелец магазина терпит убытки. Если объемы маленькие, это не сильно заметно, но на крупных проектах, это ощутимо.

АвтоматическаяОтменаЗаказа.jpg

Для таких клиентов "хитрецов" или "забывак", был разработан скрипт агент, который запускается раз в сутки, смотрит если заказ старше "N" дней (задается параметром), то отменяет его.

   class NLAgent{
/*
 * Агент. CheckOldOrders() 
 * Агент получает заказы, которые старше 14. Отменяет их и генерирует почтовое уведомление. 
 * 
 */
	public static function CheckOldOrders($day = 0){
		global $DB;

		if(!CModule::IncludeModule('sale')){
			return 'NLAgent::CheckOldOrders('.$day.');';
		}

		if(empty($day)){
			$day = 14; 
		}

		$arFilter = Array(
			'STATUS_ID' => 'N',
			'PAYED' => 'N',
			'RESERVED' => 'N',
			'CANCELED' =>'N',
			'<=DATE_INSERT' => date($DB->DateFormatToPHP(CSite::GetDateFormat('SHORT')), AddToTimeStamp(array('DD' => -1 * $day), time()))
		);

		$db_sales = CSaleOrder::GetList(array('DATE_INSERT' => 'ASC'), $arFilter);
		while ($ar = $db_sales->Fetch())
		{
			CSaleOrder::CancelOrder($ar['ID'], 'Y', 'Автоматическая отмена заказа.');
			CSaleOrder::StatusOrder($ar['ID'], 'C');

			// Генерируем почтовое событие. Начало
			$arOrder = CSaleOrder::GetByID($ar['ID']);
			if(!$arOrder){
				return 'NLAgent::CheckOldOrders('.$day.');';
			}
			
			$userEmail = '';
			$dbOrderProp = CSaleOrderPropsValue::GetList(Array(), Array('ORDER_ID' => $ar['ID'], 'PROP_IS_EMAIL' => 'Y'));
			if($arOrderProp = $dbOrderProp->Fetch())
				$userEmail = $arOrderProp['VALUE'];
			
			if(strlen($userEmail) <= 0){
				$dbUser = CUser::GetByID($arOrder['USER_ID']);
				if($arUser = $dbUser->Fetch())
					$userEmail = $arUser['EMAIL'];
			}
			
			$dbSite = CSite::GetByID($arOrder['LID']);
			$arSite = $dbSite->Fetch();
			$arStatus = CSaleStatus::GetByID($arOrder['STATUS_ID'], $arSite['LANGUAGE_ID']);
			
			 $arFields = Array(
				'ORDER_ID' => $arOrder['ACCOUNT_NUMBER'],
				'ORDER_DATE' => $arOrder['DATE_INSERT_FORMAT'],
				'ORDER_STATUS' => $arStatus['NAME'],
				'EMAIL' => $userEmail,
				'ORDER_DESCRIPTION' => $arStatus['DESCRIPTION'],
				'TEXT' => '',
				'SALE_EMAIL' => COption::GetOptionString('sale', 'order_email', 'order@'.$_SERVER['SERVER_NAME']),
				'SERVER_NAME' => $_SERVER['SERVER_NAME']
				);
			 
			 CEvent::Send("AUTO_ORDER_CANCEL", $arOrder['LID'], $arFields,'N',47);
                       // Генерируем почтовое событие. Конец
			
		}
		
		return 'NLAgent::CheckOldOrders('.$day.');';
	}
}

Как подключить? 
1. Подключаем класс в init.php. Для удобства я все классы размещаю на сервере в папке /bitrix/php_interface/include/classes а в init.php подключаю нужные для работы. 
2. После того как класс подключен, переходим в раздел агентов на сервере http://site.ru/bitrix/admin/agent_list.php?lang=ru 
Создаем новый агент:
 

АгентОтменыЗаказов.png

Из настроек агента видно, что скрипт будет запускаться каждые сутки, и отклонять заказы которые старше 14 дней. 

Внимание, в примере кода дополнительно генерируется почтовое событие об автоматической отмене заказов, если оно вам не нужно просто удалите код генерации события (обозначено комментариями). 

В низу статьи прикрепил архив с классом. Желаю удачи во внедрении, надеюсь кому-нибудь эта доработка позволит уберечь себя от дополнительных расходов. 






21.03.2017 в 09:41
0
Здравствуйте. Судя по описанию и коду — очень полезное и простое решение.
Скажите, как именно нужно подключить этот модуль?
Я пробую вставить код непосредственно в init.php, так и отдельно в includes — сразу после этого у меня перестает работать сайт. :( Сто я делаю не так. Заранее благодарю.
ответная реплика
08.06.2017 в 13:00
0
нужно вставлять между тегами
ответная реплика


Возврат к списку

Теги
1c addurl AutoGRAPH.NET_Service Bitrix Bootstrap chmail.ru CMS curl DLE ERP Exel gmail google hdd hide html input Java script окна javascript Jquery JS JSON keywords mail.ru memori news.list No captcha nsma PHP php php attach PR recaptcha repair retweet script Sdorgen sdorgen select sms snagit Spam Test Twitter ucoz utf-8 VK wrike X-Satellite XHE xhe yandex yandex webmaster youtube АРМ БП3 Битрикс ВТБ24 ЕГРЮЛ ЖЖ ЗУП ИТС КЛАДР МБ-8 НДФЛ ПР ПФ ТИЦ УАТ УП автограф автокликер автоматизация автопостер ап ТИЦ битрикс валюты видео внешнее соединение время грамотное написание графика даты запрета день рождение дерево значений договор заказы заполнение ТЧ запонение ТЧ запрос 1С зарплатный реестр календарь книги кодировка комментарии координаты координирование проектов меню модальное окно народ обмен обработка ок рубль организационные структуры управления проектами остатки на складе отчет плавающий блок постинг программы для управления проектами расчет расстояния сервис система управления проектами скрипт скрыть блок смс софт таймер такси управление содержанием проекта фоновые задания чекер