DokuPaddle

03 · Umsatz

Paddle verbinden und seine Verkäufe mit Besuchen verknüpfen

Tally liest Transaktionen, Erstattungen und Rückbuchungen von Paddle Billing mit einem Schlüssel, der nur lesen kann.

01Paddle verbinden

  1. Einen API-Schlüssel in Paddle erstellen

    Tally liest nur deine Transaktionen und muss nie Geld bewegen. Ein API-Schlüssel kann nur, was du erlaubst, und du kannst ihn jederzeit widerrufen. Öffne in Paddle Developer tools, Authentication, wähle „New API key“ und gib ihm diese Berechtigungen:

    BerechtigungZugriffWozu
    TransactionLesenJede Zahlung: Betrag, Steuer, Herkunft und Custom Data.
    AdjustmentLesenErstattungen und Rückbuchungen.
    CustomerLesenDie E-Mail des Kunden für den Abgleich mit tally('identify'): sofort gehasht, nie gespeichert.
    Notification settingSchreibenTally legt ein eigenes Benachrichtigungsziel an, damit Zahlungen binnen Sekunden ankommen.

    Lass jede andere Berechtigung aus. Zum Ausprobieren nutze zuerst einen Sandbox-Schlüssel von sandbox-vendors.paddle.com.

  2. Den API-Schlüssel einfügen

    Öffne auf der Seite Integrations deiner Website (oder im Schritt Payments, wenn du eine Website hinzufügst) Paddle und fülle aus:

    • API key: Er beginnt mit pdl_live_apikey_ (oder pdl_sdbx_apikey_ in der Sandbox). Tally speichert ihn verschlüsselt und zeigt ihn nie wieder an.

    Klicke dann auf Connect Paddle.

  3. Tally prüft den Zugang und importiert das letzte Jahr

    Jede fehlende Berechtigung des Schlüssels wird genannt, ein eigenes Benachrichtigungsziel kommt hinzu, damit neue Zahlungen sofort ankommen, und die letzten 365 Tage werden importiert, Erstattungen und Rückbuchungen inklusive.

02Die Besucher-ID in customData übergeben

Wo du den Checkout mit Paddle.js öffnest, lies das Cookie _tally_vid und übergib es als tally_visitor_id in customData. Paddle behält es an der Transaktion und kopiert es ins Abo, Verlängerungen folgen also. Eine Transaktion, die dein Server erstellt, nimmt es in custom_data auf.

Code anzeigen für

// 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 });
});

03Auf einer Website ohne Cookies

Ohne Cookie gibt es keine ID zum Übergeben, identifiziere den Käufer also mit der E-Mail, mit der er bezahlt: Ziele und identify.

04Prüfen, ob es geklappt hat

05Was nicht gelesen wird

Fehlt etwas, oder sieht es bei dir anders aus? Schreib an support@tallybyoutpost.com und nenne die Seite.