There is an excellent component written by Jeff Wolkove of Mambo Resources, it is called Mambo Charge. We have no problems with his component and it handles user registration and subscriptions in an excellent way. When someones subscription expires or there payment fails after 2 attempts their access is automatically reduced back down to a basic level of access.
Excellent and requires little or no maintenance! We have three levels of access on our site and his component handles everything!
# You determine what user group the member is put into when they subscribe
# On termination you can lock their account, or drop them to a different access group.
# Automatic recurring billing is supported for any number of days, weeks, months or years that you choose.
# You can offer trial periods. For example you can charge $3.00 for the first 3 days and $24.95 a month thereafter.
# You can accept promotional coupons.
# Mambo patches are included. Users can register on your Mambo site, get a user ID and password, and still not be given "registered user" status until they subscribe.
# 10 custom flags, 5 integer values and 5 string values are available for you to set. When the user subscribes these values become part of their profile and are exposed by a custom class that your other components can access.
# Special Transaction Handler is included to create Hot Property agent records when an agent buys a subscription.
# Automatic termination of account at end-of-term
# Subscription details are stored in a subscription table, allowing you to extend Mambo's basic user and group permissions.