I'm building a subscription payments feature right now and I'm trying to determine whether using Magento's Recurring Profiles feature makes sense.
Of course, I would love to use the core feature, I like to be able to leverage core functionality wherever possible, but there are a number of reasons that I don't think it makes sense.
- We want products to be able to be purchased regularly or on a subscription basis, very similarly to how Amazon subscriptions work.
- We want to allow all subscription purchases to happen either every month, every 2 months, ... , 6 months. In other words, we don't need granular billing periods define per product or category or anything.
Issues with Magento's Recurring Profiles
- For starters, they were not released as a stable feature, but rather as a beta.
- You can't checkout with regular products and subscription products in the same cart. I don't really see any great reasons for this limitation. I actually noticed a nice Magento site recently that does subscriptions without this restriction, and it's pretty neat: http://www.harrys.com/ (UPDATE: I think harrys launched on Magento in March of 2013, but is no longer on Magento).
- A given product has to either be a subscriptions product (nominal product) or a regular one. So you can't easily have a product page with both a Buy Now and a Subscribe button on it.
- I don't really understand why they have recurring profiles defined on a per-product level. That's not what I need in my case and I'd imagine it's not a common use case.
- Shipping methods seem to have some hiccups with nominal products - haven't really dug into it too deep but it just adds to the madness.
- It didn't seem to be built with the idea that subscription payment services (like Recurly, Chargify, Braintree) would be available to handle the meat of the subscription configuration / processing. Maybe I'm completely wrong on that point b/c it was built against PayPal's recurring feature.
So, the approach that I want to take:
- Have a custom option that's available for every product for them to determine whether they want to subscribe on a monthly, bi-monthly, etc. basis.
- In the sales_order_place_after observer, check for any items in the cart with the subscription custom option set, and create subscriptions for them
- Store the subscription ID in the sales_flat_order_item table.
- Listen on Braintree webhooks for subscription charges, lookup the order item by subscription ID, generate an order an invoice for the product in question, with the same shipping method and tax amounts.
I'm hoping that there's not something massive that I'm missing here.