Stripe Bacs Direct Debit UK

You should already have access to Fundraising tools, have the Stripe Gateway setup, know how to create a donation page, and be familiar with your Stripe account settings

What will I learn?

In this article you will learn how to use the Stripe gateway to enable BACS Direct Debits on your donation pages.

Video Walkthrough

 

https://www.youtube.com/watch?v=PibbwRWY9tM

You can use the Stripe gateway to enable your supporters to set up monthly BACS Direct Debits associated with UK banks using their account number and sort code. The payments are managed by Engaging Networks, so you can control the recurring donations from within the Lookup Supporters Recurring Donations gadget.

For details on other direct debit payment methods using the Stripe gateway (such as iDEAL and SEPA), please refer to this article.

Supporter journey and notifications when setting up a Direct Debit

The supporter will start on an Engaging Networks page

The supporter will land on an Engaging Networks page to begin with, to enter their personal details and payment information. Account number and sort code are not taken at this stage.

The supporter will be taken to a Stripe page

On submission of the page hosted by Engaging Networks, donors will be redirected to the Stripe Checkout page where they can enter their bank account details and billing address. This information cannot be retrieved from Engaging Networks and must be completed on the Stripe page.

Once completed, Stripe will show an additional confirmation page that will ask the donor to confirm their Direct Debit details, before they are redirected to the final thank you page in Engaging Networks.

Finally the supporter will be shown an Engaging Networks thanks page

The supporter will be taken to an Engaging Networks thank you page, and can also be sent a thank you email. 

Email confirmations

For the payment notifications (Advance Notice Letters – ANL) you have two options – either Stripe can handle this or Engaging Networks can (recommended) – see this page for more information

How it works

There are some unique characteristics to Stripe Bacs Direct Debit.

  1. Supporters will enter their account information in Stripe, not Engaging Networks

  2. When the page is submitted, Engaging Networks will create a mandate in Stripe. At this point, a £0 transaction is created in Engaging Networks which is “pending” until it becomes active (“success”). no transaction is submitted, and no charges are made at this point.

  3. On the start date and subsequent dates, Engaging Networks will ask Stripe to take a real payment and if a successful a “success” transaction is created with an amount. The start date that the supporter chooses is not the day that the first payment will be debited. It is usually around 4 days after that day.

  • Click here to read more about how Stripe manages BACS Direct Debit payments

  • Click here to find out how data is stored in Engaging Networks

Getting Started

1) You will need a validated Stripe account.

Follow the instructions here to add a Stripe gateway connection to your Engaging Networks account. If you are already using Stripe for card processing, you can use an existing connection.

You will also need to add a number of settings inside the gateway to get the Stripe Bacs integration working on your donation pages.

2) Enable Bacs Direct debit

Your Stripe account will need to have Bacs enabled. To do that:

a) In your Stripe dashboard, go to Settings > Payments > Payment methods.

b) Enable Bacs direct debit

3) Add webhooks and Stripe callback events

You will need to add webhooks to allow Engaging Networks and Stripe to communicate about payments. 

a) In Stripe, go to Developers > Webhooks or search for “webhooks”

b) Click “+ add endpoint

c) Type in the webhook URL (https://ca.engagingnetworks.app/page/stripe/webhook) and click “+ Select events

d) Add the following Stripe callback events (you can use top search tool to search for relevant event names)

“Charge.dispute.funds_withdrawn”

“Payment_intent.canceled”

“Payment_intent.succeeded”

“Payment_intent.payment_failed”

“Checkout.session.completed”

“Mandate.updated”

“payment_method.automatically_updated”

Set up a Stripe PDD donation page in Engaging Networks

Required fields:

Field

Field type

Description

Field

Field type

Description

Email Address

Text with Email Validator

Email address identifying the supporter record

Payment Type

Select or Radio

Must be submitted as bacs_debit

Donation Amount

Text, Radio with Input or Select with Input with Donation Amount validator

May be entered as a whole number or number with two decimal places. Eg. Twelve dollars may be entered as ’12’ or ‘12.00’. Should not include the currency symbol

Recurring Payment

Radio with Y and N values

Must equal Y to submit as recurring payment

Recurring Frequency

Hidden field with default value

Can be MONTHLY, QUARTERLY, SEMI_ANNUAL, or ANNUAL.

Only MONTHLY is supported. You can use a hidden field with a value of MONTHLY for this

After our May 2023 release, other periods will be supported when using Recurring Start Date in conjunction with Recurring Day

Recurring Day

Hidden field

The day of the month when the recurring payment is “pushed” by Engaging Networks to Stripe.

In reality, the payment will be debited around 4 days after (see diagram above).

Note that if using just the Recurring Day, then the first payment will occur in the next period (next month or next year from today’s date). e.g. submitting 20 would mean the first payment is pushed on the 20th of the next month, or year, depending on Frequency.

Recurring Start Date (optional but recommended)

Select with format of yyyy-mm-dd

Use code to populat e- see the “How to use Recurring Day and Start Date” section below for more

This field works in conjunction with Recurring Day. It denotes when the first payment will be pushed, and after that it will use the Recurring Day field to decide on the next push dates.

Therefore, if you want the payments to be on the 20th of each month from this month, you would have e.g. 2023-06-20 for this field and 20 for Recurring Day

You will probably need to use a Code Block to add possible Start Dates in this field – see the “How to use Recurring Day and Start Date” section below for more information

Payment Currency

Hidden field

Value of GBP

First Name

Text

The cardholder’s first name.

Last Name

Text

The cardholder’s last name.

Address 1

Text

The first address line of the cardholder

City

Text

The address city of the cardholder

Post Code

Text

The postcode of the
cardholder

After direct debit submission

When the mandate is initially submitted, you will see a transaction with status set to pending through the Supporter Lookup view.

After 3 days, this status will update to ‘Success’ once the mandate is cleared. 

At this point, the amount will reset to 0, and the Transaction ID will update to reflect the initial mandate.

Each payment processed as part of this mandate will then generate a transaction each month. You will also notice an UPDATE transaction in the Transaction History gadget.

Exporting Data

Take a look at this article for examples of the transactions you will see

The transaction types mentioned above with respective statuses will also be reflected in the exported file.

To export your Stripe Bacs transactions, please follow the instructions through finance reports.

For all Stripe Bacs transactions, select ‘Bank payments recurring transactions.’

Updating the Mandate

Once the mandate is submitted, its details can be edited inside the Engaging Networks dashboard. You will be able to:

  • Update the amount

  • Update day of charge

  • Update frequency

You can also set an end date for the Bacs mandate or skip a number of payments.

How to use Recurring Day and Start Date

These two fields determine when the first payment will be scheduled. You have always need a Recurring Day field on the page but, from our May 2023 release, you can also have a Recurring Start Date on the page too.

What do they do?

The Recurring Day and the Recurring Frequency fields set the schedule, with the first payment starting from the next frequency period. For example, if you set Recurring Day as 20 and Recurring Frequency as MONTHLY, it will make the first payment date as the 20th of next month.

Sometimes this behaviour may be undesirable, because if today is the start of the month, then it may be some weeks before the first payment is taken. To get around this, you can also use the Recurring Start Date field. This will set the first payment date, and from then on it will use the Recurring Day field to determine the subsequent payments.

In this set up, it is recommended that you use a Select for the Recurring Day with some default value. Then you can add a Code Block to the bottom of the page with code in that populates the start date with possible values.

This code can do this for you: https://github.com/EngagingNetworks/page-builder-code-blocks/blob/master/direct-debits-Stripe-start-date-population.html

To use the code:

  1. Ensure there is a Recurring Day and Recurring Start Date field on your page

  2. Make them both Mandatory

  3. Recurring Day should be a text input type, and Recurring Start Date a select input type. You’ll need to add a value to that, so add a date sometime in the future – e.g. label 1 January 2024, value 2024-01-01

  4. Add a Code Block to the bottom of your page

  5. Paste in the code from here

  6. Look at the first portion of the code where it says:

    var numberOfOptions = 3; // the number of choices in the select you want to give, each separated by a month, e.g. 2 var daysAhead = 15; // the number of days from today we can start a new DD from, e.g. 10 var forceDayOfMonth = 21; // set to 0 if you are happy with any day of the month, set to 1-28 if you want to force the start date(s) to be on a certain day of the month, e.g. 1
  7. Amend the numbers after the = signs to suit your set up.

    1. numberOfOptions sets how many possible values there are, separated by a month. Use 1 if you only want one option (suitable for annual payments)

    2. daysAhead sets how many days from today that the first possible payment can be

    3. forceDayOfMonth can be used if you want the payments to only be on a certain day of the month. Set this to 0 if you don’t need this functionality

  8. Test the code by previewing the page, and check that the Start Date is populating properly