Magento API Client
This library implements the Magento SOAP v1 (standard) API.
Features:
- allows wrappers
- allows dependencies injections
- allows code completion
- auto-updated via composer packaging (packagist.org)
Note: This library is not related to Magento Company.
Documentation
This API is designed on top of Magento SOAP API V1.
Supported modules are :
- Mage_Catalog
- Mage_CatalogInventory
- Mage_Checkout
- Mage_Customer
- Mage_Directory
- Mage_Sales
- Enterprise_CustomerBalance
- Enterprise_CustomerGiftCard
- Mage_GiftMessage
- Mage_Core
- Store View
Module's names has been standardized to be more clean :
- Catalog
- CatalogInventory
- Cart
- Customer
- Directory
- Order
- CustomerBalance
- GiftCard
- GiftMessage
- Core
- Store
Note : login
and logout
calls are made only if needed.
Installation
Download using composer:
{
"require": {
"smalot/magento-client": "*"
}
}
Now tell composer to download the bundle by running the command:
$ php composer.phar update smalot/magento-client
Composer will install the bundle to your project's vendor/smalot
directory and create
/update
an autoload file.
License
This library is provided under MIT license (since v0.5.0 release). See the complete license :
LICENSE
Implementation
Each module manager
, which heritate from MagentoModuleAbstract
, will generate an action
.
Actions can be either directly executed or added to a queue
.
If it is directly executed, it will generate a single call
, if not, that's a multi call
.
Single Call
Here is a sample code to load tree of categories of the default
website in a single call.
<?php
// Include composer's autoloader mecanism
include 'vendor/autoload.php';
// Init config
$path = 'http://domainname.tld/shop-folder/';
$apiUser = 'username';
$apiKey = 'xxxxxxxxxxxxxxxxxxx';
// Create remote adapter which wrap soapclient
$adapter = new \Smalot\Magento\RemoteAdapter($path, $apiUser, $apiKey);
// Call any module's class
$categoryManager = new \Smalot\Magento\Catalog\Category($adapter);
$tree = $categoryManager->getTree()->execute();
var_dump($tree);
Multi Call
Multi call is only available on Magento Soap v1
.
That's why this library is built on top of Magento Soap v1
.
This function allows to group multiple soap calls into only one http request, which can be a very great optimization practice.
It removes network latency
and reduce magento bootstrap processes.
Tipically, it can be used to synchronize a whole product catalog into very few number of calls.
<?php
// Include composer's autoloader mecanism
include 'vendor/autoload.php';
// Init config
$path = 'http://domainname.tld/shop-folder/';
$apiUser = 'username';
$apiKey = 'xxxxxxxxxxxxxxxxxxx';
// Create remote adapter which wrap soapclient
$adapter = new \Smalot\Magento\RemoteAdapter($path, $apiUser, $apiKey);
// Build the queue for multicall
$queue = new \Smalot\Magento\MultiCallQueue($adapter);
// Call any module's class
$productManager = new \Smalot\Magento\Catalog\Product($adapter);
$productManager->getInfo(10)->addToQueue($queue);
$productManager->getInfo(11)->addToQueue($queue);
$productManager->getInfo(12)->addToQueue($queue);
// Request in one multicall information of 3 products (#10, #11, #12)
$products = $queue->execute();
var_dump($products);
Callback support for multicall
<?php
// Include composer's autoloader mecanism
include 'vendor/autoload.php';
// Init config
$path = 'http://domainname.tld/shop-folder/';
$apiUser = 'username';
$apiKey = 'xxxxxxxxxxxxxxxxxxx';
// Create remote adapter which wrap soapclient
$adapter = new \Smalot\Magento\RemoteAdapter($path, $apiUser, $apiKey);
// Build the queue for multicall
$queue = new \Smalot\Magento\MultiCallQueue($adapter);
// Local catalog adapter
$localAdapter = new LocalAdapter(....);
// Store categories
$categoryManager = new \Smalot\Magento\Catalog\Category($adapter);
$categoryManager->getTree()->addToQueue($queue, array($localAdapter, 'updateCategories'));
// Store products into local catalog
$productManager = new \Smalot\Magento\Catalog\Product($adapter);
$productManager->getInfo(10)->addToQueue($queue, array($localAdapter, 'updateProduct'));
$productManager->getInfo(11)->addToQueue($queue, array($localAdapter, 'updateProduct'));
$productManager->getInfo(12)->addToQueue($queue, array($localAdapter, 'updateProduct'));
// Update local catalog
$products = $queue->execute();