DocumentationLemon Squeezy

03 · Revenus

Connecter Lemon Squeezy et lier ses commandes aux visites

Tally lit les commandes et les factures d’abonnement de votre boutique, et ajoute son propre webhook.

01Connecter Lemon Squeezy

  1. Créer une clé API dans Lemon Squeezy

    Les clés API de Lemon Squeezy ne peuvent pas être restreintes : créez-en donc une rien que pour Tally. Tally ne fait que lire les commandes de votre boutique et ajouter son propre webhook, et vous pouvez supprimer la clé à tout moment. Dans Lemon Squeezy, ouvrez Settings, API et créez une clé. Voici tout ce que Tally en fait :

    AutorisationAccèsPourquoi
    OrdersReadChaque vente : son montant, ses taxes et ses remboursements, et l’e-mail du client (haché immédiatement, jamais stocké).
    Subscription invoicesReadRenouvellements et changements d’offre.
    WebhooksWriteTally ajoute son propre webhook à la boutique, pour que les paiements arrivent en quelques secondes.

    Une clé créée en mode test ne voit que les commandes de test : utilisez-en une pour essayer d’abord.

  2. Coller la clé API

    Sur la page Integrations de votre site (ou à l’étape Payments quand vous ajoutez un site), ouvrez Lemon Squeezy et renseignez :

    • API key : Tally la stocke chiffrée et ne l’affiche plus jamais.
    • Store (optional) : seulement si votre clé voit plus d’une boutique. Indiquez son adresse, son nom ou son identifiant.

    Cliquez ensuite sur Connect Lemon Squeezy.

  3. Tally vérifie l’accès et importe l’année écoulée

    Il vérifie la clé auprès de votre boutique, ajoute son propre webhook pour que les nouvelles commandes arrivent au moment où elles ont lieu, et importe les 365 derniers jours. Lemon Squeezy n’envoie les données personnalisées d’un paiement que dans les webhooks : les commandes importées sont donc liées par l’e-mail du client ; les commandes à venir portent l’identifiant du visiteur.

02Transmettre l’identifiant du visiteur en données personnalisées

Sur les pages qui ont des liens d’achat, quelques lignes ajoutent la valeur du cookie _tally_vid en checkout[custom][tally_visitor_id] à chaque lien de paiement Lemon Squeezy. Un paiement que crée votre serveur la reçoit dans checkout_data.custom.

Afficher le code pour

// On pages with Lemon Squeezy buy links: add the visitor id as custom data.
const visitorId = (document.cookie.match(/(?:^|; )_tally_vid=([\w-]+)/) || [])[1];
for (const link of document.querySelectorAll('a[href*=".lemonsqueezy.com/checkout/buy/"]')) {
  const url = new URL(link.href);
  if (visitorId && !url.searchParams.has('checkout[custom][tally_visitor_id]')) {
    url.searchParams.set('checkout[custom][tally_visitor_id]', visitorId);
    link.href = url.href;
  }
}

// Express with cookie-parser, where you create a Lemon Squeezy checkout.
app.post('/checkout', async (req, res) => {
  const visitorId = req.cookies['_tally_vid'];
  const response = await fetch('https://api.lemonsqueezy.com/v1/checkouts', {
    method: 'POST',
    headers: {
      Accept: 'application/vnd.api+json',
      'Content-Type': 'application/vnd.api+json',
      Authorization: 'Bearer ' + process.env.LEMONSQUEEZY_API_KEY,
    },
    body: JSON.stringify({
      data: {
        type: 'checkouts',
        attributes: { checkout_data: { custom: visitorId ? { 'tally_visitor_id': visitorId } : {} } },
        relationships: {
          store: { data: { type: 'stores', id: '1' } },
          variant: { data: { type: 'variants', id: '1' } },
        },
      },
    }),
  });
  const { data } = await response.json();
  res.redirect(303, data.attributes.url);
});

03Sur un site sans cookie

Sans cookie, il n’y a pas d’identifiant à ajouter, alors identifiez l’acheteur par l’e-mail qu’il utilise pour payer : objectifs et identify.

04Vérifier que ça marche

05Ce qui n’est pas lu

Il manque quelque chose, ou ce n’est pas ce que vous voyez ? Écrivez à support@tallybyoutpost.com en précisant la page.