- Home
- All APIs
- WPG guide
- Order notifications
- Fast Access
Fast Access
Use Fast Access to quickly disburse funds to a shopper, meaning they'll receive the funds within 30 minutes.
Fast Access is currently available for Visa payouts from Visa Direct, and Mastercard payments from Mastercard Send. The process is very similar for both Visa and Mastercard, but there are some differences.
How it works
Prerequisite:
- A
Direct integration - A Fast Access-specific Merchant Code set up
- Submit a
Card checking request to see whether the shopper's issuing bank can process Fast Access. This is for Visa Direct only. If you use Mastercard Send, go direct to step 2. - Submit a
Fast Access Disbursement request , there is one type for Visa Direct, another type for Mastercard Send:- If the shopper's bank supports Fast Access, and the scheme approves the request, the shopper receives the funds within 30 minutes.
- If the shopper's bank doesn't support Fast Access, and the scheme approves the request, the shopper will receive the funds in the standard payout time scales (usually 1-3 business days).
- We'll send the request to the scheme.
- We'll return the outcome to you
Note: If there is no conclusive response from the scheme we return a pending outcome. We continue to query the scheme and update the payment status when we get a conclusive response. You need to set up
Order Notifications so you are aware of payment status updates for pending payments.
The payment flow
We have introduced new payment statuses for Fast Access:
Status | Meaning |
---|---|
PUSH_REQUESTED | We've received the Fast Access disbursement request. |
PUSH_PENDING | We've sent the Fast Access disbursement request to Visa Direct/Mastercard Send, and we're waiting for a response. PUSH_PENDING transactions usually update to PUSH_APPROVED or PUSH_REFUSED within 45 minutes for Visa Direct, and within 10 minutes for Mastercard Send. If no definitive resolution is received within 48 hours then transactions move to an error state. Note: Never re-submit transactions with a PUSH_PENDING status as this may cause a duplicate payment that cannot be cancelled or reversed. Once sent to Visa, the push cannot be cancelled. Mastercard have a way to reverse duplicate transactions, but it's much easier to avoid duplicate transactions in the first place. |
PUSH_APPROVED | Visa Direct or Mastercard Send have approved the Fast Access disbursement request. Your shopper will receive funds within 30 minutes if their issuer is Fast Access enabled, or within standard timescales if not. |
PUSH_SETTLED | The transaction has been reconciled with Visa or Mastercard's daily reporting. |
PUSH_REFUSED | The Fast Access disbursement request was refused. Some of the reasons could be:
|
ERROR | Some of the possible errors could occur because:
|
Note: If a response is not received from Visa Direct within 2 minutes the transaction status changes to PUSH_PENDING. The same thing happens to Mastercard Send transactions, but the time taken is 30 seconds. We will contact Visa Direct and Mastercard Send for 48 hours to try to obtain a conclusive response.
Card check
Note: At present, Card check is not available for Mastercard Send.
To check if a shopper's bank can accept Fast Access, send the following inquiry to us. For information about the parameters, see
Note: You can include a PAN,
Inquiry with PAN - Visa Direct only
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<inquiry>
<cardCheckInquiry>
<paymentDetails>
<FF_DISBURSE-SSL>
<recipient>
<paymentInstrument>
<cardDetails>
<cardNumber>4444333322221111</cardNumber>
<expiryDate>
<date month="06" year="2019"/>
</expiryDate>
<cardHolderName>Mr C Holder</cardHolderName>
</cardDetails>
</paymentInstrument>
</recipient>
</FF_DISBURSE-SSL>
</paymentDetails>
</cardCheckInquiry>
</inquiry>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <inquiry> <cardCheckInquiry> <paymentDetails> <FF_DISBURSE-SSL> <recipient> <paymentInstrument> <cardDetails> <cardNumber>4444333322221111</cardNumber> <expiryDate> <date month="06" year="2019"/> </expiryDate> <cardHolderName>Mr C Holder</cardHolderName> </cardDetails> </paymentInstrument> </recipient> </FF_DISBURSE-SSL> </paymentDetails> </cardCheckInquiry> </inquiry> </paymentService>
Inquiry with token - Visa Direct only
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<inquiry>
<cardCheckInquiry>
<paymentDetails>
<FF_DISBURSE-SSL>
<recipient tokenScope= "shopper">
<!-- <tokenScope> is optional. Possible values "shopper" and "merchant". If not supplied, default is "shopper". -->
<paymentTokenID>9919101952268163869</paymentTokenID>
<authenticatedShopperID>VDFFTEST3</authenticatedShopperID>
<!-- do not include <authenticatedShopperID> element for merchant token -->
</recipient>
</FF_DISBURSE-SSL>
</paymentDetails>
</cardCheckInquiry>
</inquiry>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <inquiry> <cardCheckInquiry> <paymentDetails> <FF_DISBURSE-SSL> <recipient tokenScope= "shopper"> <!-- <tokenScope> is optional. Possible values "shopper" and "merchant". If not supplied, default is "shopper". --> <paymentTokenID>9919101952268163869</paymentTokenID> <authenticatedShopperID>VDFFTEST3</authenticatedShopperID> <!-- do not include <authenticatedShopperID> element for merchant token --> </recipient> </FF_DISBURSE-SSL> </paymentDetails> </cardCheckInquiry> </inquiry> </paymentService>
The response is the same whether it comes from a PAN or shopper token inquiry:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<reply>
<checkCardResponse>
<cardType>C</cardType>
<issuerCountryCode>GB</issuerCountryCode>
<billingCurrencyCode>GBP</billingCurrencyCode>
<disbursementBlocked>false</disbursementBlocked>
<gamblingDisbursementBlocked>false</gamblingDisbursementBlocked>
<schemeSupportedByFfs>true</schemeSupportedByFfs>
<fastFunds>true</fastFunds> <!--If 'false', then it falls back to a standard payout-->
</checkCardResponse>
</reply>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <reply> <checkCardResponse> <cardType>C</cardType> <issuerCountryCode>GB</issuerCountryCode> <billingCurrencyCode>GBP</billingCurrencyCode> <disbursementBlocked>false</disbursementBlocked> <gamblingDisbursementBlocked>false</gamblingDisbursementBlocked> <schemeSupportedByFfs>true</schemeSupportedByFfs> <fastFunds>true</fastFunds> <!--If 'false', then it falls back to a standard payout--> </checkCardResponse> </reply> </paymentService>
Note: If <fastFunds>
is false, this means the shopper's bank cannot accept Fast Access and they will receive the funds within the normal payout time frame.
Disbursement
To payout to a shopper's card, submit the below request:
If the shopper's issuing bank supports Fast Access, and the request is approved, they'll be paid within 30 minutes
If the issuing bank does not support Fast Access, the payout will be paid in the standard time frame. For information about the parameters, see
Reference .Note: Visa Direct only - You can include a
shopper token or amerchant token instead of the PAN in your disbursement request.
Request with PAN - Visa Direct
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<submit>
<order orderCode="YOUR_ORDER_CODE">
<description>test order</description>
<amount value="100" currencyCode="GBP" exponent="2"/>
<orderContent>
<![CDATA[]]>
</orderContent>
<paymentDetails>
<FF_DISBURSE-SSL>
<recipient>
<paymentInstrument>
<cardDetails>
<cardNumber>4444333322221111</cardNumber>
<expiryDate>
<date month="06" year="2019"/>
</expiryDate>
<cardHolderName>Mr C Holder</cardHolderName>
</cardDetails>
</paymentInstrument>
</recipient>
</FF_DISBURSE-SSL>
<session shopperIPAddress="127.0.0.1" id="ssn15466416"/>
</paymentDetails>
</order>
</submit>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <submit> <order orderCode="YOUR_ORDER_CODE"> <description>test order</description> <amount value="100" currencyCode="GBP" exponent="2"/> <orderContent> <![CDATA[]]> </orderContent> <paymentDetails> <FF_DISBURSE-SSL> <recipient> <paymentInstrument> <cardDetails> <cardNumber>4444333322221111</cardNumber> <expiryDate> <date month="06" year="2019"/> </expiryDate> <cardHolderName>Mr C Holder</cardHolderName> </cardDetails> </paymentInstrument> </recipient> </FF_DISBURSE-SSL> <session shopperIPAddress="127.0.0.1" id="ssn15466416"/> </paymentDetails> </order> </submit> </paymentService>
Request with PAN - Mastercard Send
This request is identical to the one for Visa Direct above, except for an additional mandatory field called <cardAddress>
and its associated subfields.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<submit>
<order orderCode="YOUR_ORDER_CODE">
<description>test order</description>
<amount value="100" currencyCode="GBP" exponent="2"/>
<orderContent>
<![CDATA[]]>
</orderContent>
<paymentDetails>
<FF_DISBURSE-SSL>
<recipient>
<paymentInstrument>
<cardDetails>
<cardNumber>5100080000000000</cardNumber>
<expiryDate>
<date month="06" year="2021"/>
</expiryDate>
<cardHolderName>Mr J Smith</cardHolderName>
<cardAddress>
<address>
<firstName>Joe</firstName>
<lastName>Smith</lastName>
<address1>34 Cambridge Chase</address1>
<address2/>
<postalCode>CB2 3NE</postalCode>
<city>Cambridge</city>
<state>Cambridgeshire</state>
<countryCode>GB</countryCode>
</address>
</cardAddress>
</cardDetails>
</paymentInstrument>
</recipient>
</FF_DISBURSE-SSL>
<session shopperIPAddress="127.0.0.1" id="ssn383716214"/>
</paymentDetails>
<shopper>
<shopperEmailAddress>js@email-address.com</shopperEmailAddress>
<browser>
<acceptHeader>text/html</acceptHeader>
<userAgentHeader>Mozilla/5.0 ...</userAgentHeader>
</browser>
</shopper>
</order>
</submit>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <submit> <order orderCode="YOUR_ORDER_CODE"> <description>test order</description> <amount value="100" currencyCode="GBP" exponent="2"/> <orderContent> <![CDATA[]]> </orderContent> <paymentDetails> <FF_DISBURSE-SSL> <recipient> <paymentInstrument> <cardDetails> <cardNumber>5100080000000000</cardNumber> <expiryDate> <date month="06" year="2021"/> </expiryDate> <cardHolderName>Mr J Smith</cardHolderName> <cardAddress> <address> <firstName>Joe</firstName> <lastName>Smith</lastName> <address1>34 Cambridge Chase</address1> <address2/> <postalCode>CB2 3NE</postalCode> <city>Cambridge</city> <state>Cambridgeshire</state> <countryCode>GB</countryCode> </address> </cardAddress> </cardDetails> </paymentInstrument> </recipient> </FF_DISBURSE-SSL> <session shopperIPAddress="127.0.0.1" id="ssn383716214"/> </paymentDetails> <shopper> <shopperEmailAddress>js@email-address.com</shopperEmailAddress> <browser> <acceptHeader>text/html</acceptHeader> <userAgentHeader>Mozilla/5.0 ...</userAgentHeader> </browser> </shopper> </order> </submit> </paymentService>
Data validation - Mastercard Send
Scenario | Behaviour |
---|---|
Merchant address1 contains only a numeric value e.g. "1" | WPG response is "merchant.address.address1 field must not contain only digits." |
Recipient address contains only a numeric value e.g. "1" Note: To produce the recipient address, WPG concatenates address1, address2, and address3. We use the recipient address to perform validation. | WPG response is "recipient.address.address1 field must not contain only digits." |
Sender address contains only a numeric value e.g. "1" Note: To produce the sender address, WPG concatenates address1, address2, and address3. Use this sender address to perform validation. | WPG response is "sender.address.address1 field must not contain only digits." |
Request with token - Visa Direct only
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<submit>
<order orderCode="YOUR_ORDER_CODE">
<description>test order</description>
<amount value="100" currencyCode="GBP" exponent="2"/>
<orderContent>
<![CDATA[]]>
</orderContent>
<paymentDetails>
<FF_DISBURSE-SSL>
<recipient>
<recipient tokenScope= "shopper">
<!-- <tokenScope> is optional. Possible values "shopper" and "merchant". If not supplied, default is "shopper". -->
<paymentTokenID>9919101952268163869</paymentTokenID>
<authenticatedShopperID>VDFFTEST3</authenticatedShopperID>
<!-- do not include <authenticatedShopperID> element for merchant token -->
</recipient>
</FF_DISBURSE-SSL>
<session shopperIPAddress="127.0.0.1" id="ssn15466416"/>
</paymentDetails>
</order>
</submit>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <submit> <order orderCode="YOUR_ORDER_CODE"> <description>test order</description> <amount value="100" currencyCode="GBP" exponent="2"/> <orderContent> <![CDATA[]]> </orderContent> <paymentDetails> <FF_DISBURSE-SSL> <recipient> <recipient tokenScope= "shopper"> <!-- <tokenScope> is optional. Possible values "shopper" and "merchant". If not supplied, default is "shopper". --> <paymentTokenID>9919101952268163869</paymentTokenID> <authenticatedShopperID>VDFFTEST3</authenticatedShopperID> <!-- do not include <authenticatedShopperID> element for merchant token --> </recipient> </FF_DISBURSE-SSL> <session shopperIPAddress="127.0.0.1" id="ssn15466416"/> </paymentDetails> </order> </submit> </paymentService>
Visa Direct Merchants and shoppers based in Canada only
If you are a merchant based in Canada, or one of your cardholders uses a card issued in Canada, then you must include an address
set of fields with the disbursement request.
Merchants outside Canada making disbursements to cards issued outside Canada can include address information, but there is no requirement to do so. See the table:
Merchant domicile | Card issuer country | Address data |
---|---|---|
Canada | Canada | Mandatory |
Canada | Rest of the world | Mandatory |
Rest of the world | Canada | Mandatory |
Rest of the world | Rest of the world | Optional |
An example of this code with an address
set of fields is in the Request - Visa Direct Canada only drop-down below.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<submit>
<order orderCode="YOUR_ORDER_CODE">
<description>test order</description>
<amount value="100" currencyCode="GBP" exponent="2"/>
<orderContent>
<![CDATA[]]>
</orderContent>
<paymentDetails>
<FF_DISBURSE-SSL>
<recipient>
<paymentInstrument>
<cardDetails>
<cardNumber>4444333322221111</cardNumber>
<expiryDate>
<date month="06" year="2029"/>
</expiryDate>
<cardHolderName>John Doe</cardHolderName>
<cardAddress>
<address>
<firstName>John</firstName>
<lastName>Doe</lastName>
<address1>The Building</address1>
<address2>270-289 The Science Park</address2>
<address3>Milton Road</address>
<postalCode>CB4 0WE</postalCode>
<city>Cambridge</city>
<countryCode>GB</countryCode>
</address>
<cardAddress>
</cardDetails>
</paymentInstrument>
</recipient>
</FF_DISBURSE-SSL>
<session shopperIPAddress="127.0.0.1" id="ssn81219897"/>
</paymentDetails>
<shopper>
<shopperEmailAddress>sp@worldpay.com</shopperEmailAddress>
<browser>
<acceptHeader>text/html</acceptHeader>
<userAgentHeader>Mozilla/5.0 ...</userAgentHeader>
</browser>
</shopper>
</order>
</submit>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <submit> <order orderCode="YOUR_ORDER_CODE"> <description>test order</description> <amount value="100" currencyCode="GBP" exponent="2"/> <orderContent> <![CDATA[]]> </orderContent> <paymentDetails> <FF_DISBURSE-SSL> <recipient> <paymentInstrument> <cardDetails> <cardNumber>4444333322221111</cardNumber> <expiryDate> <date month="06" year="2029"/> </expiryDate> <cardHolderName>John Doe</cardHolderName> <cardAddress> <address> <firstName>John</firstName> <lastName>Doe</lastName> <address1>The Building</address1> <address2>270-289 The Science Park</address2> <address3>Milton Road</address> <postalCode>CB4 0WE</postalCode> <city>Cambridge</city> <countryCode>GB</countryCode> </address> <cardAddress> </cardDetails> </paymentInstrument> </recipient> </FF_DISBURSE-SSL> <session shopperIPAddress="127.0.0.1" id="ssn81219897"/> </paymentDetails> <shopper> <shopperEmailAddress>sp@worldpay.com</shopperEmailAddress> <browser> <acceptHeader>text/html</acceptHeader> <userAgentHeader>Mozilla/5.0 ...</userAgentHeader> </browser> </shopper> </order> </submit> </paymentService>
The response is the same whether it comes from a PAN or shopper token disbursement request:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<reply>
<orderStatus orderCode="YOUR_ORDER_CODE">
<payment>
<paymentMethod>VDFF_DISBURSE-SSL</paymentMethod>
<amount value="100" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/>
<lastEvent>PUSH_APPROVED</lastEvent>
<balance accountType="IN_PROCESS_PUSH_APPROVED">
<amount value="100" currencyCode="GBP" exponent="2" debitCreditIndicator="debit"/>
</balance>
<schemeResponse>
<schemeName>Visa Direct</schemeName>
<actionCode>00</actionCode>
<responseCode>5</responseCode>
<transactionIdentifier>1519377960354</transactionIdentifier>
</schemeResponse>
<dateTime>
<date year="2018" month="2" dayOfMonth="23" hour="10" minute="56" second="10"/>
</dateTime>
<fastFunds>true</fastFunds>
</payment>
</orderStatus>
</reply>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <reply> <orderStatus orderCode="YOUR_ORDER_CODE"> <payment> <paymentMethod>VDFF_DISBURSE-SSL</paymentMethod> <amount value="100" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/> <lastEvent>PUSH_APPROVED</lastEvent> <balance accountType="IN_PROCESS_PUSH_APPROVED"> <amount value="100" currencyCode="GBP" exponent="2" debitCreditIndicator="debit"/> </balance> <schemeResponse> <schemeName>Visa Direct</schemeName> <actionCode>00</actionCode> <responseCode>5</responseCode> <transactionIdentifier>1519377960354</transactionIdentifier> </schemeResponse> <dateTime> <date year="2018" month="2" dayOfMonth="23" hour="10" minute="56" second="10"/> </dateTime> <fastFunds>true</fastFunds> </payment> </orderStatus> </reply> </paymentService>
The response comes from a PAN:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<reply>
<orderStatus orderCode="YOUR_ORDER_CODE">
<payment>
<paymentMethod>MCS_DISBURSE-SSL</paymentMethod>
<amount value="100" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/>
<lastEvent>PUSH_APPROVED</lastEvent>
<balance accountType="IN_PROCESS_PUSH_APPROVED">
<amount value="100" currencyCode="GBP" exponent="2" debitCreditIndicator="debit"/>
</balance>
<schemeResponse>
<schemeName>Mastercard Send</schemeName>
<actionCode>00</actionCode>
<responseCode>5</responseCode>
<transactionIdentifier>1519377960354</transactionIdentifier>
</schemeResponse>
<dateTime>
<date year="2018" month="2" dayOfMonth="23" hour="10" minute="56" second="10"/>
</dateTime>
<fastFunds>true</fastFunds>
</payment>
</orderStatus>
</reply>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <reply> <orderStatus orderCode="YOUR_ORDER_CODE"> <payment> <paymentMethod>MCS_DISBURSE-SSL</paymentMethod> <amount value="100" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/> <lastEvent>PUSH_APPROVED</lastEvent> <balance accountType="IN_PROCESS_PUSH_APPROVED"> <amount value="100" currencyCode="GBP" exponent="2" debitCreditIndicator="debit"/> </balance> <schemeResponse> <schemeName>Mastercard Send</schemeName> <actionCode>00</actionCode> <responseCode>5</responseCode> <transactionIdentifier>1519377960354</transactionIdentifier> </schemeResponse> <dateTime> <date year="2018" month="2" dayOfMonth="23" hour="10" minute="56" second="10"/> </dateTime> <fastFunds>true</fastFunds> </payment> </orderStatus> </reply> </paymentService>
Note: For Mastercard the <responseCode> is always 5 for 'happy' flows and null for error flows.
Fast Access Payouts to mobile wallets - Visa Direct only
Prerequisite: You're able to access the Device Payment Account Number (DPAN) for Apple Pay, Samsung Pay and Google Pay.
You can make Fast Access Visa Direct payout transactions to cards stored in the Apple Pay, Samsung Pay and Google Pay mobile wallet. To do this, you need to access the Device Payment Account Number (DPAN) by decrypting the payload that comes from Apple, Samsung or Google.
Payouts to a mobile wallet work in exactly the same way as a standard Fast Access payout, with the exception that you need to provide the DPAN within the <cardNumber>
parameter in your request. For more information, see
Order Notifications
To correctly handle scenarios for timeouts and PUSH_PENDING statuses that are later updated you must use
Notification example:
Here's an example of a PUSH_APPROVED notification containing the <schemeResponse>
data from Visa. If we receive it for the event, we'll add it to the notification:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<notify>
<orderStatusEvent orderCode="YOUR_ORDER_CODE">
<payment>
<paymentMethod>VDFF_DISBURSE-SSL</paymentMethod>
<amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/>
<lastEvent>PUSH_APPROVED</lastEvent>
<balance accountType="IN_PROCESS_PUSH_APPROVED">
<amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/>
</balance>
<schemeResponse> <!--Added if received-->
<schemeName>VisaDirect</schemeName>
<actionCode>00</actionCode>
<responseCode>5</responseCode>
<transactionIdentifier>1538047214954</transactionIdentifier>
</schemeResponse>
<dateTime>
<date year="2018" month="6" dayOfMonth="20" hour="15" minute="27" second="34"/>
</dateTime>
<fastFunds>true</fastFunds>
</payment>
<journal journalType="PUSH_APPROVED">
<bookingDate>
<date dayOfMonth="20" month="06" year="2018"/>
</bookingDate>
<accountTx accountType="IN_PROCESS_PUSH_APPROVED" batchId="10">
<amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="debit"/>
</accountTx>
</journal>
</orderStatusEvent>
</notify>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <notify> <orderStatusEvent orderCode="YOUR_ORDER_CODE"> <payment> <paymentMethod>VDFF_DISBURSE-SSL</paymentMethod> <amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/> <lastEvent>PUSH_APPROVED</lastEvent> <balance accountType="IN_PROCESS_PUSH_APPROVED"> <amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/> </balance> <schemeResponse> <!--Added if received--> <schemeName>VisaDirect</schemeName> <actionCode>00</actionCode> <responseCode>5</responseCode> <transactionIdentifier>1538047214954</transactionIdentifier> </schemeResponse> <dateTime> <date year="2018" month="6" dayOfMonth="20" hour="15" minute="27" second="34"/> </dateTime> <fastFunds>true</fastFunds> </payment> <journal journalType="PUSH_APPROVED"> <bookingDate> <date dayOfMonth="20" month="06" year="2018"/> </bookingDate> <accountTx accountType="IN_PROCESS_PUSH_APPROVED" batchId="10"> <amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="debit"/> </accountTx> </journal> </orderStatusEvent> </notify> </paymentService>
Here is an example of a PUSH_APPROVED notification from Mastercard Send:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE">
<notify>
<orderStatusEvent orderCode="YOUR_ORDER_CODE">
<payment>
<paymentMethod>MCS_DISBURSE-SSL</paymentMethod>
<amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/>
<lastEvent>PUSH_APPROVED</lastEvent>
<balance accountType="IN_PROCESS_PUSH_APPROVED">
<amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/>
</balance>
<schemeResponse> <!--Added if received-->
<schemeName>MastercardSend</schemeName>
<actionCode>00</actionCode>
<responseCode>5</responseCode>
<transactionIdentifier>1538047214954</transactionIdentifier>
</schemeResponse>
<dateTime>
<date year="2018" month="6" dayOfMonth="20" hour="15" minute="27" second="34"/>
</dateTime>
<fastFunds>true</fastFunds>
</payment>
<journal journalType="PUSH_APPROVED">
<bookingDate>
<date dayOfMonth="20" month="06" year="2018"/>
</bookingDate>
<accountTx accountType="IN_PROCESS_PUSH_APPROVED" batchId="10">
<amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="debit"/>
</accountTx>
</journal>
</orderStatusEvent>
</notify>
</paymentService>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN" "http://dtd.worldpay.com/paymentService_v1.dtd"> <paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <notify> <orderStatusEvent orderCode="YOUR_ORDER_CODE"> <payment> <paymentMethod>MCS_DISBURSE-SSL</paymentMethod> <amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/> <lastEvent>PUSH_APPROVED</lastEvent> <balance accountType="IN_PROCESS_PUSH_APPROVED"> <amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="credit"/> </balance> <schemeResponse> <!--Added if received--> <schemeName>MastercardSend</schemeName> <actionCode>00</actionCode> <responseCode>5</responseCode> <transactionIdentifier>1538047214954</transactionIdentifier> </schemeResponse> <dateTime> <date year="2018" month="6" dayOfMonth="20" hour="15" minute="27" second="34"/> </dateTime> <fastFunds>true</fastFunds> </payment> <journal journalType="PUSH_APPROVED"> <bookingDate> <date dayOfMonth="20" month="06" year="2018"/> </bookingDate> <accountTx accountType="IN_PROCESS_PUSH_APPROVED" batchId="10"> <amount value="1000" currencyCode="GBP" exponent="2" debitCreditIndicator="debit"/> </accountTx> </journal> </orderStatusEvent> </notify> </paymentService>
Test values
To test your Fast Access integration use these magic card values and cardholder names. For example, use REFUSED62 as the cardHolderName
to simulate a shopper trying to use a restricted card.
Disbursement card magic values - Visa Direct
Card Number | cardType | billingCurrencyCode | issuerCountryCode | fastFunds | disbursementBlocked | gamblingDisbursementBlocked | schemeSupportedByFfs |
---|---|---|---|---|---|---|---|
4444333322221111 | C | GBP | GB | True | False | False | True |
4917300800000000 | C | GBP | GB | False | False | False | True |
4911830000000 | C | EUR | NL | True | False | False | True |
4462030000000000 | C | EUR | NL | False | False | False | True |
4917610000000000 | C | AUD | AU | True | False | False | True |
4484070000000000 | C | AUD | AU | False | False | False | True |
4835140000000031 | D | EUR | GB | True | False | False | True |
4815100000000013 | D | GBP | GB | True | False | False | True |
4815100000000005 | D | RON | GB | True | False | False | True |
4815100000000021 | D | BGN | GB | True | False | False | True |
4815100000000039 | D | CAD | GB | True | False | False | True |
815100000000047 | D | NZD | GB | True | False | False | True |
4815100000000054 | D | USD | GB | True | False | False | True |
4815100000000062 | D | DKK | GB | True | False | False | True |
4815100000000070 | D | HUF | GB | True | False | False | True |
4815100000000088 | D | SEK | GB | True | False | False | True |
4815100000000237 | D | RON | GB | True | False | True | True |
4855100000000030 | D | EUR | DE | True | False | False | True |
4815100000000096 | D | RON | RO | True | False | False | True |
4815100000000104 | D | BGN | BG | True | False | False | True |
4815100000000146 | D | DKK | DK | True | False | False | True |
4815100000000153 | D | HUF | HU | True | False | False | True |
4815100000000161 | D | SEK | SE | True | False | False | True |
4815100000000302 | D | EUR | DE | True | False | False | True |
4815100000000278 | D | CAD | DE | True | False | False | True |
4815100000000286 | D | NZD | DE | True | False | False | True |
4815100000000294 | D | USD | DE | True | False | False | True |
4815100000000195 | D | GBP | DE | True | False | False | True |
4815100000000245 | D | RON | RO | True | False | True | True |
4917610000000000 | C | AUD | AU | True | False | False | True |
4815100000000211 | D | GBP | AU | True | False | False | True |
4815100000000229 | D | EUR | AU | True | False | False | True |
4815100000000260 | D | EUR | AU | True | False | True | True |
Any other | C | GBP | GB | False | True | True | True |
Disbursement cardHolderName magic values - Visa Direct
Note: To simulate different statuses with tokenisation, create a<cardHolderName>
.
cardHolderName | Payment status | actionCode | responseCode |
---|---|---|---|
APPROVED | PUSH_APPROVED | 00 | 5 |
REFUSED | PUSH_REFUSED | 01 | 5 |
REFUSED14 | PUSH_REFUSED | 14 | 5 |
REFUSED54 | PUSH_REFUSED | 54 | 5 |
REFUSED57 | PUSH_REFUSED | 57 | 5 |
REFUSED61 | PUSH_REFUSED | 61 | 5 |
REFUSED62 | PUSH_REFUSED | 62 | 5 |
PENDINGAPPROVED | PUSH_PENDING, then PUSH_APPROVED | ||
PENDINGREFUSED | PUSH_PENDING, then PUSH_REFUSED | ||
ERROR | ERROR | ||
Any other | ERROR |
Magic card values - error simulation - Visa Direct
Card number | Error message |
---|---|
4895070000006687 | Invalid billing card currency code received from Visa. |
4895070000007685 | Invalid issuer country code received from Visa. |
Magic card values - Fast Funds Enabled - Mastercard Send
Card number | Card Type | Billing currency code | Issuer country code | Fast funds availability |
---|---|---|---|---|
5551593000060000 | MCC | GBP | GB | True |
5551593000060026 | MCC | GBP | GB | False |
Any other | MCC | GBP | GB | False |
Magic card values - Cardholder name for the payment status - Mastercard Send
Cardholder name | HTTP status | Action code | Response code | Reason | Scheme response | Payment status |
---|---|---|---|---|---|---|
APPROVED | 200 OK | 00 | 5 | Approved or completed successfully | APPROVED | PUSH_APPROVED |
REFUSED | 200 OK | 05 | 5 | Do not honor | DECLINED | PUSH_REFUSED |
ERROR06 | 200 OK | 06 | 5 | System error | ERROR | ERROR |
APPROVED07 | 200 OK | 07 | 5 | PENDING | PENDING | PUSH_PENDING then PUSH_APPROVED |
APPROVED08 | 200 OK | 08 | 5 | Honor with ID | APPROVED | PUSH_APPROVED |
APPROVED10 | 200 OK | 10 | 5 | Partial approval | APPROVED | PUSH_APPROVED |
REFUSED54 | 200 OK | 54 | 5 | Expired card | DECLINED | PUSH_REFUSED |
PENDINGAPPROVED | 504 GATEWAY_TIMEOUT | PENDING | PUSH_PENDING then PUSH_APPROVED | |||
PENDINGREFUSED | 504 GATEWAY_TIMEOUT | PENDING | PUSH_PENDING then PUSH_REFUSED | |||
ERROR | 403 FORBIDDEN | ERROR | ERROR | |||
Any other | 200 OK | 00 | 5 | Approved and completed successfully | APPROVED | PUSH_APPROVED |
Disbursement request failure
If you submit a disbursement request and do not get a response, or receive a response other than PUSH_APPROVED or PUSH_REFUSED, then you must not re-submit the request as this could result in a duplicate payout which cannot be cancelled.
Instead you should wait until you receive an Order notification that the status has been updated. This usually arrives within 45 minutes and will be PUSH_APPROVED or PUSH_REFUSED, but it may take longer.
If you receive an ERROR response or notification you should contact Worldpay for this to be investigated.
XML Reference
It's worth familiarising yourself with the
Card check request - Visa Direct
Parameter | M/O/C | Description |
---|---|---|
<inquiry> <cardCheckInquiry> | Mandatory | Tells us you're checking a card to see if Fast Access transactions are supported. |
<FF_DISBURSE-SSL> | Mandatory | Tells us you're doing a Fast Access request. |
<recipient> | Conditional | Contains the <paymentInstrument> information, which includes the card details. SeeNote: Visa require the |
<paymentTokenID> | Conditional | The unique token identifier. Must be included when submitting a token disbursement request. |
<authenticatedShopperID> | Conditional | Contains the shopper's unique ID. Must be included when submitting a token disbursement request. |
Card check response - Visa Direct
Parameter | Description |
---|---|
<cardCheckResponse> | Parent element of <cardType> , <issuerCountryCode> , <billingCurrencyCode> , <disbursementBlocked> , <gamblingDisbursementBlocked> , <schemeSupportedByFfs> and <fastFunds> . |
<cardType> | The one character card type:
|
<issuerCountryCode> | Two character country code of the issuing bank. For example, GB. |
<billingCurrencyCode> | Three character currency code. For example, GBP. |
<disbursementBlocked> | Whether the disbursement of funds is blocked. Either true or false. |
<gamblingDisbursementBlocked> | Whether the disbursement of gambling funds is blocked by the cardholder's issuing bank. Either true or false. |
<schemeSupportedByFfs> | Whether we support Fast Access for the scheme. Either true or false. |
<fastFunds> | Whether the request resulted in a Fast Access disbursement. Either true or false. If false, then the shopper will not receive their funds within 30 minutes. |
Disbursement request
Visa Direct
Parameter | M/O/C | Description |
---|---|---|
<FF_DISBURSE-SSL> | Mandatory | Tells us you're doing a Fast Access request. |
<recipient> | Conditional | Contains the <paymentInstrument> information, which includes the card details. SeeNote: Visa require the |
<paymentTokenID> | Conditional | The unique token identifier. Must be included when submitting a token disbursement request. |
<authenticatedShopperID> | Conditional | Contains the shopper's unique ID. Must be included when submitting a token disbursement request. |
Mastercard Send
This response is for Mastercard Send. There is an extra mandatory <cardAddress> field and its associated subfields.
Parameter | M/O/C | Description |
---|---|---|
<cardAddress> | Mandatory | Include the following subfields - <address> , <firstName> , <lastName> , <address1> , <address2> , <address3> , <postalCode> , <city> , and <countryCode> . |
<FF_DISBURSE-SSL> | Mandatory | Tells us you're doing a Fast Access request. |
<recipient> | Conditional | Contains the <paymentInstrument> information, which includes the card details. See |
Disbursement response
These responses are the same for Visa Direct and Mastercard Send.
Parameter | Description |
---|---|
<schemeResponse> | Parent element of <schemeName> , <actionCode> , <responsecode> and <transactionIdentifier> . |
<schemeName> | The name of the scheme we're communicating with. For example, Visa. |
<actionCode> | A two digit code from Visa that provides more information about the response. See |
<responseCode> | A one digit response code that shows the outcome of the original request. See |
<transactionIdentifier> | The identity of the transaction. This is created by Visa. |
<fastFunds> | Whether the shopper's card can support Fast Access. |
f## Troubleshooting
What to provide when contacting us
If you need to contact us for assistance, use the Transaction Identifier to isolate the payment. You can find this in the MAI, by looking at the Payment Details of the transaction:
Note: The above screenshot is for Visa Direct, but is the same for Mastercard Send, except for the brand-protocol field.
Card check request failure
If you submit a card check request and do not get a response, you can resubmit the request.