Retrieving Product Attributes from Magento's V2 API

I've been working with the API for Magento in recent weeks and I had a bit of a struggle explaining to the V2 API which attributes of a product I wanted to retrieve. Actually I had issues talking to the V2 API at all, but that's a different post so I'll skate over those for now. Instead I thought I'd share (or rather, record for the next time I have the same problem!) how to specify which attributes about a product to retrieve.

It actually wasn't complicated but without V2 API documentation, it wasn't at all clear what to feed in to get the result I was looking for. It turns out you can just pass an array of desired attributes, shown here with the info method from the product_catalog:

    // connect to soap server
    $client = new SoapClient('http://magentoinstall.local/api/v2_soap?wsdl=1');
 
    // log in
    $session = $client->login('user', 'pass');
 
    // product info
    $attributes = new stdclass();
    $attributes->attributes = array('product_title', 'description', 'short_description', 'price');
    $list = $client->catalogProductInfo($session, <sku>, NULL, $attributes);

There were two tricks - one was realising that I could pass that final (undocumented) argument, and the other was understanding how to format that. Hopefully anyone doing battle with the same thing will find this post and get over this little challenge much faster than I did :)

Accessing the Magento V2 API

Recently I've been working with Magento at work, and in particular with integrating with their API. Now, before I say anything more, I must say that I am always pleased when I see that these products do include some kind of API. The Magento one is a bit interesting, although there is some half-decent API documentation for the original API.

However they have then released a new version of the API, with very little documentation. So here are two calls - one to the v1 API and one to the v2 - which I hope will help illustrate the differences. The example I'll give is the customer list functionality, including filtering the result set - because this was a total mystery when I started working with the v2 API!

    $options = array(
        "location" => 'http://magentoinstall.local/index.php/api/index/index/',
        "uri" => 'http://magentoinstall.local/api/'
        );
    $client = new SoapClient(NULL, $options);
 
    $session = $client->login('user', 'pass');
    $list = $client->call($session, 'customer.list', array(array("customer_id" => "42")));

To make the same call with API version 2, we need to address the method in a different way, using the structure in the underlying code as the method name that we call, and CamelCasing those, like this:

   $client = new SoapClient('http:/magentoinstall.local/api/v2_soap?wsdl=1');
 
   $session = $client->login('user', 'pass');
 
    $filter = new StdClass();
    $filter->filter = array(array("key" => "customer_id", "value" => "42"));
    $list = $client->customerCustomerList($session, $filter);

I haven't used either of the APIs a lot but once I was able to call the same method via both available services, I wanted to share the approach here in the hope that this would help someone else trying to solve the same problem. It is certainly not obvious from the documentation how to interact with the v2 API and I had some real puzzles getting the filtering working. These snippets are from my working code so I hope they are helpful to someone!

Accessing the Magento Web API

I've been working with the Magento Web API lately, and the first problem I ran into was actually getting access to it. Contrary to its reputation, I found some perfectly good documentation outlining how to connect to the service and use it. I thought I was on to a winner but I kept seeing:

Fatal error: Uncaught SoapFault exception: [2] Access denied.

Further investigation led me to this forum post - web services are separate users and you must first set them up through the admin screens - and make sure also to allocate roles to them.

The slight pitfall at this point is that you create a username and an API key - these then become the apiUser and apiKey variables mentioned in the documentation. The key is basically a password, its starred out in the settings and you have to enter it twice. Now I know that, I can log in to my service! Hope this helps someone else get to the point faster than I did.