Dan Appleman: Kibitzing and Commentary

My personal blog

I wrote an online store. I didn’t really want to, but I just couldn’t find a solution that fit my needs.
I wanted a shopping cart that had really good extensibility – one that could connect to our licensing server not just to allocate keys, but to perform custom operations like allowing purchase of additional installations for existing keys.
What I found was largely disappointing. Not that there weren’t some great packages out there. If I wanted to set up a large online store with many products, it was clear that setting up my own Amazon.com equivalent would not be hard at all. There are any number of powerful online stores with numerous features available. But none of them had exactly the right features, and none had the extensibility I needed.
What I really wanted was a shopping component – some ASP .NET controls that could be dropped onto any ASP.NET page and would somehow work together to implement a shopping cart. There would be a control that would “add to cart” a single product – and a page could have any number of these control to display multiple products. There would be a shopping cart page that would allow modification of quantities or deletion of items from the cart. And there would be a checkout control.
In my ideal solution checkout would be handled by an external processor such as Paypal, and once the order was confirmed my code could issue license keys, download links, send out customer Emails and so on.
After searching through and installing trial versions of numerous packages, I came to realize that none of them came close. The truth is, I didn’t want an online store – I wanted an online store component.
So I wrote one. The excuse I used to justify the time was that it would make a great application note for the latest version of our licensing system. But in truth, it sounded like a lot of fun – and it was. I ended up using authorize.net for the credit card integration (they have the best online documentation for developers of any of the card processors I found other than perhaps Paypal).
There’s still some work ahead to turn it into an application note for distribution, but the store is now live at http://desaware.com/purchase/store.aspx.
Above all, the experience confirmed to me the rightness in the way we decided to extend the licensing system for the newly released version 2. Instead of piling in features, we focused on enhancing the extensibility model. Our licensing system is not so much a licensing application as it is a licensing component – and right now it’s hard for me to imagine a licensing scenario that it can’t implement.