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
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 :
Autorisation Accès Pourquoi Orders Read Chaque vente : son montant, ses taxes et ses remboursements, et l’e-mail du client (haché immédiatement, jamais stocké). Subscription invoices Read Renouvellements et changements d’offre. Webhooks Write Tally 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.
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.
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.
// 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);
});
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.