I'm currently developing an e-Commerce site for where I work.
It's interesting seeing the sheer number of e-Commerce packages out there, and how many are either not expandable, tied to a particular workflow, or both.
At work, we charge a convenience fee per web transaction to cover the discount rate and other fees associated with e-Commerce. We charge the convenience fee per transaction. Because we are a non-profit, part of the work has been to try to reduce the total number of transactions.
Obviously, the way to do that is a cart to fill before processing the transaction. However, we have two types of items that go into carts. We have merchandise, where items have a quantity and cost. We also have registrations, where there is a cost, but also associated metadata and possibly merchandise.
I have not been able to find an e-Commerce suite that allows this sort of customizability, unfortunately, so I'm forced to roll my own.
What I'm doing right now is I've got a BaseCartItem class that everything derives from, and a BaseCartItemCollection class that I'm storing in my session state. When the user hits Check-out, I commit my session state to the database server until the payment is processed. Once payment is processed, I'm then doling out the objects to the appropriate database.
If anyone can think of a better way to do that, blog it!