* Chargify
* Recurly
* CheddarGetter
* Authorize.NET (and subsequently CyberSource)
In addition to what I've mentioned from personal experience, there's a couple of previous posts on this subject worth checking out:
* Poll: How do you bill recurring payments? - http://news.ycombinator.com/item?id=2201363
* Ask HN: Recurring Billing Solutions - http://news.ycombinator.com/item?id=1438929
* Recurring Billing For Web Apps - http://thinkvitamin.com/dev/reoccurring-billing-for-web-apps...
WePay provides a simple checkout API that you can embed on your own site via iframe. This way you can have the entire checkout process on your own site (unlike most PayPal APIs), but without dealing with the PCI nightmare. http://stage.wepay.com/developer
there are some other javascript payment solutions I think, but the stripe one is the best I've seen.
It seems a bit pricey compared to other options but they handle things like charge backs and locale specific tax. Whether that justifies the higher commission rate is debatable.
Some things I didn't like about it: (1) For new / low volume users there's a mandatory telephone number field. (2) Once the transaction is complete it's not possible to automatically redirect back to your site.
card information is stored in braintree's secure vault and monthly subscription charges are processed on my server using each customer's vault token. braintree got easier recurring billing since i implemented this, but it all works so i'm not about to change it.