Use Stripe Connect to link 1 Stripe account per site


For accounting reasons you may want to redirect site payments in different Stripe accounts

For now you can do this by running your own small server and use our API (though an API key)


  1. Register a new Stripe webhook listening to payment_intent.succeeded event, pass you server URL in Endpoint URL (you could use napkin.io service for example)

  1. Use Stripe suggested code to implement your own server code:



// server.js
//
// Use this sample code to handle webhook events in your integration.
//
// 1) Paste this code into a new file (server.js)
//
// 2) Install dependencies
//   npm install stripe
//   npm install express
//
// 3) Run the server on http://localhost:4242
//   node server.js

// The library needs to be configured with your account's secret key.
// Ensure the key is kept out of any version control system you might be using.
const stripe = require('stripe')('sk_test_...');
const express = require('express');
const stripe = require('stripe')(process.env.STRIPE_API_SECRET);
const app = express();

// This is your Stripe CLI webhook secret for testing your endpoint locally.
const endpointSecret = "whsec_56a0803c192ac48bfa740faf52f373912217e7cc32aa0a81b2e27a834a6f11ed";

app.post('/webhook', express.raw({type: 'application/json'}), (request, response) => {
  const sig = request.headers['stripe-signature'];

  let event;

  try {
    event = stripe.webhooks.constructEvent(request.body, sig, endpointSecret);
  } catch (err) {
    response.status(400).send(`Webhook Error: ${err.message}`);
    return;
  }

  // Handle the event
  switch (event.type) {
    case 'payment_intent.succeeded':
      const pi = event.data.object; // schema: https://docs.stripe.com/api/payment_intents/object
      // pi.description is formatted like this `Invoice {sid}`
      const invoiceSid = pi.description.split(' ')[1];
      // use a Storeganise API key https://help.storeganise.com/article/33-developer-settings#api-keys to load the invoice
      try {
        const invoice = await fetch(`https://yourbiz.storeganise.com/api/v1/admin/invoices/${invoiceSid}`).then(r => r.json());
        const site = await fetch(`https://yourbiz.storeganise.com/api/v1/admin/sites/${invoice.siteId}?include=customFields`).then(r => r.json());

        // call https://docs.stripe.com/api/transfers/create API
        const transfer = await stripe.transfers.create({
          amount: pi.amount_received,
          currency: 'usd', // adjust to your Stripe currency
          destination: site.customFields.stripeConnectAccountId,
        });
      } catch (e) {
        return response.status(400).send(e.message);
      }    

      break;
    default:
      console.log(`Unhandled event type ${event.type}`);
  }

  // Return a 200 response to acknowledge receipt of the event
  response.send();
});

app.listen(4242, () => console.log('Running on port 4242'));
Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us