Back

How to build a public GoCardless integration: Building the Auth Flow

Sep 14, 20246 minute read

Hey there, fellow JavaScript aficionado! Ready to dive into the world of GoCardless integrations? Let's roll up our sleeves and build a rock-solid authorization flow that'll make your users feel safe and sound.

The Lowdown on GoCardless

GoCardless is a payments platform that's all about making recurring payments a breeze. Their API is pretty slick, but before we can tap into its power, we need to set up a secure way for our users to give us the green light to act on their behalf. That's where our auth flow comes in.

Before We Jump In

Make sure you've got:

  • A GoCardless account with API credentials
  • Node.js and Express.js ready to roll

Got those? Great! Let's get this party started.

Setting Up OAuth 2.0

First things first, we need to register our app with GoCardless. Head over to their developer portal and set up your app. You'll get a client ID and secret – guard these with your life!

Kicking Off the Auth Dance

Time to construct that authorization URL. It'll look something like this:

const authUrl = `https://connect.gocardless.com/oauth/authorize?client_id=${clientId}&redirect_uri=${redirectUri}&scope=read_write&response_type=code`;

Now, when your user is ready to connect their GoCardless account, just redirect them to this URL. They'll handle the heavy lifting of authenticating the user.

Catching the Callback

Set up an endpoint to handle the redirect URI. When GoCardless sends the user back to your app, they'll include an authorization code. Snag it like this:

app.get('/oauth/callback', (req, res) => { const authCode = req.query.code; // Now we're cooking with gas! });

Trading Code for Tokens

We've got the code, now let's swap it for an access token:

const response = await axios.post('https://connect.gocardless.com/oauth/access_token', { client_id: clientId, client_secret: clientSecret, code: authCode, grant_type: 'authorization_code', redirect_uri: redirectUri }); const { access_token, refresh_token } = response.data;

Store these tokens somewhere safe – they're your golden ticket to the GoCardless API!

Keeping It Fresh

Access tokens don't last forever. When they expire, use the refresh token to get a new one:

const refreshResponse = await axios.post('https://connect.gocardless.com/oauth/access_token', { grant_type: 'refresh_token', client_id: clientId, client_secret: clientSecret, refresh_token: storedRefreshToken }); const { access_token: newAccessToken } = refreshResponse.data;

Putting Your Token to Work

Now you're ready to make authenticated requests to GoCardless. Just include your access token in the Authorization header:

const result = await axios.get('https://api.gocardless.com/customers', { headers: { 'Authorization': `Bearer ${accessToken}`, 'GoCardless-Version': '2015-07-06' } });

When Things Go Sideways

Always be prepared for things to go wrong. Handle authorization failures gracefully and give your users a way to cancel or retry the process.

Locking It Down

Remember, with great power comes great responsibility. Keep your client secrets secret, implement PKCE for extra security, and always use HTTPS.

Taking It for a Spin

Before you go live, test everything in GoCardless's sandbox environment. Try out different scenarios to make sure your flow can handle whatever users throw at it.

You Did It!

And there you have it – a solid foundation for your GoCardless integration. You've got the auth flow down pat, which means you're well on your way to building something awesome. Keep exploring the GoCardless API, and don't be afraid to get creative with how you use it in your app.

Remember, the best integrations are the ones that feel seamless to the user. So go forth and integrate, my friend – your users will thank you for it!