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!

Your Open Source Stories

In this post, I am asking for your help and input, although it might seem like a post about nothing in particular to begin with. Please keep reading!

Last month, I gave a talk at TEK-X entitled “Open Source Your Career”. Personally I think that a lot of the high fliers in this profession use their community activities as a boost to their professional development, and I know that this has been true for me too. So in my talk I told stories about situations I’d met in my professional life and how I’d either achieved or made new opportunities by building on skills and experience (and network) that I’ve come across in my community activities.

For example I said to my CTO, Ivo Jansch that I was giving this talk and he asked what it was about. I said that, in a nutshell, I didn’t think Ibuildings would have trusted any of their developers to host the Dutch PHP Conference unless they’d seen that person hosting events elsewhere – as a volunteer co-host of PHPNW, I gained some experience doing this sort of thing. His response really brought home how true it is that getting out there can reap rewards in ways we don’t expect – or in my case don’t even recognise. He simply said “one reason you have the job you have now is the fact that you did an oracle podcast for zend once which I heard when I received your CV”. It hadn’t occurred to me that activities like that would have helped when I was changing jobs.

What I Need From You

I’m giving this talk again, at FrOSCon in Germany in August. It was a huge amount of fun to deliver last time but I’d really like to pull in more stories from other people to include in my talk. So … have you ever got involved with something outside of your day job, only to realise later that it was a good career move? And would you let me tell your story?

Answers on a postcard, by email, or in the comments field below. Any and all input is very gratefully received :)

DPC Retrospective

I spent most of last week and the weekend in (rather rainy) Amsterdam for the Dutch PHP Conference. This is an event that is in its 4th year, although I was attending for only the 3rd time. Two years ago, I spoke at DPC – my first conference talk. This year, I hosted the event, which was quite a different experience. The event is organised by my employers, Ibuildings, and I was astonished to be asked late last year if I would like to be its host. Hosting an event is quite a different set of anxieties from speaking at one, and although there were a few minor emergencies along the way (lost speakers, really “interesting” CfP submissions, a moment where only half the venue would have wifi and some sessions failing to run to time), nothing worth getting stressed over!

The event was great (can I say that myself?) and with a world-class schedule, excellent speakers who all delivered on the day, sponsors who supported the venture and of course the attendees who showed up, took part, joined in with the uncon and generally made the whole thing into the fun it was – I could not have asked for more. As for the community friends who kept on sneaking up on me with a hug or a word of encouragement … I can’t ever thank any of you enough. On a very personal level it was fanstastic – I’ve enjoyed DPC for a few years and although the weather in Amsterdam was not so kind this year, the friends at the event (both the people I had already met and the friends I made while I was there) made it more than worth it.

Magic Methods on Think Vitamin

I’m happy to announce that my new post 9 Magic Methods for PHP is live on Think Vitamin this morning. I’ve written a series of posts about OOP for the site, with a few more to come, and these “underscore-underscore” methods make for some very neat tricks with PHP, which I’ve tried to show in the post. Hope you like it :)

The Unavoidable PHPWomen

I’m subscribed to a number of women-in-tech mailing lists because, well, I’m a woman in tech. Every few months or so a thread will come round about a technical conference with no female speakers. The issues around this are many, lengthy, and not something I want to write about here (or not today anyway!).

I was pleasantly surprised to note, then, that at the recent TEK-X conference, there was one slot where you could not AVOID seeing a female speaker. While Elizabeth Marie Smith delivered her slightly ranty “Cross Platform PHP”, Ligaya Turmelle was sharing her wisdom in her session “Replication with MySQL”, and in the remaining track there was a community roundtable, with my noble self on the panel! (OK so a panel is not a talk but hey, bear with me!)

I want to say thanks to TEK-X for being an amazing conference, to the community for being generally fabulous, and to the women in particular for being awesome beyond belief – this was a good day :)

DPC10 Has an Uncon

As the Host of the Dutch PHP Conference this year, you can imagine I’m squeaky-excited about the whole event. This story goes right back to last year though, when someone (Ivo? Cal? I don’t know who) conceived the idea of including an unconference in this year’s event. DPC is easily one of my favourite conferences and although I work for Ibuildings, I wasn’t directly involved with its organisation last year. In the autumn I wrote a proposal for running the unconference, and it was agreed that we should do it. Fast forward a bit and I became the host of the main conference, which is great news but left a slightly abandoned unconference behind – until the PHPBenelux user group stepped up and will be hosting the unconference alongside our main event (thanks guys!)

I’m so excited about the unconference, although I don’t know how our wider attendees will take to it as it hasn’t been done before locally. In order to include as many people as possible (and to keep the admin overhead to a minimum) we’ll schedule during the conference, on a first-come, first-served basis. This avoids the in-crowd getting voted into all the slots in advance; the uncon is for everyone to take part, not just for the people who are already well known! The uncon will also give us space to include extra on-demand sessions where people are wanting to see more about a particular topic, or see a demo of something a speaker mentions in a talk. Managing a changing schedule in real time will be interesting, we’re planning a two-pronged approach with twitter and Joind.in and I’m hoping this will allow attendees to hear about things they want to see in time to actually see them!

Its a new venture and I’m really interested to see how it turns out … if you’re coming to the conference then I hope you will give the uncon a look (in between the other awesome sessions on the schedule of course) and also take the time to share your thoughts on this and on the event as a whole. If you’re going to be there – leave a comment and let me know :)

TEK-X: Conference Report

Its been quiet around here recently, partly because I have been really busy and partly because I was in Chicago last week for the wonderful TEK-X conference. It would be very cool to get to go skipping around the world to conferences, however people paying for my airfares do seem to like me to perform some useful function while I am there and this was no exception with one tutorial and two talks to deliver, plus an appearance on a panel. I’ve attended this conference in previous years however so I knew it would be well worth it :) My sessions and an overview are outlined below:

PHP Best Practices

I was privileged to get a tutorial slot alongside my good friend Matthew Weier O’Phinney for a second consecutive year. This year we presented “PHP Best Practices” which was a lot of fun. We squabbled over topics and took turns presenting them from our own point of view. A description of the session and a link to the slides are on the joind.in page if you are interested.

Subversion in a Distributed World

Now that this talk is finally over, I don’t mind admitting that this was the one that I regretted submitting pretty much from the day it was accepted until the day I delivered it, including some rather sleepless nights. It was an adaptation of my “git folks are fanbois” bar rant but I got so concerned that I wasn’t supporting my accusations with facts that it evolved into a very coherent evaluation of what I consider to be the four main version control tools around at the moment: Subversion, Mercurial, Bazaar and Git. The talk went over better than I could ever have dreamed, and again you can find description, feedback and slides on the relevant joind.in page. If someone could please stop me next time I submit a talk that needs as much work as this, that would be awesome!

Open Source Your Career

I almost didn’t submit this talk, since its so very difficult to get a community talk accepted at the big conferences. They usually have one, at most, and I wasn’t sure I was in the top one of submitters on this topic. But, I had a transatlantic airfare to justify and I figured it might make a good second talk – I also know Cal well enough to know he likes a slightly contraversial take on these things. When he accepted it I was fairly surprised and actually quite nervous about spending an hour talking about myself in a conference session! I spoke without slides, so there aren’t any, but you can read the outline and feedback on joind.in. In a nutshell: get out and do things, you will reap the benefits one day.

In Conclusion

I had a great time in Chicago, and also managed some touristy outings into Chicago:

Garden in the City The Bean

The conference itself was quite a rollercoaster, not least because every session I delivered was written from scratch for this conference and I spoke at two other big events this year already – 4 sessions over 4 days is a tall order however you look at it and I had pushed my own boundaries a bit with the talks I submitted (for the record, I submitted plenty of perfectly nice, ordinary, technical talks that somehow didn’t make the cut!) On the final morning I delivered the career talk and then immediately sat on the community panel. I was aware of people saying to me “have you seen twitter?” but I had to turn around between sessions so I just nodded, smiled, and got settled for the next session. The upshot of that was that I sat in Marco’s closing remarks and read 2 hours worth of tweets about me, plus all the joind.in feedback on both sessions, all in one go.

At the risk of understatement, the feedback was totally out of this world, I couldn’t believe how well the sessions had gone over and it took me about 3 days to get over the shock … which is another reason it took me so long to write this post.

I’d like to say thanks to everyone who was there, left feedback, helped me prepare or just showed up to the conference and joined in the event as a whole. Stay in touch and I’ll see you all next year :)

Podcast: How and Why to Become a Speaker

This is a podcast version of my rant-in-the-bar advice to anyone thinking about speaking, or wondering how to begin. Personally I think many more people could be sharing their expertise at events than actually do so, and I would really like anyone who wants to get involved to have a starting point. So if that’s you, and you have a spare ten minutes to listen to my thoughts on the subject, then the mp3 is here.

Let me know what you think, and if you have any other advice you’d give to someone who isn’t yet speaking.

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.