Zum Inhalt springen

Integration

Formfeed für Stripe

Stripe führt Ihre Rechnungen: die Nummer, den Kunden, die Positionen, die Rabatte und die Umsatzsteuer. Ein Webhook auf invoice.finalized und eine Funktion machen aus jeder davon eine ZUGFeRD- / Factur-X-E-Rechnung, ein PDF/A-3 mit der Rechnung als XML darin, geprüft, bevor sie Sie erreicht. In Stripe wird nichts installiert, und nichts wird neu berechnet: Die E-Rechnung nennt, was Stripe berechnet hat.

Nichts zu installieren: Ein Webhook-Handler und eine Funktion erledigen es heute.

Kostenloser Plan mit 100 Einheiten im Monat, keine Kreditkarte

Ein Webhook, eine Funktion

Stripe sendet invoice.finalized, sobald eine Rechnung ihre Nummer hat. Der Handler listet die Positionen der Rechnung mit ihren Steuersätzen, macht aus der Rechnung den _invoice-Block und rendert ihn mit einer Vorlage, die den Block druckt, etwa dem Beispiel „E-Rechnung“ in der App. Das Rezept, mit der ganzen Funktion und demselben in n8n, steht in der Dokumentation.

Stripe-Webhook: invoice.finalizedJavaScript
const invoice = await stripe.invoices.retrieve(event.data.object.id);
const lines = [];
for await (const line of stripe.invoices.listLineItems(invoice.id, {
  limit: 100,
  expand: ['data.taxes.tax_rate_details.tax_rate'],
}))
  lines.push(line);

const render = await formfeed.renders.create(
  {
    template: 'e-rechnung',
    data: { _invoice: stripeToInvoice(invoice, lines, config) },
    post: { einvoice: {} },
    filename: `${invoice.number}.pdf`,
  },
  { idempotencyKey: `stripe-${invoice.id}` },
);

Was die Funktion von Stripe übernimmt

  • Jede Position mit Stripes Menge, Preis und Nettobetrag. Ein Rabatt bleibt als Nachlass an seiner Position sichtbar, und eine Gutschrift für ungenutzte Zeit nach einem Upgrade ist eine negative Menge.
  • Die Umsatzsteuer, die Stripe angewendet hat. Regelsatz und ermäßigter Satz sind Kategorie S; jeder andere Grund (Reverse Charge, steuerfrei, nicht steuerbar) wird die Kategorie, die Sie einmal festlegen, denn diese Wahl treffen Sie und Ihre Steuerberatung.
  • Stripes Summen. Die Positionen müssen Stripes Gesamtbetrag ergeben, und was schon bezahlt oder mit dem Guthaben des Kunden verrechnet ist, steht als Vorauszahlung in der Rechnung.
  • Der Kunde, wie Stripe ihn beim Finalisieren festgehalten hat: Name, Adresse, EU-USt-IdNr. und E-Mail.

Sie lehnt ab, statt zu raten

Versandkosten, ein Saldo aus früheren Rechnungen, eine Position mit zwei Steuern und ein Steuergrund ohne Kategorie halten die Funktion mit der Nummer der Rechnung an, statt eine E-Rechnung zu erzeugen, die von Stripes Rechnung abweicht. Die API prüft den Block danach gegen EN 16931, bevor etwas gerendert oder berechnet wird. Lehnt sie einen ab, fehlen Daten in Stripe, meist Adresse oder Land des Kunden, und die Ablehnung nennt jedes Feld und die Regel, die es verletzt.

Gut zu wissen, bevor Sie es bauen

  • Live-E-Rechnungen setzen den Starter-Plan oder höher voraus. Während Sie bauen, erzeugt ein Test-Schlüssel gültige E-Rechnungen mit der Testmarkierung, im Free-Plan bis zu 20 am Tag.
  • Stripe stellt ein Ereignis mehr als einmal zu. Ein Idempotency-Key (24 Stunden) und die Rendering-ID in den Metadaten der Rechnung halten es bei einer E-Rechnung pro Rechnung; zwei Zustellungen, die eintreffen, während das erste Rendering noch läuft, brauchen eine Warteschlange, wie das Rezept erklärt.
  • Formfeed erzeugt und prüft die Datei. Sie an Ihren Kunden zu senden und zu archivieren, bleibt bei Ihnen: Formfeed bewahrt die Datei nur für die Aufbewahrungsfrist des Workspace auf (30 Tage im Starter-Plan, ein Jahr im Pro-Plan), nicht für die Jahre, die eine Rechnung aufbewahrt werden muss.
  • Versendet Stripe auch sein eigenes PDF der Rechnung, erhält Ihr Kunde zwei Dokumente mit einer Nummer. Entscheiden Sie, welches davon die Rechnung ist.

Weitere Integrationen

Heute mit dem Rendern beginnen

Der kostenlose Plan enthält 100 Einheiten im Monat und kostenlose Testrenderings. Wechseln Sie den Plan, wenn Sie mehr brauchen.