Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
то ждем ваше обращение в нашей службе тех поддержки.
Хотите облегчить жизнь постоянным покупателям? Дайте им возможность делать заказ и оплату в интернет-магазине в один шаг и без регистрации. Вот как это сделать:
1. Настройте компонент sale.order.ajax
Измените настройку проверки E-mail на уникальность на "выключено". Теперь заказ будет создаваться без проверки электронной почты.
2. Встраиваем проверку уникальности
После создания заказа вставьте код проверки уникальности, чтобы в базе не накапливались дубли почтовых адресов
3. Привязываем созданный заказ к пользователю в базе
Если пользователь уже есть в базе данных, то заказ надо привязать к электронной почте. Для этого добавим в компонент код:
4. Организуем оплату: новый метод обработки
Для работы с массивом ПС добавьте к обработчикам CSaleHandlers новый метод:
5. Подключите lang-файлы
В скрипте confirm.php после строки B_PROLOG_INCLUDED добавьте код:
6. Измените подключение платежной системы
В компоненте sale.order.payment замените вызов CSaleOrder::GetList на код
Готово!
Назад в раздел
1. Настройте компонент sale.order.ajax
Измените настройку проверки E-mail на уникальность на "выключено". Теперь заказ будет создаваться без проверки электронной почты.
2. Встраиваем проверку уникальности
После создания заказа вставьте код проверки уникальности, чтобы в базе не накапливались дубли почтовых адресов
AddEventHandler('main', 'OnBeforeUserRegister', array('CMainhandlers', 'OnBeforeUserRegisterHandler')); class CMainhandlers { public static function OnBeforeUserRegisterHandler(&$arFields) { if (CUser::GetList($by='id', $order='desc', array('=EMAIL' => $arFields['EMAIL']))->Fetch()) { $GLOBALS['APPLICATION']->throwException('Пользователь с таким E-Mail уже зарегистрирован.'); return false; } } }
3. Привязываем созданный заказ к пользователю в базе
Если пользователь уже есть в базе данных, то заказ надо привязать к электронной почте. Для этого добавим в компонент код:
AddEventHandler('sale', 'OnSaleComponentOrderOneStepComplete', array('CSalehandlers', 'OnSaleComponentOrderOneStepCompleteHandler')); class CSalehandlers { public static function OnSaleComponentOrderOneStepCompleteHandler($ID, $arFields) { if ($arFields['ID'] > 0) { if ($arFields['USER_ID'] > 0) { $arExtUser = CUser::GetByID($arFields['USER_ID'])->Fetch();//1 if ($arOldUser = CUser::GetList($by='id', $order='desc', array('=EMAIL' => $arExtUser['EMAIL'], '!ID' => $arExtUser['ID']))->Fetch())//2 { CSaleOrder::Update($arFields['ID'], array('USER_ID' => $arOldUser['ID']));//3 CUser::Delete($arExtUser['ID']);//4 $GLOBALS['USER']->Logout();//5 if (!isset($_SESSION['CAN_VIEW_ORDERS']))//1 $_SESSION['CAN_VIEW_ORDERS'] = array(); $_SESSION['CAN_VIEW_ORDERS'][] = $arFields['ID']; global $arResult, $arParams;//2 $arResult = array( 'ORDER_ID' => $arFields['ID'], 'ORDER' => $arFields, 'PAY_SYSTEM' => self::GetPaySystem($arFields), ); $arParams = array( 'PATH_TO_PERSONAL' => '/personal/orders/', 'PATH_TO_PAYMENT' => '/personal/orders/guest_payment.php', ); require $_SERVER['DOCUMENT_ROOT'].'/bitrix/templates/.default/components/bitrix/sale.order.ajax/in/confirm.php';//3 exit();//7 } } } } }
4. Организуем оплату: новый метод обработки
Для работы с массивом ПС добавьте к обработчикам CSaleHandlers новый метод:
private static function GetPaySystem($arOrder) { if (IntVal($arOrder['PAY_SYSTEM_ID']) > 0) { $dbPaySysAction = CSalePaySystemAction::GetList( array(), array( 'PAY_SYSTEM_ID' => $arOrder['PAY_SYSTEM_ID'], 'PERSON_TYPE_ID' => $arOrder['PERSON_TYPE_ID'] ), false, false, array('NAME', 'ACTION_FILE', 'NEW_WINDOW', 'PARAMS', 'ENCODING') ); if ($arPaySysAction = $dbPaySysAction->Fetch()) { $arPaySysAction['NAME'] = htmlspecialcharsEx($arPaySysAction['NAME']); if (strlen($arPaySysAction['ACTION_FILE']) > 0) { if ($arPaySysAction['NEW_WINDOW'] != 'Y') { CSalePaySystemAction::InitParamArrays($arOrder, $ID, $arPaySysAction['PARAMS']); $pathToAction = $_SERVER['DOCUMENT_ROOT'].$arPaySysAction['ACTION_FILE']; $pathToAction = str_replace('\\', '/', $pathToAction); while (substr($pathToAction, strlen($pathToAction) - 1, 1) == '/') $pathToAction = substr($pathToAction, 0, strlen($pathToAction) - 1); if (file_exists($pathToAction)) { if (is_dir($pathToAction) && file_exists($pathToAction.'/payment.php')) $pathToAction .= '/payment.php'; $arPaySysAction['PATH_TO_ACTION'] = $pathToAction; } if(strlen($arPaySysAction['ENCODING']) > 0) { define('BX_SALE_ENCODING', $arPaySysAction['ENCODING']); AddEventHandler('main', 'OnEndBufferContent', 'ChangeEncoding'); function ChangeEncoding($content) { header('Content-Type: text/html; charset='.BX_SALE_ENCODING); $content = $GLOBALS['APPLICATION']->ConvertCharset($content, SITE_CHARSET, BX_SALE_ENCODING); $content = str_replace('charset='.SITE_CHARSET, 'charset='.BX_SALE_ENCODING, $content); } } } } return $arPaySysAction; } } }
5. Подключите lang-файлы
В скрипте confirm.php после строки B_PROLOG_INCLUDED добавьте код:
$langPath = str_replace('\\', '/', __FILE__); $langPath = substr($langPath, 0, strlen($langPath)-strlen('/confirm.php')); __IncludeLang($langPath.'/lang/'.LANGUAGE_ID.'/template.php');
6. Измените подключение платежной системы
В компоненте sale.order.payment замените вызов CSaleOrder::GetList на код
$arFilter = array("LID" => SITE_ID, "ID" => $ORDER_ID); if (!is_array($_SESSION['CAN_VIEW_ORDERS']) || !in_array($ORDER_ID, $_SESSION['CAN_VIEW_ORDERS'])) $arFilter["USER_ID"] = IntVal($GLOBALS["USER"]->GetID()); $dbOrder = CSaleOrder::GetList(array("DATE_UPDATE" => "DESC"), $arFilter);
Готово!
Назад в раздел
Подписаться на новые материалы раздела: