Can I be Your Rubber Duck? Debugging Code With a Friend
Rubber duck debugging. Talking to debug code helps you see the solution. Read More
Modernization is inevitable for SaaS companies. Now, thanks to Qualpay, we were able to add ACH transfers as a payment option for services. In this article, our CEO, David Ordal, goes over the process our team went through to implement ACH.
One of our core operating principles is keeping our business efficient. To that end, we’re always looking at ways to simplify our payment infrastructure.
When we started the company, you could pay us one of two ways — via credit card or PayPal. We didn’t take checks, or wires, or any other type of payment. As we’ve grown, and begun working with more enterprise customers, that’s changed. Many of our larger customers have a policy prohibiting credit card payments, and most corporate Accounts Payable departments have barely heard of PayPal.
Additionally, credit cards and PayPal are expensive — 2.9% + 30c per transaction is a typical credit card pricing model. Of course, you can do a lot better than that with interchange-plus pricing (a topic for another day), but even so, you’re still looking at a few percent, especially on smaller transactions.
ACH offers a way out. ACH (‘Automated Clearing House’) payments are bank to bank transfers – a way for one bank to send another bank money directly, routed with the help of a nationwide ACH network.
From our standpoint, ACH payments work considerably differently than credit card transactions.
A credit card has two steps: authorize and capture. When you process a credit card, you make a request to a credit card processing network asking to verify a specific card has a certain amount of funds available. For example, ‘Does Mary Jane’s card x1234 have $100.00 available?’. You get a reply right away, and that reserves the funds for you. Sometime later (sometimes seconds, sometimes days), you’ll ‘capture’ the transaction you authorized, which moves the funds into your account.
ACH is different. The big advantage of credit cards is that you know right away whether funds are available. By authorizing the transaction, you’re guaranteeing that you’ll get your payment, as long as you follow through and capture it. With ACH, you make a request to transfer funds from your customer’s bank to your bank. Then you wait. After some number of days, the funds either show up — or they don’t.
*Sender is the originator for an ACH transaction.
The big challenge with ACH is automation — traditionally, verifying that funds are received was a manual process. For us, that wouldn’t work: verifying ACH payments at scale wouldn’t be feasible.
After a series of meetings between Elizabeth (Head of Customer Ops), Amy (Customer Ops Engineering), and myself, we started to get a handle on what we needed to do.
– We knew we’d need to either find or write an ACH module to interface with our customer management and billing software, called WHMCS.
– We’d need to find a ‘modern’ ACH vendor. I’m not going to name names, but many of the vendors out there have technology that could charitably be called ‘traditional.’ Web interfaces that look like they were last updated in the days of Netscape Navigator. APIs that use heavy SOAP and XML protocols. We wanted something modern — a clean interface for us to work with, and a fast, easy to use RESTful API.
We figured we’d have the best time if we could find a vendor that already had a WHMCS module. So we started searching… Google ‘WHMCS ACH module’. Then, visiting the WHMCS marketplace, looking for ACH modules.
It rather quickly became apparent that there were no solid options out there — of the few options we found, most didn’t have automated ACH — they could initiate a transaction for you. Still, it was up to you to log in and figure out if the transaction went through.
We resolved that we’d have to write our own module, which meant finding a vendor that we wanted to work with. We’d done a lot of Google searching, and a lot of talking to vendors, but nobody was standing out. Then, lightning struck — I was fortunate enough to meet with Jon Gilbert at the Wordcamp National Conference in Nashville, TN, who worked for Qualpay. At the time, Qualpay didn’t support ACH, but they had a fantastic credit card processing platform, and ACH was on the near term roadmap. We offered to be one of their first ACH customers.
Now the real work began. We had to build the module that would tie our WHMCS billing and automation system into Qualpay’s ACH platform.
The first problem to solve was to learn how WHMCS supported ACH. We knew it did — somehow; there are extant ACH modules listed on their billing automation page. By inspecting the database schema, we saw encrypted fields relating to bank information in the table for client information (bankname, banktype, bankcode and bankacct, for those of you playing our home game). While WHMCS’s documentation was a bit coy on details about how to use the fields, we were pointed in the right direction by WHMCS developer support.
Now we just had to figure out how to do the build.
We determined there would be three steps to an ACH payment:
A form is inserted into the invoice asking the customer for their bank account info. This form lets us capture their account details, including their routing number and account number.
Once a customer hits ‘Authorize Payment,’ we make an API call to Qualpay, to start the ACH process. We then mark the transaction as PAYMENT PENDING and store the information in WHMCS’s encrypted ACH fields for future use.
We launched our integration on July 24, 2019, and have seen great success so far. Many of our clients have opted to switch to ACH payments, which is easier for them and saves money for us. ACH took some research to get working right, but has ended up to be a very positive payment option for both our customers and us.
Want file transfer built for your business? Try ExaVault today!
Rubber duck debugging. Talking to debug code helps you see the solution. Read More
Managing potential failure modes effectively is critical to application availability and user experience. Read More