Despite the bad economy, more and more small businesses are getting cancelled by Merchant Account providers and by Paypal.
I've been on both ends of cancellations.
We've had a business account with Paypal since they were founded. Yet we were cancelled because by ex-girlfriend who lived in my household opened a paypal account in her name. Paypal claimed that I could not have duplicate accounts at the same address. Even though it was someone totally, entirely different. Just the same address. Thanks Paypal! This is happening quite a lot.
For our merchant account, we were cancelled because they did not support the travel or web hosting categories at our price point ($100.00 per month or more), even though they approved us for exactly this before. This is happening more often than small businesses would like these days.
We were approved for other merchant accounts, but this post on the launch.is blog, clued us into Stripe and we decided to give them a shot. So we put the other merchant accounts on hold.
Technical Implementation
Stripe prides itself on being developer friendly. And the documentation really is some of the best I've seen anywhere. It shows full and complete REST (using Curl), Ruby, Python and PHP examples:

Because we're a Ruby shop, this made is super easy to integrate Stripe into a small Sinatra app we created to manage recurring payments.
1. Setup a new Plan for recurring in Stripe. Give the plan a short name that you can refer to
2. Drop the stripe gem into your Gemfile and bundle install it

3. Create a payment form on a secure page on your site. It looks something like this:

The big deal with this form, is that its processed with Javascript and form data never even hits your server. Its submitted directly to stripe using their stripe.js jQuery compatible library. If you've even done some basic jQuery, you should be right at home here.
Stripe.js handles errors, allowing you to show error messages with the card without refreshing the page.
Once the card is submitted, your callback function fires off and is given a token, which you can now use to submit the rest of the form to your processing script.
4. Create a controller action that accepts the token and other form fields that you need. Use this token to (a) create or retrieve a customer record stored in Stripe, (b) Charge the customer, or add them to a recurring plan you setup in step #1.

Really, that is pretty much most of the code that you need to subscribe and charge a customer. By using this method there is no worry about Credit Card PCI compliance since - to repeat - card details never hit your servers, not even in a log file.
Stripe has thought very deeply about their API. For instance, by calling Stripe::Customer.create(...) you create a customer, add a subscription plan, and include the aforementioned credit card token that immediately charges the customer. This dramatically reduces the amount of code you have to write.
5. If there are no exceptions, you get the customer info, and the basic card details (last 4 digits, expiration date, etc) and you can store that in your transaction database for later reference.
There are even callbacks that hit your server if certain transactions happen, like declined credit cards, which will allow you to send out invoices, card declined notices and other event emails to you and your customers.
I think one of the best part of using stripe -- besides the easy integration, is that you don't need a merchant account. This comes at a price of holding your funds for 7 days. Which is not bad at all.
Give them a shot before they get huge and start cancelling customer accounts when the bean counters take over :-)
No merchant or online payment account is safe, and its a good idea to have backups in place so you're not scrambling when something happens.