こんにちは、Habrの親愛なる読者。 この資料は、RUVDS White Label APIに基づいてゼロからVPSホスティングを構築する方法に関する一連の記事の続きです。 そして今日は、人気のあるJoomla CMSと最も人気のあるeコマースソリューションの1つであるVirtueMartを見ていきます。
バーチューマート
一般的に言えば、この拡張機能は長い間存在しています(最初のバージョンは2005年に既にリリースされています)。
この製品はCMS Joomlaで成長および開発され、 現在はかなり幅広い機能を備えています。
Virtuemart 3プラグインの長所と短所を一緒に見てみましょう。
長所
- 無料
- カスタムフィールド
- ワンクリック注文フォーム
- 多通貨
- 簡単なチェックアウトプロセス
- 柔軟で強力なアクセス制御システム
- 多くの支払い方法が「そのまま」利用可能
短所
- かさばるコードとパフォーマンスの問題
- 外部サービスと統合するための単純なAPIはありません
- デフォルトでサポートされている支払いシステムは西向きです(ペイパル、スキル、2チェックアウト)
- 比較的小さなコミュニティ( 公式フォーラムに登録された317127人の人々、リポジトリはあまり活発に機能しておらず、 関係する開発者の数は少ない(比較のため、woocommerceリポジトリには470人の開発者がいます。これは10倍です)
- 新しい機能を追加する速度が遅い(前の段落を含めることの結果)
- Joomla CMSとvirtuemart拡張機能自体の両方の人気によるセキュリティ問題
VPSホスティングの適応の機能
支払いを受け入れる
手順は、 wordpressやwoocommerceなどの他のバンドルを使用する場合と同じです 。 私たちが知っているペイマスターアグリゲーターと統合するために、 無料の拡張をダウンロードしてください。 ペイマスター拡張機能のセットアップについては、同じリンクで詳しく説明されています。
ゲストショッピングを無効にする
「Virtuemart」>「構成」>「チェックアウト」に進み、「登録済みユーザーのみがチェックアウトできる」フラグを設定します。
ページ設定
Virtuemartプラグインをインストールした後、メニューで特殊なページを使用する機会があります。 メインページからショーケースを作成するには、[メニュー]> [管理]に移動し、エイリアスホームでメニューを編集します。 メニュー項目タイプを、Virtuemartが提供するタイプのいずれかに変更する必要があります。
- アカウントのメンテナンス
- カテゴリーレイアウト
- ベンダーの連絡先を表示します
- ベンダーの詳細を表示します
- ベンダーを表示します
- フロントページ
- 注文一覧
- メーカーのデフォルトレイアウト
- メーカー詳細レイアウト
- 製品詳細レイアウト
- ショッピングカート
- ユーザー編集アドレス
- ベンダーTOSを表示
カテゴリレイアウトと標準のJoomlaレイアウト(バージョン3.5)を選択しました。基本的なVPS構成を追加すると、メインページは次のようになります。
有料注文の処理
したがって、同じタスクがあります。
- RuVDS Whitelabel APIを使用してサーバーの作成を開始し、作成プロセスに必要なすべてのデータ(サーバー識別子、作成段階、作成の進行状況、サーバー構成)をクライアントに提供します。
- サーバーの作成後、接続に必要なデータ、サーバー管理機能、および請求期間の終了日に関する情報を提供します
統合のために利用できるもの
- Virtuemart 2 APIの自動生成ドキュメント(記事では第3バージョンを検討)
- api2cartサービス-オンラインストア用の統合API(月額500ドルから)
- Virtuemart 3用のSOAPサービスの無料コンポーネント(多少切り捨てられたバージョンですが、その機能はタスクに十分です)
最後のオプションについて説明します。 このプラグインをインストールすると、次のSOAPサービスが利用可能になります。
- VM_Categories
- VM_Order
- VM_Product
- VM_SQLQueries
- VM_Users
- VM_Upload
それらのwsdlはurlでアクセス可能です(商品のカテゴリーを管理するサービスの例):
http://ホスト/管理者/コンポーネント/ 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とその最も人気のあるeコマース拡張機能の1つを見ていきます。おそらく、新しいCMSはこのタスクにより適しているでしょう。 じゃあね!