Upload
1-
View
370
Download
9
Embed Size (px)
Citation preview
Юрий Волошин, Алексей Кирсанов1C-Битрикс
Новая eCommerce платформа D7: заказы, холдинг, персональный раздел
Процедура оформления заказа D7
• Переход на eCommerce D7
• Реконструкция всей процедуры заказа
• Повышение конверсии интернет-магазина
Задача изменений
A/B тестирование маркетинговый метод используется для оценки и управления конверсией сайта
«А» ― это то, как у вас есть сейчас (старый дизайн). «B» ― это то, с чем вы будете экспериментировать (новый дизайн).
Для половины показывается дизайн «А», для другой половины ― дизайн «B».
И по каждому из вариантов замеряются все ключевые показатели, в первую очередь ― конверсия.
A/B-тестирование новой процедуры заказа
А/В-тестирование оформления заказа
1,2%Конверсия
0,9%Конверсия
А В
Оформление заказа
• Требования времени• Требования клиентов• Новые возможности• Новая архитектура D7• Адаптивная верстка
• Оплата и доставка в зависимости от региона
• Запрашиваем у клиента только нужную информацию
• Поддержка точек самовывоза в неограниченных количествах
• Карты в профиле покупателя• Множественный пересчет и уточнения
параметров доставки• Показ дополнительных услуг в
доставках• Автозаполнение при повторном заказе
• Режим совместимости
Что нового
Компонент sale.order.ajax идеальный, и его не надо кастомизировать— Орландо Виласека, разработчик
Службы доставки
• Автоматическое отслеживание статусов• Синхронизация статусов• Ограничения• Дополнительные услуги• Автоматическое размещение заявки на
забор груза в службу доставки в конце дня
Службы доставки
Событие на расчет стоимости доставки// в /bitrix/php_interface/init.php
EventManager::getInstance()->addEventHandler('sale', 'onSaleDeliveryServiceCalculate', 'myCalc');
function myCalc(Event $event){
/** @var Delivery\CalculationResult $baseResult */$baseResult = $event->getParameter("RESULT");/** @var Shipment $shipment */$shipment = $event->getParameter("SHIPMENT");$deliveryId = $event->getParameter("DELIVERY_ID");
$price = $baseResult->getDeliveryPrice() + 100;$baseResult->setDeliveryPrice($price);
$event->addResult(new EventResult(
EventResult::SUCCESS, array('RESULT' => $baseResult))
);}
Новая служба доставки
// в /bitrix/php_interface/include/sale_delivery/ или /local/php_interface/include/sale_delivery/
// custom/handler.php
namespace Sale\Handlers\Delivery;
use Bitrix\Sale\Delivery\CalculationResult;use Bitrix\Sale\Delivery\Services\Base;
class CustomHandler extends Base{
public static function getClassTitle(){
return 'Доставка по весу';}
public static function getClassDescription(){
return 'Доставка стоимость которой зависит только от веса отправления';}
Новая служба доставки - 1
protected function calculateConcrete(\Bitrix\Sale\Shipment $shipment){
$result = new CalculationResult();$price = floatval($this->config["MAIN"]["PRICE"]);$weight = floatval($shipment->getWeight()) / 1000;
$result->setDeliveryPrice(roundEx($price * $weight, 2));$result->setPeriodDescription('1 день');
return $result;}
protected function getConfigStructure(){
return array("MAIN" => array(
"TITLE" => 'Настройка обработчика',"DESCRIPTION" => 'Настройка обработчика',
Новая служба доставки - 2
"ITEMS" => array("PRICE" => array(
"TYPE" => "NUMBER","MIN" => 0,"NAME" => 'Стоимость доставки за грамм'
))
));
}
public function isCalculatePriceImmediately(){
return true;}
public static function whetherAdminExtraServicesShow(){
return true;}
}
Новая служба доставки - 3
Новые ограничения
// в init.phpMain\EventManager::getInstance()->addEventHandler('sale', 'onSaleDeliveryRestrictionsClassNamesBuildList', 'myBuildList');
function myBuildList(){
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS,array(
'\ByMoonday' => '/restrictions/bymoonday.php')
);}
Новые ограничения - 1
// в /restrictions/bymoonday.php
use Bitrix\Sale\Delivery\Restrictions;use Bitrix\Sale\Internals\CollectableEntity;
class ByMoonday extends Restrictions\Base{
public static function getClassTitle(){
return 'По лунным суткам';}
public static function getClassDescription(){
return 'Доставка будет выводится только в указанном диапазоне лунных суток';}
Новые ограничения - 2
public static function check($moonday, array $restrictionParams, $deliveryId = 0){
if ($moonday < $restrictionParams['MIN_MOONDAY']|| $moonday > $restrictionParams['MAX_MOONDAY'])return false;
return true;}
protected static function extractParams(CollectableEntity $shipment){
$json = file_get_contents('http://moon-today.com/api/index.php?get=moonday');$res = json_decode($json, true);return !empty($res['moonday']) ? intval($res['moonday']) : 0;
}
Новые ограничения - 3
public static function getParamsStructure($entityId = 0){
return array("MIN_MOONDAY" => array(
'TYPE' => 'NUMBER','DEFAULT' => "1",'LABEL' => 'Минимальные сутки'
),"MAX_MOONDAY" => array(
'TYPE' => 'NUMBER','DEFAULT' => "30",'LABEL' => 'Максимальные сутки'
));
}}
Новые ограничения - 4
Новые дополнительные услуги
// в init.phpMain\EventManager::getInstance()->addEventHandler('sale', 'onSaleDeliveryExtraServicesClassNamesBuildList', 'myBuildList');
function myBuildList(){
return new Main\EventResult(Main\EventResult::SUCCESS, array('\MyService' => 'folder/myservice.php'));}
Новые дополнительные услуги
class MyService extends Sale\Delivery\ExtraServicesBase{
public function getClassTitle(){
return "Моя услуга";}
public function getCost(){
return 1000;}
1.
2.
Платежные системы
• Возврат денег• Тонкая настройка банковского счета• B2B платежи в Яндекс• Кастомизация шаблонов платежных
систем• Ограничения• Не нужно вводить одни и те же
параметры для разных платежных систем
• Единая точка входа для ответов платежных систем
Платежные системы
• Код платежа (ID) vs. Номер платежа• Номер платежа: номер заказа/порядковый номер платежа• Для заказа с ID=49 и номером 49 номер
платежа будет 49/1• Для заказа с ID=49 и номером 135_3
номер платежа будет 135_3/1• Кастомизация шаблонов на событиях
Номера оплат
Кастомизация шаблона
<a href="#" onclick="document.getElementById('my_yandex').submit(); return false;"><img src="/images/kot1.png"></a>
<form name="ShopForm" action="<?=$params['URL'];?>" method="post" id="my_yandex"><input name="ShopID" value="<?=$params['YANDEX_SHOP_ID'];?>" type="hidden">* * *
• Обработчики – классы + вспомогательные файлы
• Наследование, интерфейсы• Базовые классы
PaySystem\BaseServiceHandlerPaySystem\ServiceHandler
• Пути/local/php_interface/include/sale_payment//bitrix/php_interface/include/sale_payment/
• Системные обработчики/bitrix/modules/sale/handlers/paysystem
Новая платежная система
Новые ограниченияMain\EventManager::getInstance()->addEventHandler('sale',
'onSalePaySystemRestrictionsClassNamesBuildList', 'myBuildList');
Холдинговая структура
• На смену отдельным каталогам для каждого
города приходит единый каталог
• Город покупателя влияет на время доставки,
типы платежных сервисов и юридическое лицо
выполняющее все процедуры
Холдинговая структураторговля на всю страну
Автоматическое назначение компании и ответственного
в зависимости от города местонахождения покупателя
выбирается:- юридическое лицо- ответственный менеджер- платежные системы и реквизиты, привязанные к
городу покупателя- служба доставки, привязанная к городу
покупателя
Правила обработки частичной оплаты и отгрузки
Холдинговая структура (этап 3 из 4)
Схема работы
ОПЛАТА
ЗАКАЗ
ОПЛАТА
ОТГРУЗКА
КОМПАНИЯ 1
КОМПАНИЯ 2
КОМПАНИЯ 3
ОТГРУЗКА
ООО Моя компания• г. Москва• физические лица
ИП Антон Компотов• г. Москва• юридические лица
ООО Максим и Ко• г. Калининград
Настраиваем: компании
Настраиваем: компании - 1
Настраиваем: платежные системы
Оформляем заказ
Пользовательские правилаMain\EventManager::getInstance()->addEventHandler('sale',
'onSaleCompanyRulesClassNamesBuildList', 'myBuildList');
Персональный раздел
• Единый комплексный компонент всего персонального раздела, расширены сценарии использования
• Все компоненты написаны с использованием нового ядра D7
• Поддерживается разделение заказов• Поддерживаются сценарии работы с
пополнением счета и возможность пополнить счет без оформления заказа
• Адаптивный дизайн
Персональный раздел
Мои заказы
• Оплата• Смена способа оплаты• Статус доставки• Поддержка множественных
оплат и отгрузок
• Повторение заказа• Отмена заказа
• Текущий внутренний счет• Возможность пополнить• Оплата заказов с
внутреннего счета
Покупка денег
Подписка на отсутствующие товары
Новые возможности
скидок
В следующей части
Кастомизация административного
раздела
Автоматизация
1 2 3
Спасибо за внимание! Вопросы?