I’ve not used Stripe, but I’ve used Braintree for a while. Braintree is an older company, and it seems to have a bigger, lower level API. Stripe’s is much higher level, and looks like it could be both simpler and easier to use. This is probably not just because of age, but also because Stripe wraps and owns your merchant account (it looks like), while Braintree works with a merchant account, exposing many more technical details of the payments process (thus making you manage them).
Braintree’s API, while REST underneath, is only supported at the library level and they have more languages supported for this reason than Stripe (Including mobile specific APIs). Obviously this makes it much easier to support newer, hipper languages with Stripe - just write your own wrapper to the REST API.
Most of the big features seem to be supported on both platforms, one off and reoccurring payments, token based transactions, etc.