Why we ditched PayPal for Stripe

A recent backwards-incompatible change to the PayPal Adaptive API led toour web application being unable to accept new users for about five days a while back. We were getting a very vague “Session has expired” error, and PayPal support couldn’t figure out what was wrong. Nothing in that section of the codebase had changed for months, the breakage randomly started.

It ended up being that a recent PayPal API update had made a previously optional field required, and they only updated their PDF documentation (I use their HTML docs). There was no communication of the change in requirements leading up to the breakage, and we were alerted to the issue by frustrated customers calling support (instead of PayPal).

This was the second such breakage during our year or so of using PayPal’s Adaptive API. Granted, we use some of their more advanced split payments and invoicing features, this should not happen. Additionally, we weren’t happy with the user experience during checkout, which featured:

  • Re-directing users to PayPal. User enters credit card details or logs into their PayPal account.
  • User confirms they want to allow us to bill them.
  • User is re-directed to our site, where we again confirm their selection.
  • User gets what they paid for (an enrollment in a course).

A combination of being unhappy with customer support and the disruption of our checkout process with redirects led to us searching for alternatives.

The search begins

Initially, we looked at other similar (but more simple) services. WePay was at the top of our list. This is a young but promising service that makes collecting payments much easier than PayPal. They have a Python API (that we contributed some to), and good documentation. However, they still needed us to redirect our customer to WePay’s site, which ultimately led to their being scratched from the list.

We investigated some traditional payment processors like Braintree and Authorize.net, and while they looked like great services, we needed our customers (schools and businesses) to be able to get set up to receive payments quickly. A lot of traditional gateways have long, complicated setup processes, often involving sales calls and working with banks. Each of our customers would have had to go through this process, which would have presented a huge barrier in the setup process. They also typically require you to send credit card data through your servers, which means obtaining a level of PCI Compliance (not that we aren’t already security-conscious).

Another service we had heard great things about was Stripe. Like WePay, Stripe is a relatively new service, but has backing from former PayPal execs, along with some other great names. Diving in to figure out what the excitement about, we weren’t disappointed.

Stripe gets it right

The refreshing thing about Stripe is that they weren’t afraid to break convention. Instead of redirecting customers to Stripe, or sending their credit card data to their servers from ours (which you can still do if you want), they wrote a nifty bit of javascript called stripe.js. This little guy sends credit card data from a form on your site directly to Stripe’s servers (over SSL), which returns a unique token for that credit card. Said token is then submitted to your server via GET/POST/whatever, and your server uses the token instead of the user’s credit card number.

No redirects are necessary, we avoid having to hassle with monetary and time expense of PCI compliance, and the checkout experience is seamless for our user. We condensed everything down to one click of a button, staying 100% on our branded site.

Top-top notch customer support

The other thing that really shocked us after dealing with PayPal is Stripe’s customer support. We navigated to their support page to see where we could ask some questions early in the process. Imagine our shock when we saw a Campfire chatroom linked there. I cautiously entered the room, not sure what to expect. As the room loaded and I listened in on conversations, I realized that this chatroom has the Stripe developers in it, as well as the business-oriented staff.

Encouraged, I started my deluge of questions to determine whether Stripe would be an option for us. The Stripe staff answered everything consistently, thoroughly, and quickly. I stopped by a good number of times during the two weeks we were researching alternatives, and they were patient every time.

Let’s contrast this to our PayPal setup process during our early development:

  • Jump back and forth between some really convoluted, duplicated content across the then new x.com and their old developer doc CMS.
  • Guess which form to fill out. Send it in.
  • Get to work using their simple NVP API. Learn that what we were doing required the use of a completely different service.
  • Fill out more forms, switch to Web Payments Pro. Learn that this too isn’t what we needed.
  • Switch to the Adaptive Payments API. This particular API was actually pretty easy to work with, though a lot more complicated than Stripe’s.

And then our more recent complete service outage:

  • Enter a ticket in PayPal explaining that our customers weren’t able to checkout, and were seeing a very unhelpful error message.
  • Get a really vague, un-helpful answer back from someone we can’t actively engage with.
  • Get our ticket passed from person to person, having to explain things over again.
  • Having days go by until our issue gets passed to an engineer capable of diagnosing our issue.

PayPal’s mindshare and feature list are huge, but support is such a critical consideration. If we had been in anything but our current closed beta state, this would have been a major catastrophe.

Stripe, now with more Python

Another handy tidbit is that Stripe does have an officially maintained and supported Python library, stripe-python. You can talk to the same developers who maintain this in the aforementiponed Campfire chatroom, as well.

Bashing PayPal is becoming the stylish thing to do, but…

I’m going to get on my podium here for a second, so feel free to navigate somewhere else if this kind of thing bothers you.

A year ago, I usually brushed most harsh criticism of PayPal off. They had been good enough for my personal and professional use. We didn’t really have any reason to deal with their support before our current project, so it was a nice, cozy, detached relationship.

Dealing with their signup process, and later having to deal with their awful support during a service interruption soured me to them quite a bit. Hearing about how they have increasingly taken to freezing accounts for silly reasons has made the negative light I view them in even more intense.

Do consider alternatives before taking your business to this bloated, slow, and unsupportive behemoth. The small guys are going to want your business more, and do more to keep it. Few can go toe-to-toe with PayPal on a per-feature basis, but rarely do you use even the majority of the feature set.