
We frequently have client projects asking for paid membership with Drupal websites. No single module exists at this point, so we developed our own setup procedures for this by combining a series of existing modules. Step-by-step instructions are included below:
Specific modules used for paid membership:
We’re planning to write a module to automate this flow and hide the ‘shop like’ functionality of Ubercart, but before this – let’s describe how to build paid membership, step by step:
Step 1 – Create a member role (if you already done this you may skip this step)
Go to ‘User Management’ -> ‘Roles’ and add new role e.g. ‘member’.
Remember to assign all necessary permissions (‘User Management’ -> ‘Permissions’) with this role. Users will only pay for something really useful and attractive – like unique content or … some kind of game?)
Step 2 – Create a simple “membership” product (if you have already done this, skip this step, also)
Go to ‘Create Content’ -> ‘Product’ and create new product - e.g.
Step 3 – Set up Ubercart features – this is the base for your module
Go to ‘Store Administration’ -> ‘Configuration’ -> ‘Product Settings’ -> ‘Edit’ -> ‘Product Features.’
If you enable all modules above, you probably have two features: Role Assignment and Recurring Fee – that’s really what we need!

Role assignment required settings:
Recurring Fee required settings:
Save.
Step 4 will make it work!
Step 4 – Add features for membership product – main work!
Go back to our product – “Content Management” -> ‘Content’.
Select “Paid Membership’ node and click ‘Edit’.
Now you have to have 2 sub-tabs: ‘Product’ and ‘Features’ – select ‘Features’ here.
On the ‘Select Dropdown’, add a new feature ‘Recurring Fee’ click ‘Add’.

On the next page you can:
Save.
Now go back to ‘Paid Membership’ -> ‘Edit’ -> ‘Features’ select new feature ‘Role Assignment’ and click ‘Add’.

On the next page:
Two key notes:
While this process may seem lengthy, you can actually complete this effort in just a few minutes.

Now let’s talk about some final settings―
Step 5 – Final settings – Part 1 of 3- Payment and (some long descriptions)
For payment, I used Authorize.net gateway. Ubercart can control recurring billing with Authorize.net in two ways:
1) Using ARB
2) Using CIM and cron
ARB (automated recurring billing) service means that all operations are handled on the Authorize.net side. However, ARB is not useful in our case as we need to know when payment is failed to renew user memberships.
A better option is to store CIM (customer information management) ID in our DB and use it (CIM ID) to create a new order that is a recurring fee. That order is processed on our side and we renew the user membership after this order is completed. Or, we revoke membership if the order is failed.
Important notes that will save time:
Step 5 – Final settings – Part 2 - emails and conditional actions
Email – the ‘uc_roles’ module sends several emails through the ‘conditional actions’ module when role is granted, expired, going to expire, etc.
Go to ‘Store Administration’ -> ‘Conditional Actions’ -> ‘Overview’ page and you will be able to edit the text of these emails and (presumably) disable some of them.

Also I’ve added ‘store owner email’ to role expiration email receivers. This will notify admin. when the recurring payment fails.
Notes:
Step 5 – Final settings – Part 3 – orders list
Just few words here about ‘Ubercart View’ – this allows you to make order management easy! For example, you can delete all test orders in one click! Also with this module, I’ve output the product name in the orders list. The product name identifies if the order is the initial one or the recurring order (very useful).
Finally, I’d like to share some thoughts about the future module―
Relevant Links:
http://www.myptpro.com
http://drupal.org/project/ubercart
http://drupal.org/project/uc_recurring
http://drupal.org/project/uc_views
We hope these instructions may be helpful to you. If you have any questions or comments, please feel free to respond or contact us directly.
Mon, 11/29/2010 - 18:05.
Paid membership is a function we want to add to our site for specific members in the future. I've saved your post for our programmer's reference down the road. Thank you!!
Thu, 11/25/2010 - 06:08.
hi,
i follow all instruction and apply settings. but when go to create new user account and submit .it doesn't go to the checkout page.can you tell is any more setting required, after did all your settings ?
Thanks
Sun, 11/14/2010 - 15:05.
Hi,
I have a similar setup which i have configured for my site. however, is there a way of doing this with a standard Drupal registration? Or does the tutorial use a membership signup through the store you have set up directly?
What i want to do ideally is use the standard Drupal registration, and process this payment process when they have registered. Is that possible?
thanks
Craig
Tue, 08/24/2010 - 16:36.
This looks great! Thanks for putting this together - we're looking forward to trying it out.
Wed, 06/23/2010 - 08:17.
Great article. Couple of thoughts:
-- You can sign up for an Authorize.net developer account as opposed to interacting with your production account in TEST mode to more accurately test the CIM functionality in uc_recurring.
-- There's also the question of how you protect content for paid roles. A lot of people go with a node access module but I recommend to people that they check out the Panel's ability to conditionally override the full node view. Makes it easier to customize the display of the paywall and to use protected content in Views.
Thu, 03/11/2010 - 23:15.
Hello, could you let me know which versions of the modules you used to get this set up?
Thanks!