16 replies [Last post]
todda00@drupal.org's picture
Offline
Joined: 12/09/2008
Juice: 40
Was this information Helpful?

I am starting this thread with a goal mind: To discuss the recurring billing functionality we want available with Ubercart, and how we are going to get there.

For the past few weeks I have been diligently reading, coding, and pulling out my hair figuring out what is currently available with recurring billing for UC 2.x, and what needs to be created or modified to get there. There has been a number of discussions around this topic and it takes someone new to the topic a lot of searching to get a grasp on the current status. First I will spend some time outlining the current state of recurring billing.

Ubercart Core Modules
The included recurring functionality (uc_recurring) does a good job of allowing any payment module to hook into it. In my mind, this was definitely done the right way. Where I do think some issues are with this is how recurring billing ties into the order system. There was some discussion here about the desire for a recurring fee to create a new order. This is good for both physical and virtual goods in the sense that a user can then see a payment history. As it is right now, a customer cannot see a log of payments.

The core modules currently use Authorize.net's ARB for recurring billing. As it is, there is no way to monitor failed transactions built-in, and I am not quite sure how expired credit cards are handled, but my guess is not very well. ARB does not allow for editing the recurring fee site side, but that is not a large issues as it can be modified from Authorize.net's interface if needed.

CIM
The uc_cim module does a better job of handling recurring billing. I evaluated the port to UC 2.x for this module, and found a few bugs resulting from changes from 1.x -> 2.x. The benefits of this module are as such:

  • Help your repeat customers checkout more quickly by entering their credit card info only once.
  • Accept pre-orders for a product and charge the customer when you ship it.
  • Process recurring payments using the uc_recurring module.
  • Process refunds from within Ubercart.
  • Admin ability to create orders and charge a stored credit card for a user.

The only thing that I see as a step backwards from the core ARB is not having the ability for anonymous checkout. This is because the CIM information has to be linked to an account, and in the checkout process, the account isn't created until after the CIM code has to run. I was able to modify the CIM code without touching the core Ubercart to create the order during the CIM process, but the problem with that is that then Ubercart thinks it is an existing account and reports to the user that it found its existing account. It works, but is hackish.

If this module is going to live up to its potential it needs to have a project page on d.o and an issue tracker. There is no way to collaborate around this module as it stands.

I know this discussion was specifically around Authorize.net, but I believe that is where we have to start, to get at least 1 good recurring system going, and this is the furthest along. Please discuss your desires for recurring billing functionality, and ideas on how we can collaborate and manage this elephant of a requirement.

univate@drupal.org's picture
Offline
Getting busy with the Ubercode.
Joined: 03/27/2009
Juice: 465
Re: Recurring Billing Discussion

I recently posted some of my own thoughts on recurring billing (includes a patch with a working solution on my issues):
http://www.ubercart.org/forum/ideas_and_suggestions/10133/uc_recurring_t...

The problem I see with your post is it just focuses on authorize.net - there are other options out there and for ubercart to have a solid recurring billing option it needs to be flexible and support many different gateways.

Some gateways i have personally used or investigated for recurring billing are:
* Paypal provides a good option for subscriptions, everything is reported back via their IPN (I have used this solution for a number of years now)
* Google looks to be providing a reasonable XML api for recurring payments
* securepay.com.au is a gateway I use in Australia and have used their triggered payments api to handle recurring billing for a few years, it has all the advantages of managing credit billing completely yourself without having to store the actual credit cards
* eway.com.au is another australian gateway that has added recurring billing (haven't used them)

What should be provided for recurring billing is a solid api and standard process for any payment gateway to work with it, if a gateway supports recurring billing they should just provide this in their gateway module and uc_recurring picks this up and provides this as an option to end users setting up the site. uc_recurring in turn should prove all the infrastructure to tap into other parts of ubercarts systems like uc_roles.

One of the other annoyances I have with uc_recurring is there is no way to support both paypal subscriptions and another credit card subscription option like you can currently do with normal orders. The patch I have provided here fixes that by allowing ubercart to support more then one recurring billing option, as well as automatically handle uc_role renewals, done through the conditional actions:
http://drupal.org/node/426466

That patch is not complete, really just a test on the idea to show it works, but in this process I have come across a few other minor issue in the way recurring fees are handled, including the order of when the recurring fee is setup, at the moment it happens after the order is completed, the problem with that is that gateways like Paypal that really need to charge the order and setup the recurring fee at the same time and cannot with with this structure.

I am keen to hear from anyone with a view on recurring payments and how they would like to see them handled, is what I have proposed a good solution or are their better options/ideas I haven't thought of?

Eidolon Night's picture
Offline
Joined: 12/03/2008
Juice: 51
I second the motion

I fully agree that ARB is terrible. I also want to note that the built-in CIM is terrible as well. The contributed CIM module has much more function.

I also agree that recurring payment should not be locked into Auth.net.

Another major issue that I've seen in the community here is the integration of recurring payments and role promotions. There's a major thread about this somewhere, but no good conclusions came from it. As it stands now, the whole process of "subscriptions" is clumsy and takes a whole bunch of hacking. Considering the fact that we're in web 2.0 and online software services are growing, this functionality deserves more attention.

I believe that uc_recurring and uc_roles do not have a project page on Drupal.org because they fall under the Ubercart umbrella.

I think what we need is some way to separate out the various Ubercart modules for discussion. Maybe break up the dev forums? We also need some kind of wiki or community documentation. The current documentation is sparse and old. The documentation forum is... messy. A wiki would be an easier format to work in. That way the people who really know how things work can share their knowledge in an easily browsable format.

Sorry for the scatter-shot post.

todda00@drupal.org's picture
Offline
Joined: 12/09/2008
Juice: 40
Re: I second the motion

I realize that my original post was very Authorize.net centric. I do believe that the recurring module needs to be generic in nature, and not tied into any one specific gateway. With that said, my post was mostly about Authorize.net because that is what we have now.

As far as the call for a project page, that was intended for the uc_cim module, I understand why the uc_recurring module does not have a seperate page.

I like the idea of a more split Development forum. With a huge project such as UC with over 8000 members on this website, we definitely need some more sub-categories for development related discussion.

A better way to do documentation is an obvious need, there is too much focus on a select group of people to do the work for UC, which is why things go slower than they could. If I said I wanted to help with documentation, then I would be expected to do quite a bit, but if we had a wiki, then I could update the documentation as I am stumbling through code trying to figure out the functions and hooks.

univate@drupal.org's picture
Offline
Getting busy with the Ubercode.
Joined: 03/27/2009
Juice: 465
Eidolon Night wrote:Another
Eidolon Night wrote:

Another major issue that I've seen in the community here is the integration of recurring payments and role promotions.

This can be fixed easily if a renewal creates a new order, I have already created a patch to prove to myself how much better everything would be if a recurring payment worked this way - at the moment it only works on the test_gateway - http://drupal.org/node/426466

This patch doesn't need to change uc_roles to get uc_recurring playing nice with it, just make a new order when a payment is renewed and the conditional actions takes care of it (I am using the 6.x-2.x series)

Some focused development discussion areas on this site would definitely be a good idea.

Scientifik's picture
Offline
Joined: 04/22/2009
Juice: 7
Re: Eidolon Night wrote:Another

Count me in with this, I'm about 90% ready on a site to go up that uses almost all recurring billing.

Is there any plan to make Ubercart PCI complaint?

c0mputerking2's picture
Offline
Joined: 11/17/2008
Juice: 76
Re: Recurring Billing Discussion

I have a consulting company that sells reoccurring monthly packages most of my payments are not through a gateway usually i get a check in the mail. I thought ubercart would automatically create a new order when the time arrived according to these posts it does not?

My work flow is kind of like this;

Arrive onsite do some work and sell a monthly/yearly subscription

login to ubercart as admin create an order

print a invoice (not sure how the reoccuring stuff works i have added it as a feature to the product)

accept a check right there and then

apply a payment

hope that ubercart will somehow send me and the client a new invoice when one month has passed or at least alert me that i have to manually bill the client again. Do not think this is happening.

Note on invoice creation:
Still tryin to decide if each client should have an account because this makes it hard to create orders for them later always have to enter the address info. If someone has a solution for this please let me know right now i use uc_addresses but it only works for past orders not user addresses.

Eidolon Night's picture
Offline
Joined: 12/03/2008
Juice: 51
Re: Re: Recurring Billing Discussion

Recurring payments are attached to a single order so a new order is not created with each payment. It does however send some kind of notification that a payment has been entered. I can't remember if it's a full invoice or not.

This, again, is information that should be added to the documentation pages... which I just realized are editable. I'll be heading over there soon to post.

univate@drupal.org's picture
Offline
Getting busy with the Ubercode.
Joined: 03/27/2009
Juice: 465
Re: Re: Re: Recurring Billing Discussion

But all the other hooks in ubercart act on new orders not new payments. So when you setup a product with a recurring payment and say it needs to have certain shipping, roles (and anything else) attached - why is the recurring payment different? it should also apply the shipping and roles, maybe what I want is a recurring "order" and is completely different problem to what the current module is designed to solve?

You definitely do not get a full invoice with the current system on a recurring payment (which is wrong, people need a proper invoice on every payment not just the first one)

My questions are:

* What benefit is gained by only having the one order?
* What is the difference between renewing a subscription manually every month and having it renewed for you automatically? (one is a new order the second is not)

todda00@drupal.org's picture
Offline
Joined: 12/09/2008
Juice: 40
Re: Re: Re: Re: Recurring Billing Discussion

I'm glad to see the Recurring Fee code has been moved to contrib. I think this is a great move, as we can now work outside of the Ubercart release cycle, and are able to mold it more to our needs.

http://drupal.org/project/uc_recurring

Excited to see orders finally being created with recurring fees soon!

j0rd's picture
Offline
Getting busy with the Ubercode.
Joined: 07/16/2008
Juice: 453
Re: Re: Re: Re: Re: Recurring Billing Discussion

subscribing.

micfish's picture
Offline
Joined: 05/18/2009
Juice: 2
usage based invoicing

Will this also cater for Usage Based Invoicing as well as a regular monthly fee?
ie. I have a monthly subscription of X But there is also an addition charge based on usage (for this example lets say SMS this month I use 20 text messages next month I use 100)

so the line items would be:

subscription $x
Usage cost(SMS) $Y

Total $total

My question is can I trigger a payment on the whole invoice automatically or just the original subscription.

Thanks

univate@drupal.org's picture
Offline
Getting busy with the Ubercode.
Joined: 03/27/2009
Juice: 465
Re: usage based invoicing

This really depends on the payment gateway you want to use to process payments. But I am looking to provide this functionality with some hooks in uc_recurring that give your own module a chance to jump in during the renewal process so you can modify the new order for that renewal schedule.

But that will only work on payment gateways where you have the ability to modify the amount each payment interval.

Please add your features/thoughts/suggestions to the uc_recurring issue queue so we can keep track of these things.

flavoflav's picture
Offline
Joined: 10/01/2007
Juice: 103
univate@drupal.org
univate@drupal.org wrote:

This really depends on the payment gateway you want to use to process payments. But I am looking to provide this functionality with some hooks in uc_recurring that give your own module a chance to jump in during the renewal process so you can modify the new order for that renewal schedule.

But that will only work on payment gateways where you have the ability to modify the amount each payment interval.

Please add your features/thoughts/suggestions to the uc_recurring issue queue so we can keep track of these things.

I have a need as well to have CIM recurring billing work reliably. I was wondering who I would contact about a bounty payment to get some work done on this. I am willing to dedicate cash to help the developers of this module get it polished.

Let me know Smiling

John

gaperville (not verified)
gaperville's picture
Recurring Showing Wrong Price

Using Drupal 7:

I have an original price of $30.00 and then when I look @ the recurring fees, it shows 3.00 and not the 30.00. I have all the settings as the same as the sell price and when I go to the edit form, it shows the recurring fee of $30.00.

Any ideas on how to fix this? Thanks.

AttachmentSize
1.png 12.7 KB
2.png 7.77 KB
Bacon's picture
Offline
Joined: 10/25/2011
Juice: 8
UC Recurring Removal

Hi -
I run Ubercart with a subscription service that uses recurring payments. We recently decided to remove the recurring payment functionality in favor of just simple subscriptions that expire. What is the smoothest way to keep current subscriptions but remove the recurring payments?

Would simply turning off the module do the trick? Could that technique corrupt current subscription orders?

Thanks!
Kent

Bacon's picture
Offline
Joined: 10/25/2011
Juice: 8
UC Recurring Removal

Well, I got a little impatient and decided to roll the dice. I am happy to report that simply disabling the UC recurring module did no harm to my existing customer accounts. I did of course backup my database before trying this. Smiling