Magento API REST: más simple, más rápido

2 Comments

Como desarrollador, una de las cosas que más me gustan de Magento es el acceso a las funcionalidades de la tienda usando los Web Services. Este tipo de acceso a un sistema que hace tanto énfasis en el front-end como es el caso de un CMS, además, me proporciona la confianza de que está bien diseñado, ya que se puede acceder a la lógica de negocio a través de distintos interfaces, lo que significa que el back-end está bien diferenciado del front-end.magento logo

Sin embargo, los que hayáis probado los Web Services de Magento habréis experimentado algunos problemas, como cierta lentitud en las peticiones y que el conjunto de llamadas disponibles es un poco escaso. En las últimas versiones he notado varias mejoras, como la introducción de la versión 2 de acceso por servicios web y la ampliación de las llamadas disponibles, lo que nos indica que éste es uno de los puntos en los que Magento está haciendo énfasis.

Con la nueva versión Community 1.7 ahora también podemos acceder a la lógica del sistema a través de una API REST, lo que nos da un acceso más rápido y sencillo. Además, utiliza OAuth para la autenticación.

Los recursos REST a los que podemos acceder son los siguientes, agrupados por las entidades a las que afectan:

  • Productos: listar, y las operaciones de creación, consulta, actualización y eliminación (CRUD).
  • Categorías: rlistar y cambiar las asignaciones de productos a categorías.
  • Websites: listar y cambiar las asignaciones de productos a websites.
  • Usuarios: recuperar la lista de usuarios, y operaciones CRUD.
  • Direcciones de usuario: listado y operaciones CRUD.
  • Inventario: listado y actualización del stock de un producto
  • Pedidos: listado y consulta de pedidos, listado de los artículos, consulta de las direcciones de entrega y facturación y de los comentarios.

A continuación os dejo un ejemplo de código para la creación de un producto sacado de la wiki de Magento: https://www.magentocommerce.com/wiki/doc/webservices-api/introduction_to_rest_api

[sourcecode language=»php»]
/**
* Example of simple product POST using Admin account via Magento REST API. OAuth authorization is used
*/
$callbackUrl = "https://yourhost/oauth_admin.php";
$temporaryCredentialsRequestUrl = "https://magentohost/oauth/initiate?oauth_callback=" . urlencode($callbackUrl);
$adminAuthorizationUrl = ‘https://magentohost/admin/oauth_authorize’;
$accessTokenRequestUrl = ‘https://magentohost/oauth/token’;
$apiUrl = ‘https://magentohost/api/rest’;
$consumerKey = ‘yourconsumerkey’;
$consumerSecret = ‘yourconsumersecret’;

session_start();
if (!isset($_GET[‘oauth_token’]) && isset($_SESSION[‘state’]) && $_SESSION[‘state’] == 1) {
$_SESSION[‘state’] = 0;
}
try {
$authType = ($_SESSION[‘state’] == 2) ? OAUTH_AUTH_TYPE_AUTHORIZATION : OAUTH_AUTH_TYPE_URI;
$oauthClient = new OAuth($consumerKey, $consumerSecret, OAUTH_SIG_METHOD_HMACSHA1, $authType);
$oauthClient->enableDebug();

if (!isset($_GET[‘oauth_token’]) && !$_SESSION[‘state’]) {
$requestToken = $oauthClient->getRequestToken($temporaryCredentialsRequestUrl);
$_SESSION[‘secret’] = $requestToken[‘oauth_token_secret’];
$_SESSION[‘state’] = 1;
header(‘Location: ‘ . $adminAuthorizationUrl . ‘?oauth_token=’ . $requestToken[‘oauth_token’]);
exit;
} else if ($_SESSION[‘state’] == 1) {
$oauthClient->setToken($_GET[‘oauth_token’], $_SESSION[‘secret’]);
$accessToken = $oauthClient->getAccessToken($accessTokenRequestUrl);
$_SESSION[‘state’] = 2;
$_SESSION[‘token’] = $accessToken[‘oauth_token’];
$_SESSION[‘secret’] = $accessToken[‘oauth_token_secret’];
header(‘Location: ‘ . $callbackUrl);
exit;
} else {
$oauthClient->setToken($_SESSION[‘token’], $_SESSION[‘secret’]);
$resourceUrl = "$apiUrl/products";
$productData = json_encode(array(
‘type_id’           => ‘simple’,
‘attribute_set_id’  => 4,
‘sku’               => ‘simple’ . uniqid(),
‘weight’            => 1,
‘status’            => 1,
‘visibility’        => 4,
‘name’              => ‘Simple Product’,
‘description’       => ‘Simple Description’,
‘short_description’ => ‘Simple Short Description’,
‘price’             => 99.95,
‘tax_class_id’      => 0,
));
$headers = array(‘Content-Type’ => ‘application/json’);
$oauthClient->fetch($resourceUrl, $productData, OAUTH_HTTP_METHOD_POST, $headers);
print_r($oauthClient->getLastResponseInfo());
}
} catch (OAuthException $e) {
print_r($e);
}
[/sourcecode]

Fuentes:
Magento: Blog oficial (en inglés)
Magento: Wiki oficial (en inglés)

Suscríbete a nuestra newsletter

2 Comments
    • José
    • 10/10/2012
    Responder

    Estoy haciendo pruebas con la REST api tal y como indicas y que se indica también en la wiki de magento y no consigo encontrar el archivo oauth_admin.php, se tiene que activar algo más en la instalación de magento he seguido los pasos y sigue sin encntrarme las rutas.

    • Javier
    • 03/06/2012
    Responder

    Nuestro ecommerce de venta de papeleria on line esta realizado en Magento Enterprice actualizado hasta la version 1.10 y wow hay muchas mejoras en esa linea

 

Deja tu comentario