Read my latest article: 8 things I look for in a Ruby on Rails app (posted Thu, 06 Jul 2017 16:59:00 GMT)

Review: Braintree

Posted by Wed, 16 Apr 2008 19:58:00 GMT

Zack Chandler (author of the TrustCommerce gem) writes..

“How do you like Braintree? I’ve haven’t used them yet but may in the future…”

Good question. I was actually planning to write up a quick review of their exceptional service because not many people know about them yet. Now is as good of a time as any.

We’ve been using Authorize.NET for over four years as it’s what our primary banking institution hooked us up with when we began researching merchant services. However, they didn’t provide us with some of the subscription-based management features that we found with some other payment gateways and we began referring our customers to TrustCommerce. We planned to switch over to TrustCommerce with the development of Cobalt (our new billing and hosting support platform).

After we began to set milestones for going live with Cobalt, I tried to get in touch with TrustCommerce. I was provided a demo account and really wanted to get in touch with their sales department to get an application.

...a week goes by. No response. So, I tried to contact them again. No response. tried again… and (yet) again… no response. To date, I have yet to hear back from them.

This was echoed by one of our consulting clients that said, “their support staff seems real responsive, but I can’t get ahold of anyone to actually get an account.” So, I planned to start looking at other options or stick with Authorize.NET.

..and then (as if they were listening to my thoughts)... I receive an email from Bryan Johnson, founder of Braintree, a payment processing company.


“I am the founder of Braintree, a payment processing company. We provide credit card and electronic check processing, simplified PCI DSS Compliance through remote storage of credit card data, payment gateway/virtual terminal, etc. We’re a one stop shop.”

He goes on to introduce himself and explain that they’re really focused on subscription-based services, which is exactly what our new centralized billing app is handling.

So, since I hadn’t heard from TrustCommerce, I requested a demo with Braintree. We were able to take advantage of the hard work that has put into the ActiveMerchant project, which already works with Braintree. So, our application that we’d been focusing on integrating with TrustCommerce was just a few lines of code away from working with Braintree.

While I’m sure that many people have had great experiences with TrustCommerce (as I did when I worked with their support team while working client projects)... not being able to order an account isn’t doing them any favors.

So, we just launched and now running Cobalt with Braintree as our backend for managing recurring credit card processing. Their customer support has been great so far. In one case, I messed up some security settings and locked myself out and after they saw that I had failed to login a few times, I received a call from one of their support people. I didn’t prompt it… they took the initiative to call me. She said she’d look into it and called me back when she figured out what I had done wrong. :-)

On Monday afternoon, after I announced that we launched Cobalt on my blog, I got a congratulations from another of their developers who congratulated us and wished us the best of success.

So… Zack. To answer your question, “How do you like Braintree?”

My answer is… I think they’re fantastic so far. Their web interface for managing your account could use a few IxD eyes, but we like that it’s minimal and most importantly… the core functions of their product appear to be working great. Our team has now talked to roughly 5-6 different team members at Braintree and have nothing but great things to say about those interactions. Great customer service that definitely seems to echo that they want their customers to be successful and are here to do what they can to provide us with the tools we need to fulfill our goals.

I only wish that we had the same service from all of our vendors.

Bryan, thanks for introducing yourself. You have a great team.

Related Posts

Be Careful that you don't Stub your Big Toe

Posted by Tue, 13 Feb 2007 06:09:00 GMT

In a project that I’m currently working on, we’re handling recurring payments for subscribers. I’ve decided to play with a different payment service API on this project (TrustCommerce), which supposedly has one of the easier systems to handle recurring payments as well as one-time charges to the same credit cards. They store all the credit card data so that our delivered product to the client is CISP-compliant.

I came across the TrustCommerce Subscription plugin for Rails, which does just everything that I need to do in this first product release… as well as things that aren’t requirements just yet.

Well, I got my test account from TrustCommerce and was working on some RSpecs to test my new subscription and noticed that it was failing. After some snooping around the error responses, I realized that… test accounts don’t give you the ability to test the Citadel features of TrustCommerce. It’ll be another week or so before finish getting our account setup, so what am I to do? I really want to finish writing these specs and move on to the other portions that are dependent upon this working.

Suppose that you were going to perform something like this in an AR callback.

class BillingDetail < ActiveRecord::Base

  # validations    

  before_create :store_credit_card_data_with_trust_commerce


    def store_credit_card_data_with_trust_commerce
      # some of this is still test data... prettyu much copied from the README
      # TODO: refactor... but keep me out of controllers!
      response = TrustCommerceGateway::Subscription.create(
          :cc =>  self.credit_card_number, 
          :exp => '0412', 
          :name => self.customer_name,
          :amount => 1,
          :cycle => '1y',
          :demo => 'y'

      if response['status'] == 'approved'
          self.billing_id = response['billingid']
        # handle failure

Enter Mock Objects

Since I am unable to succesfully use the TrustCommerceGateway::Subscription.create method until I get our real account, I needed a simple way to emulate the interaction with the web service.

This can be done by using a Mock object, which RSpec provides for you.

TrustCommerceGateway::Subscription.stub!(:create).and_return( {expected response} )

Let’s look at the following spec file (much of it removed to protect the innocent).

module ValidBillingDetail
  def valid_attributes
    { # a hash of valid key/values for this model }

  def approved_trust_commerce_subscription
    { 'status' => 'approved', 'billingid' => '1093423' } 

context "A new billing detail" do
  include ValidBillingDetail

  setup do
    TrustCommerceGateway::Subscription.stub!(:create).and_return( approved_trust_commerce_subscription )

  # bunch of other specs

  specify "should store new billing info with 3rd party API and store the billingid" do
    @billing_detail = BillingDetail.create( valid_attributes )
    @billing_detail.billing_id.should_not_be nil

You’ll notice a few things. First, you’ll see that I’ve stubbed the create method and when it is called in the method in my model, it’ll return the hash that I’ve specified.

TrustCommerceGateway::Subscription.stub!(:create).and_return( approved_trust_commerce_subscription )

In the spec, you will see that I am checking that that the .billing_id.should_not_be nil. If you look back in the method in the model above, you will notice that an approved subscription returns a billing_id, which is set when the transaction is successful.

This is working out great for me and because the documentation is fairly easy to follow, I’m going to be able to mock much of the behavior that I’ll be using in the application, without needing to even connect to their API.

If you’re using RSpec, I highly encourage you to read more about mocks objects.