03 · Revenus
Connecter Paddle et lier ses ventes aux visites
Tally lit les transactions, remboursements et rétrofacturations de Paddle Billing avec une clé qui ne peut que lire.
01Connecter Paddle
Créer une clé API dans Paddle
Tally ne fait que lire vos transactions ; il n’a jamais besoin de déplacer de l’argent. Une clé API ne peut faire que ce que vous autorisez, et vous pouvez la révoquer à tout moment. Dans Paddle, ouvrez Developer tools, Authentication, choisissez New API key, et donnez-lui ces autorisations :
Autorisation Accès Pourquoi Transaction Read Chaque paiement : son montant, ses taxes, son origine et ses données personnalisées. Adjustment Read Remboursements et rétrofacturations. Customer Read L’e-mail du client, pour le rapprochement avec tally('identify') : haché immédiatement, jamais stocké. Notification setting Write Tally ajoute sa propre destination de notification, pour que les paiements arrivent en quelques secondes. Laissez toutes les autres autorisations désactivées. Pour essayer d’abord, utilisez une clé sandbox de sandbox-vendors.paddle.com.
Coller la clé API
Sur la page Integrations de votre site (ou à l’étape Payments quand vous ajoutez un site), ouvrez Paddle et renseignez :
- API key : elle commence par pdl_live_apikey_ (ou pdl_sdbx_apikey_ en sandbox). Tally la stocke chiffrée et ne l’affiche plus jamais.
Cliquez ensuite sur Connect Paddle.
Tally vérifie l’accès et importe l’année écoulée
Il nomme toute autorisation manquante, ajoute sa propre destination de notification pour que les nouveaux paiements arrivent au moment où ils ont lieu, et importe les 365 derniers jours, remboursements et rétrofacturations compris.
02Transmettre l’identifiant du visiteur dans customData
Là où vous ouvrez le paiement avec Paddle.js, lisez le cookie _tally_vid et transmettez-le en tally_visitor_id dans customData. Paddle le conserve sur la transaction et le copie sur l’abonnement : les renouvellements suivent donc. Une transaction que crée votre serveur le reçoit dans custom_data.
// Where you open the checkout (Paddle.js, after Paddle.Initialize).
const visitorId = (document.cookie.match(/(?:^|; )_tally_vid=([\w-]+)/) || [])[1];
Paddle.Checkout.open({
items: [{ priceId: 'pri_123', quantity: 1 }],
// customData needs at least one key, so it is left out without a visitor id.
...(visitorId ? { customData: { 'tally_visitor_id': visitorId } } : {}),
});
// Express with cookie-parser: a transaction your server creates for the checkout.
app.post('/checkout', async (req, res) => {
const visitorId = req.cookies['_tally_vid'];
const response = await fetch('https://api.paddle.com/transactions', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + process.env.PADDLE_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
items: [{ price_id: 'pri_123', quantity: 1 }],
custom_data: visitorId ? { 'tally_visitor_id': visitorId } : null,
}),
});
const { data } = await response.json();
// On the page: Paddle.Checkout.open({ transactionId: data.id }).
res.json({ transactionId: data.id });
});
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.