Account Funding Transactions (AFT)
AFT stands for “Account Funding Transaction”. It is a transaction used to move funds from a card account to another account for further usage.
In Shift4, AFT is based on the standard purchase setup, with the addition of several parameters required by the schemes.
The distinction between AFT and non-AFT transaction is done based on MCC code on Shift4 acquirer's side:
- 7802 – Government-licensed horse/dog racing
- 7995 – Betting, including lottery tickets, casino gambling chips, off-track betting, and wagers at race tracks
- 4829 – Money order / wire transfer
- 6050 – Quasi cash / customer financial institution
- 6051 – Non-financial institution such as cryptocurrency, foreign currency, money order (not wire transfers), stored value card/load, and travellers cheque
- 7801 – Government-licensed online casinos (online gambling)
The key change for this type of transaction is to provide the Recipient information as part of the request, because as per definition this defines the receiver of the funds on the given account.
Example of request when recipient information is different from customer (sender) information. In this case both parameter sets need to be provided
curl --request POST \ --url https://<YourShopName>.altapaysecure.com/merchant/API/createPaymentRequest \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Basic auth' \ --data 'shop_orderid=testOrderId' \ --data 'type=payment' \ --data 'currency=DKK' \ --data 'amount=100.00'\ --data 'terminal=Test Terminal'\ --data 'customer_info[billing_city]=Copenhagen' \ --data 'customer_info[billing_lastname]=Doe'\ --data 'customer_info[shipping_lastname]=Doe'\ --data 'customer_info[email]=example@example.com'\ --data 'customer_info[shipping_postal]=2860'\ --data 'customer_info[shipping_address]=Gyngemose Parkvej 50' \ --data 'customer_info[billing_address]=Vesterbrogade 65' \ --data 'customer_info[shipping_firstname]=John' \ --data 'customer_info[billing_firstname]=John' \ --data 'customer_info[customer_phone]=4560020030' \ --data 'customer_info[billing_postal]=2860' \ --data 'customer_info[billing_region]=REG' \ --data 'customer_info[shipping_country]=DK' \ --data 'customer_info[shipping_city]=Soeborg' \ --data 'customer_info[billing_country]=DK' \ --data 'recipient_info[birthdate]=1854-01-06' \ --data 'recipient_info[billing_lastname]=Holmes' \ --data 'recipient_info[billing_firstname]=Sherlock' \ --data 'recipient_info[billing_country]=GB' \ --data 'recipient_info[customer_phone]=+5555551234' \ --data 'recipient_info[username]=sholmes' \ --data 'recipient_info[billing_postal]=NW1' \ --data 'recipient_info[billing_address]=Baker Street 221B' \ --data 'recipient_info[billing_region]=LON' \ --data 'recipient_info[billing_city]=London' \ --data 'recipient_info[account_identifier]=myAccount' \ --data 'recipient_info[email]=test-recipient@example.com' \ ... other parameters
Example of request when recipient and customer (sender) information are the same. In such scenario there is no need to additionally send customer information.
More detailed explanation about the request parameters are defined in createPaymentRequest for Shift4.
curl --request POST \ --url https://<YourShopName>.altapaysecure.com/merchant/API/createPaymentRequest \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Basic auth' \ --data 'shop_orderid=testOrderId' \ --data 'type=payment' \ --data 'currency=DKK' \ --data 'amount=100.00'\ --data 'terminal=Test Terminal'\ --data 'recipient_info[birthdate]=1854-01-06' \ --data 'recipient_info[billing_lastname]=Holmes' \ --data 'recipient_info[billing_firstname]=Sherlock' \ --data 'recipient_info[billing_country]=GB' \ --data 'recipient_info[customer_phone]=+5555551234' \ --data 'recipient_info[username]=sholmes' \ --data 'recipient_info[billing_postal]=NW1' \ --data 'recipient_info[billing_address]=Baker Street 221B' \ --data 'recipient_info[billing_region]=LON' \ --data 'recipient_info[billing_city]=London' \ --data 'recipient_info[account_identifier]=myAccount' \ --data 'recipient_info[email]=test-recipient@example.com' \ ... other parameters