Как создать свой VPS-хостинг с нуля и начать на нем зарабатывать? Простой биллинг с Virtuemart


    Здравствуйте, уважаемые читатели хабра. Данный материал является продолжением цикла статей о том, как построить VPS-хостинг с нуля на базе RUVDS White Label API. И сегодня мы рассмотрим популярную CMS Joomla и одно из самых популярных ecommerce-решений для неё — VirtueMart.

    Virtuemart


    Вообще говоря, расширение существует достаточно давно (первая версия вышла аж в 2005 году).
    Продукт рос и развивался вместе с CMS Joomla и на текущий момент обладает достаточно широкой функциональностью.

    Давайте вместе рассмотрим плюсы и минусы плагина Virtuemart 3.

    Плюсы


    • бесплатность
    • настраиваемые поля
    • форма заказа в один клик
    • мультивалютность
    • простой процесс оформления заказа
    • гибкая и мощная система управления доступом
    • множество платёжных методов доступно «из коробки»


    Минусы


    • громоздкий код и проблемы с производительностью
    • отсутствует простое API для интеграции с внешними сервисами
    • поддерживаемые по умолчанию платёжные системы ориентированы на запад (paypal, skill, 2checkout)
    • относительно небольшое комьюнити (~317127 человек зарегистировано на официальном форуме, в репозитории работа ведется не слишком активно и количество задействованных разработчиков невелико (для сравнения, в репозитории woocommerce 470 разработчиков, что в 10 раз больше)
    • невысокая скорость добавления новой функциональности (следствие в том числе предыдущего пункта)
    • проблемы с безопасностью, обусловленные популярностью как CMS Joomla, так и самого расширения virtuemart


    Особенности адаптации под vps-хостинг


    Прием платежей


    Порядок действий такой же, как при использовании других связок, например wordpress и woocommerce. Для того, чтобы интегрироваться с уже знакомым нам аггрегатором paymaster, скачиваем бесплатное расширение. Настройка расширения paymaster детально описана по этой же ссылке.

    Отключение механизма гостевых покупок


    Переходим в Virtuemart > Configuration > Checkout и выставляем флаг «Only registered users can checkout».

    Настройка страниц


    После установки плагина Virtuemart, у нас появляется возможность использовать в меню специализированные страницы. Для того, чтобы сделать из главной страницы витрину, переходим в Menus > Manage и редактируем меню с алиасом home. Нам нужно изменить Menu Item Type на один из типов, предоставляемых Virtuemart:
    • Account Maintenance
    • Category Layout
    • Displays vendor contact
    • Displays vendor details
    • Displays vendors
    • Front page
    • List Orders
    • Manufacturer Default Layout
    • Manufacturer Details Layout
    • Product Details Layout
    • Shopping Cart
    • User Edit Address
    • View vendor TOS

    Мы выбрали Category Layout и стандартное оформление Joomla (версия 3.5) и, после добавления основных конфигураций VPS, главная страница выглядит так:



    Обработка оплаченных заказов


    Итак, перед нами те же самые задачи:
    • инициировать создание сервера с помощью RuVDS Whitelabel API и предоставить клиенту все необходимые данные о процессе создания (идентификатор сервера, этап создания, прогресс создания, конфигурация сервера)
    • после создания сервера предоставить необходимые для подключения данные, а также возможности по управлению сервером и информацию о дате завершения расчетного периода


    Что нам доступно для интеграции

    • автоматически сгенерированная документация по API Virtuemart 2 (в статье мы рассматриваем 3-ю версию)
    • сервис api2cart — унифицированный API для интернет магазинов (от 500$ в месяц)
    • бесплатный компонент SOAP-сервисы для Virtuemart 3 (несколько урезанная версия, но её функционала для наших задач вполне достаточно)


    Остановимся на последнем варианте. После установки этого плагина доступны следующие SOAP-сервисы:
    • VM_Categories
    • VM_Order
    • VM_Product
    • VM_SQLQueries
    • VM_Users
    • VM_Upload


    Их wsdl доступны по url (пример для сервиса, управляющего категориями товаров):
    http://host/administrator/components/com_vm_soa/services /VM_CategoriesWSDL.php

    Нам потребуются 3 — VM_Order, VM_Product и VM_SQLQueries.

    К сожалению, при использовании данного способа интеграции, нам недоступен механизм хуков. Поэтому мы будем периодически выбирать заказы с подходящим статусом и инициировать создание серверов нужной конфигурации.

    Напишем простой скрипт на языке PHP, который будет создавать сервера после оплаты заказа:
    <?php
    function getApplicationSettings()
    {
    	return [
    		'login'	  =>'admin',
    		'password'=>'admin',
    		'orderServiceWsdl'=>'http://localhost/administrator/components/com_vm_soa/services/VM_OrderWSDL.php',
    		'productServiceWsdl' =>'http://localhost/administrator/components/com_vm_soa/services/VM_ProductWSDL.php'
    	];
    }
    function getCompleteOrders($limitStart = 0, $limitEnd=1000)
    {
    	$applicationSettings = getApplicationSettings();	
    	$loginInfo = new stdClass;
    	$loginInfo->login=$applicationSettings['login'];
    	$loginInfo->password=$applicationSettings['password'];
    	$loginInfo->isEncrypted="Y";
    	$loginInfo->lang=null;	
    	$orderServiceClient = new SoapClient($applicationSettings['orderServiceWsdl']);
    	$getOrderFromStatusRequest = new stdClass;
    	$getOrderFromStatusRequest->limite_start = $limitStart;
    	$getOrderFromStatusRequest->limite_end = $limitEnd;
    	$getOrderFromStatusRequest->status = 'F'; 					//завершенные заказы
    	$getOrderFromStatusRequest->loginInfo = $loginInfo;
    
    	try {		
    		// выбираем все заказы со статусом "завершенный"
    		return [$orderServiceClient->GetOrdersFromStatus($getOrderFromStatusRequest)];		
    	}catch(\SoapFault $e){
    		echo $e->getMessage();		
    		return false;
    	}
    }
    function processPayedOrder($orderId)
    {
    	$applicationSettings = getApplicationSettings();	
    	$loginInfo = new stdClass;
    	$loginInfo->login=$applicationSettings['login'];
    	$loginInfo->password=$applicationSettings['password'];
    	$loginInfo->isEncrypted="Y";
    	$loginInfo->lang=null;
    	
    	$productServiceClient = new SoapClient($applicationSettings['productServiceWsdl']);
    	$getProductsFromOrderIdRequest = new stdClass;
    	$getProductsFromOrderIdRequest->order_id = $orderId;
    	$getProductsFromOrderIdRequest->include_prices = true;
    	$getProductsFromOrderIdRequest->loginInfo = $loginInfo;
    	
    	try {
    		// выбираем заказанные конфигурации
    		$products = [$productServiceClient->GetProductsFromOrderId($getProductsFromOrderIdRequest)];	
    	} catch(\SoapFault $e){
    		echo $e->getMessage();
    		return false;
    	}
    	
    	// создаём сервер в зависимости от конфигурации
    	foreach($products as $product) createRuvdsServer($product);
    
    	return true;
    }
    function createRuvdsServer($product)
    {	
    	// код создания сервера через RUVDS White-Label Api и ожидания завершения процесса
    }
    
    $orders = getCompleteOrders();
    if (!$orders || count($orders)==0) return 1;
    
    foreach ($orders as $order)
    {
    	$orderId=$order->Order->id;	
    	$res = processPayedOrder($orderId);	
    	if(!$res) echo 'Processing order with id '.$orderId.' failed!';
    }
    


    Далее с помощью любого планировщика задач, например cron, настраиваем запуск этого скрипта с необходимой периодичностью.

    Итоги


    В целом, связка Joomla 3 + Virtuemart 3 выглядит как достаточно функциональный и мощный инструмент в качестве основы для организации вашего VPS-хостинга. Сразу «из коробки» доступно множество настроек всего, что только можно представить. Но требуется ли это при перепродаже, скажем, 3-10 популярных конфигураций виртуальных серверов?

    В следующей статье мы рассмотрим CMS Drupal и одно из её самых популярных eCommerce-расширений, и, возможно, новая CMS больше подойдёт вам для этой задачи. До новых встреч!
    RUVDS.com
    1211,00
    RUVDS – хостинг VDS/VPS серверов
    Поделиться публикацией

    Комментарии 0

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

    Самое читаемое