Billing Request (Instant Bank Pay feature)

Using the JavaScript Drop-in

This guide shows how to use the Javascript Drop-in to allow customers to complete the Billing Request Flow without leaving the integrator’s site.

Use the Drop-in when you already have a frontend website, and want to benefit from having customers stay on your site, and avoiding site-to-site redirects.

Preview the React Drop-in

Installation

Create

React Drop-in Example

1import React, { useCallback, useState } from "react"; 2import { 3 useGoCardlessDropin, 4 GoCardlessDropinOptions, 5 GoCardlessDropinOnSuccess, 6} from "@gocardless/react-dropin"; 7 8// Display a button that opens the Dropin on click, starting a checkout 9// flow for the specified Billing Request Flow. 10const DropinButton = (options: GoCardlessDropinOptions) => { 11 const { open } = useGoCardlessDropin({ ...options }); 12 13 return ( 14 <button type="button" onClick={() => open()}> 15 Start Dropin for <code>{options.billingRequestFlowID}</code> in{" "} 16 <code>{options.environment}</code> 17 </button> 18 ); 19}; 20 21// Example checkout flow, where we create a Billing Request Flow ID by talking 22// with our backend API. 23const App: FunctionComponent = () => { 24 const [flowID, setFlowID] = useState<string | null>(null); 25 26 // Build your backend with an API endpoint that: 27 // 28 // 1. Creates a Billing Request for the resources you wish to create 29 // 2. Create a Billing Request Flow against (1) 30 // 3. Return the ID from (2) 31 // 32 // See an example of this at Taking an Instant Bank Payment: 33 // https://developer.gocardless.com/getting-started/billing-requests/taking-an-instant-bank-payment/ 34 React.useEffect(() => { 35 async function createFlow() { 36 // Expecting a JSON body like: 37 // { 38 // "flow_id": "BRF123456" 39 // } 40 let response = await fetch("/api/flows", { 41 method: "POST", 42 }); 43 const { flow_id } = await response.json(); 44 setFlowID(flow_id); 45 } 46 createFlow(); 47 }, []); 48 49 // Only show the button once we have a Billing Request Flow ID 50 return flowID === null ? ( 51 <div className="loader"></div> 52 ) : ( 53 <DropinButton billingRequestFlowID={flowID} environment={"live"} /> 54 ); 55};

What’s next?

First instant payment with mandate Direct Debit set up

Get started

Collect Verified Mandates

Collect Direct Debit Mandates

Billing Request overview

For partners

Go to Partner PortalTo learn more about technical and UX requirements