Question

You know those websites that let you type in your checking account number and the routing number, and then they can transfer money to and from your account?

How does that work? Any good services or APIs for doing that? Any gotchas?

Was it helpful?

Solution

The banks do have APIs for doing this, but only approved people/companies are allowed to interface with these systems. Because it actually involves transferring money around, the security requirements are pretty high in terms of how you handle the account numbers on your system.

Many sites that offer this feature for buying goods actually use a third party system to handle the actual money transfer into their account. This lowers the amount of trouble to implement the API, as well as putting the burden of security on the third party handling the money transfers.

If you are serious about setting up a system where you can accept bank account numbers, and exchange funds, you should contact your bank, and see what the actual requirements for implementing such a system. Each bank has their own system, along with their own rate regarding the cost of these transactions.

Some third parties I'm aware of are

I'm in Canada, although I think Moneris and Cactus operate in the US. I think Beanstream doesn't. Again, you can talk to your bank, and they can probably get you in touch with a third party who will help you with the transactions.

OTHER TIPS

If you want to be able to initiate transfer of funds between accounts in different financial institutions (using account and routing number), you need to find a payment processing company that offers ACH (http://en.wikipedia.org/wiki/Automated_Clearing_House) transfer services. Usually these companies are subsidiary of a financial institution that already has access to ACH. For example. one such company is ACH Direct (http://www.achdirect.com/). I can't vouch for its services or reliability though, I am just giving it here as an example of what type of companies you need to search.

Of course, technically, you could try to connect to ACH directly. However, to do this, you need to follow the rules and regulations of NACHA (http://en.wikipedia.org/wiki/NACHA-The_Electronic_Payments_Association) when writing your software and pass rigorous certification. It's quite a big investment, so unless you are backed by couple of bilions of dollars, I wouldn't advise attempting this.

You can do this with a Moneris US eSELECTplus merchant account - you just need to have Automated Clearing House (ACH) enabled on your merchant account (unfortunately there is no equivalent to ACH currently available in Canada).

Here's an example of what a debit transaction looks like in the Moneris US PHP API:

<?php

require "../mpgClasses.php";

/************************ Request Variables **********************************/

$store_id='monusqa002'; //account credentials
$api_token='qatoken';

/************************ Transaction Object******************************/


$txnArray=array(type=>'us_ach_debit',
            order_id=>'ach-'.date("dmy-G:i:s"),
            cust_id=> 'my cust id',
            amount=>'1.00'
            );

$achTemplate = array(
       sec =>'ppd',
       cust_first_name =>  'Bob',
                 cust_last_name =>  'Smith',
                 cust_address1 => '101 Main St',
                 cust_address2 =>  'Apt 102,
                 cust_city => 'Chicago',
                 cust_state =>  'IL',
                 cust_zip =>'123456',
                 routing_num => '490000018',
                 account_num =>  '23456',
                 check_num => '100',
                 account_type => 'savings'
                );

$mpgAchInfo = new mpgAchInfo ($achTemplate);
$mpgTxn = new mpgTransaction($txnArray);
$mpgTxn->setAchInfo($mpgAchInfo);

$mpgRequest = new mpgRequest($mpgTxn);
$mpgHttpPost = new mpgHttpsPost($store_id,$api_token,$mpgRequest);

/************************ Response Object **********************************/

$mpgResponse=$mpgHttpPost->getMpgResponse();


print("\nCardType = " . $mpgResponse->getCardType());
print("\nTransAmount = " . $mpgResponse->getTransAmount());
print("\nTxnNumber = " . $mpgResponse->getTxnNumber());
print("\nReceiptId = " . $mpgResponse->getReceiptId());
print("\nTransType = " . $mpgResponse->getTransType());
print("\nReferenceNum = " . $mpgResponse->getReferenceNum());
print("\nResponseCode = " . $mpgResponse->getResponseCode());
print("\nMessage = " . $mpgResponse->getMessage());
print("\nAuthCode = " . $mpgResponse->getAuthCode());
print("\nComplete = " . $mpgResponse->getComplete());
print("\nTransDate = " . $mpgResponse->getTransDate());
print("\nTransTime = " . $mpgResponse->getTransTime());
print("\nTicket = " . $mpgResponse->getTicket());
print("\nTimedOut = " . $mpgResponse->getTimedOut());

?>

The API files and integration guides for Moneris USA are available at:

http://developer.moneris.com (free registration required)

Moneris USA - ACH:

http://www.monerisusa.com/payment-processing-services/ach-direct-debit.aspx

Stripe Connect allows you to transfer money to bank accounts and to accept payments through one unified API. As of December 2015 they provide more thorough documentation and in general seem to be a more popular option among developers than most of the companies mentioned in other answers.

See https://stripe.com/docs/connect for more info.

Paypal has a fairly accessible API you can use within your program to accomplish some of this.

Pretty straightforward way of doing ACH transfers - https://www.dwolla.com/white-label

Depending on what you want to your application to do you'll need different functionality.

If you want to pay (credit) bank accounts. It's pretty straight forward. Here are the steps: 1. Create a member 2. Create a funding source 3. Create a transfer

If you want to debit and credit bank accounts it gets a little more complex. Here are the steps: 1. Create a member 2. Get a funding source authorization 3. Create a transfer

The only reason the authorization is a little harder is because you have to go through a 2 deposit method or a verification flow of some type. This gets a lot easier with Dwolla.js - https://www.dwolla.com/dwollajs-bank-verification

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top