Magento API Client
This library implements the Magento SOAP v1 (standard) API., (*1)
, (*2)
Features:, (*3)
- allows wrappers
- allows dependencies injections
- allows code completion
- auto-updated via composer packaging (packagist.org)
Note: This library is not related to Magento Company., (*4)
Documentation
This API is designed on top of Magento SOAP API V1., (*5)
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, (*6)
Module's names has been standardized to be more clean :
- Catalog
- CatalogInventory
- Cart
- Customer
- Directory
- Order
- CustomerBalance
- GiftCard
- GiftMessage
- Core
- Store, (*7)
Note : login and logout calls are made only if needed., (*8)
Installation
Download using composer:, (*9)
{
"require": {
"smalot/magento-client": "*"
}
}
Now tell composer to download the bundle by running the command:, (*10)
``` bash
$ php composer.phar update smalot/magento-client, (*11)
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
<?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., (*12)
That's why this library is built on top of Magento Soap v1., (*13)
This function allows to group multiple soap calls into only one http request, which can be a very great optimization practice., (*14)
It removes network latency and reduce magento bootstrap processes., (*15)
Tipically, it can be used to synchronize a whole product catalog into very few number of calls., (*16)
<?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();