I launched my first e-commerce site this month, and it's running on Satchmo pre-0.9 (trunk).  Satchmo is a "framework" for building Web stores, itself built upon the Django Web application framework.

You can find a complete list of Satchmo's impressive features on the project's Web site.  I'll talk about some particulars that I found invaluable in developing the Wild Rose Fibres store.

Product Variations

The majority of the products for sale at Wild Rose Fibres come in different shapes and sizes, so to speak.  The same type of fibre can come in various colours, and may be available in different package sizes.  Describing this information on a static HTML site is fairly simple, but becomes complicated when you need to represent it in an automated system.

Variation Manager

Satchmo's Variation Manager helps automate the creation of all the combinations you might have on a single product.  For example, we have "bamboo" fibre that not only comes in different package sizes, but also in a plethora of different colours.  In a less sophisticated system, I might have to manually create Bamboo—Jade (2oz), Bamboo—Azure (2oz), and on and on for number of colours times number of package sizes.  Instead, Satchmo shows me a list of possible combinations (based on the options I specify), I select them, and Satchmo creates them.

I still have to enter specifics for each variation (if each one has a different price or a different photo), but the beautiful thing is that after I do this, it renders automatically in the storefront in option-list, AJAX-updating glory:

Bamboo Options

Custom Payment Modules

When I began the project, I was assuming that I would be using one of the many payment gateways that Satchmo already supports.  I was faced with a bit more of a challenge when my client informed me that, since she was already signing up for other services, it would be more convenient to do payment through her bank: TD.

TD uses Beanstream for payment processing, a gateway unsupported by Satchmo (at the time of this writing).

Thankfully, the Satchmo project provides good documentation for dropping in your own payment module.  Because Satchmo comes with a variety of payment modules, new ones can often be modelled directly off of old ones.  In my case, I found that the Google Checkout module closely resembled my Beanstream needs (I also used a bit from the Protx module).

For anyone who needs a head start on interfacing with a Beanstream shopping cart, feel free to check out my module.

PCI DSS Compliance

When you're dealing in any way with payment cards on a Web site, you need to be aware of the Payment Card Industry Data Security Standard; it's a set of requirements that credit card companies and banks require you to meet depending on how you handle customers' card information.

Satchmo is designed to be able to meet PCI DSS standards at multiple levels, depending on your needs.  It can store credit card information securely using strong encryption.  It's easy to switch on SSL at checkout for secure entry of payment info.  Or, if you're like me and decide to avoid the PCI hassle altogether, you can ensure that no credit card info is stored and simply ship customers off to the payment gateway's server to complete payment.

User Group

The Satchmo Users group has been a great help for the times that I was stumped.  Especially, I want to thank Bruce Kroeze, Chris Moffitt, and Bob Waycott for making the software what it is and for devoting so much to the community.


I could go on about shipping and product modules, the translation support, and the power available thanks to Django and Python.  I think the results of Satchmo-based stores like Ooh-Ga-Boo-Ga and Live Your Passion speak for the power and flexibility of this open source solution.


7 Responses to Satchmo

  1. when you say

    "simply ship customers off to the payment gateway's server to complete payment."

    I'm trying to implement something like this, can you provide some details for how you can process the order on a 3rd party payment page and re-direct back to the Satchmo cart to complete the order?

    Is there an existing payment processor that does something like this and I'm just missing it?


  2. Dane,

    You might want to take a look at my Beanstream module. It's designed to do what you describe. It's based on the Google Checkout module that comes with Satchmo. The current problem with the Google Checkout module is that it doesn't record a transaction in the Satchmo store once payment goes through on Google.

    The way you implement a custom payment module depends of course on the design of the payment solution you choose. Beanstream provides a payment page where you can send any transaction data as POST variables. You can also specify the URL that you want your customer to be redirected to after the transaction. In my case, it's a Django view to record the payment if it was successful or display an error if it failed.

    Look at in my Beanstream module (along with the Custom Payment Module Documentation to guide you). The confirm_info view and template render transaction data as hidden HTML fields so they can be POSTed off to Beanstream. The results view handles the response that comes back after the transaction.

    I hope this helps.

  3. Daniel, thank you very much for your detailed an informative reply.

    I've downloaded your module and plan to use it as a blueprint for my own, which I'll make sure to share.

    Thanks again.

  4. saurabh dwivedi wrote on November 22, 2009 at 23:56

    Hi Daniel,
    can u help me to integrate paypal payment gateway in satchmo. It's great to see such helping sites, as i am new to python as well as satchmo, so i need help of pioneers of this field.

  5. Saurabh,

    As far as I can tell, PayPal is a supported module in the default Satchmo store, so the integration is basically done for you. Just make sure you've enabled PayPal as a payment module in the Satchmo configuration, then fill in the specific PayPal information in settings.

    See and further down ( for tips on getting your store up and running.

  6. David wrote on April 11, 2010 at 11:53

    Hi Daniel,

    How do you integrate the module into a project? I've tried several things, but just can't get any Beanstream configuration to show up under /settings


  7. David, are you trying to integrate my module specifically?

    I would follow the steps here:

    If it isn't working, there's a chance that Satchmo has changed since I wrote my plugin, and you may have to look at the documentation to see how Satchmo currently expects payment modules to behave.

    I hope this helps, and I hope you find a solution.