TL;DR
Braintree APIs verarbeiten Zahlungen von Kreditkarten, PayPal, Venmo und digitalen Geldbörsen. Die Integration erfolgt über serverseitige SDKs (Node, Python, Ruby usw.), Sie erstellen Client-Tokens für die Frontend-Sicherheit und wickeln Transaktionen, Rückerstattungen und Abonnements ab. Verwenden Sie für Tests Apidog, um Webhook-Payloads zu validieren und Ihre Integration vor der Live-Schaltung mit Sandbox-Daten zu testen.
Einleitung
Braintree verarbeitet jährlich Milliarden von Zahlungen. Es ist der Zahlungsdienstleister hinter Unternehmen wie Uber, Airbnb und GitHub. Die Plattform unterstützt Kreditkarten, PayPal, Venmo, Apple Pay, Google Pay und ACH-Überweisungen.
Zahlungs-APIs unterscheiden sich von anderen APIs. Ein Fehler in einem Produktkatalog ist ärgerlich. Ein Fehler bei Zahlungen kostet echtes Geld und zerstört das Vertrauen der Kunden. Sie müssen es richtig machen.
Braintree bietet zwei Integrationswege an: Drop-in UI (vorgefertigtes Zahlungsformular) und Custom UI (volle Kontrolle). Beide verwenden dieselben serverseitigen APIs für die eigentliche Zahlungsabwicklung. Dieser Leitfaden behandelt die serverseitige Arbeit, die stattfindet, nachdem ein Kunde auf „Bezahlen“ klickt.
💡 Tipp: Beim Erstellen von Zahlungsintegrationen hilft Ihnen Apidog beim Testen von Webhook-Handlern und Validieren von Zahlungsantworten. Simulieren Sie Braintree-Webhooks lokal, um Ihren Code für Erfolgs-, Fehler- und Edge-Fälle abzusichern, bevor Sie live gehen.
Testen Sie Braintree-Webhooks mit Apidog – kostenlos
Braintree einrichten
Ein Braintree-Konto erstellen
- Gehen Sie zu braintreepayments.com und erstellen Sie ein Sandbox-Konto.
- Notieren Sie Ihre Zugangsdaten:
- Händler-ID:
abc123xyz - Öffentlicher Schlüssel:
def456... - Privater Schlüssel:
ghi789...
- Händler-ID:
Speichern Sie diese sicher. Der private Schlüssel ist wie ein Passwort – niemals in Git committen!
Das SDK installieren
Installieren Sie das Braintree-SDK für Ihre Serverseite:
Node.js:
npm install braintree
Python:
pip install braintree
Ruby:
gem install braintree
Gateway initialisieren:
const braintree = require('braintree')
const gateway = new braintree.BraintreeGateway({
environment: braintree.Environment.Sandbox,
merchantId: process.env.BRAINTREE_MERCHANT_ID,
publicKey: process.env.BRAINTREE_PUBLIC_KEY,
privateKey: process.env.BRAINTREE_PRIVATE_KEY
})
Einen Client-Token generieren
Vor dem Anzeigen des Zahlungsformulars generieren Sie einen Client-Token für das Frontend:
app.get('/checkout/token', async (req, res) => {
const clientToken = await gateway.clientToken.generate()
res.json({ clientToken: clientToken.clientToken })
})
Das Frontend initialisiert damit die Drop-in-UI oder Ihre eigene Integration.
Zahlungen verarbeiten
Der Zahlungsablauf
- Das Frontend sendet eine Zahlungsmethoden-Nonce an Ihren Server.
- Der Server erzeugt eine Transaktion mit dieser Nonce.
- Braintree verarbeitet die Zahlung.
- Ihr Server erhält Erfolg oder Fehler zurück.
- Sie liefern die Bestellung aus oder zeigen einen Fehler an.
Eine Kreditkarte belasten
app.post('/checkout', async (req, res) => {
const { paymentMethodNonce, amount, orderId } = req.body
const result = await gateway.transaction.sale({
amount: amount,
paymentMethodNonce: paymentMethodNonce,
orderId: orderId,
options: {
submitForSettlement: true
}
})
if (result.success) {
res.json({
success: true,
transactionId: result.transaction.id
})
} else {
res.status(400).json({
success: false,
message: result.message
})
}
})
Mit gespeicherter Zahlungsmethode belasten
Nach der ersten Transaktion können Sie die Zahlungsmethode speichern:
// Kunde mit Zahlungsmethode anlegen
const result = await gateway.customer.create({
firstName: 'John',
lastName: 'Doe',
email: 'john@example.com',
paymentMethodNonce: nonce
})
// Token der gespeicherten Zahlungsmethode
const paymentMethodToken = result.customer.paymentMethods[0].token
// Später mit Token belasten
await gateway.transaction.sale({
amount: '49.99',
paymentMethodToken: paymentMethodToken,
options: {
submitForSettlement: true
}
})
PayPal-Transaktionen
Braintree behandelt PayPal wie Kreditkarten. Sie erhalten eine Nonce und belasten diese:
const result = await gateway.transaction.sale({
amount: '99.00',
paymentMethodNonce: paypalNonce,
orderId: 'ORDER-123',
options: {
submitForSettlement: true
}
})
Rückerstattungen und Stornierungen
Vollständige Rückerstattung
const result = await gateway.transaction.refund('transaction_id')
if (result.success) {
console.log('Rückerstattet:', result.transaction.id)
}
Teilweise Rückerstattung
const result = await gateway.transaction.refund('transaction_id', '50.00')
if (result.success) {
console.log('Teilweise Rückerstattung verarbeitet')
}
Eine Transaktion stornieren
Verwenden Sie dies für autorisierte, aber noch nicht abgerechnete Zahlungen:
const result = await gateway.transaction.void('transaction_id')
if (result.success) {
console.log('Transaktion storniert')
}
Transaktionsstatusfluss
autorisiert → zur Abrechnung eingereicht → abgewickelt
↓
storniert
abgewickelt → rückerstattet
Abonnements und wiederkehrende Abrechnungen
Braintree verwaltet Abonnements für wiederkehrende Zahlungen.
Einen Plan erstellen
Erstellen Sie einen Plan im Kontrollpanel oder über die API:
const result = await gateway.plan.create({
id: 'monthly-premium',
name: 'Monthly Premium',
billingFrequency: 1,
currencyIsoCode: 'USD',
price: '29.99'
})
Ein Abonnement erstellen
const result = await gateway.subscription.create({
paymentMethodToken: paymentMethodToken,
planId: 'monthly-premium',
firstBillingDate: new Date()
})
if (result.success) {
console.log('Abonnement erstellt:', result.subscription.id)
}
Ein Abonnement kündigen
const result = await gateway.subscription.cancel('subscription_id')
if (result.success) {
console.log('Abonnement gekündigt')
}
Abonnement aktualisieren
const result = await gateway.subscription.update('subscription_id', {
planId: 'annual-premium',
price: '299.99'
})
Webhooks für Zahlungsereignisse
Webhooks informieren Ihren Server über Transaktionsereignisse – essenziell für Abos und Disputes.
Einen Webhook-Endpunkt erstellen
app.post('/webhooks/braintree', (req, res) => {
const signature = req.body.bt_signature
const payload = req.body.bt_payload
// Webhook verifizieren und parsen
gateway.webhookNotification.parse(
signature,
payload,
(err, webhookNotification) => {
if (err) {
return res.status(400).send('Ungültiger Webhook')
}
switch (webhookNotification.kind) {
case 'subscription_charged_successfully':
handleSuccessfulCharge(webhookNotification.subscription)
break
case 'subscription_charged_unsuccessfully':
handleFailedCharge(webhookNotification.subscription)
break
case 'dispute_opened':
handleDispute(webhookNotification.dispute)
break
case 'transaction_settled':
handleSettledTransaction(webhookNotification.transaction)
break
}
res.status(200).send('OK')
}
)
})
Webhook in Braintree registrieren
Im Braintree-Kontrollpanel unter Einstellungen → Webhooks Ihre Endpunkt-URL hinzufügen. Für lokale Entwicklung empfiehlt sich ein Tunneling-Dienst wie ngrok.
Testen mit Apidog
Zahlungs-APIs müssen gründlich getestet werden. Apidog hilft, risikofrei zu testen.
1. Webhook-Payloads simulieren
Erstellen Sie Mock-Payloads und senden Sie sie an Ihren Webhook für lokale Tests:
{
"bt_signature": "test_signature",
"bt_payload": "eyJraW5kIjoidHJhbnNhY3Rpb25fc2V0dGxlZCIsInRyYW5zYWN0aW9uIjp7ImlkIjoiYWJjMTIzIiwiYW1vdW50IjoiNDkuOTkiLCJzdGF0dXMiOiJzZXR0bGVkIn19"
}
2. Umgebungstrennung
Konfigurieren Sie Sandbox und Produktion klar getrennt:
# Sandbox
BRAINTREE_MERCHANT_ID: sandbox_merchant
BRAINTREE_PUBLIC_KEY: sandbox_public
BRAINTREE_PRIVATE_KEY: sandbox_private
BRAINTREE_ENVIRONMENT: sandbox
# Produktion
BRAINTREE_MERCHANT_ID: live_merchant
BRAINTREE_PUBLIC_KEY: live_public
BRAINTREE_PRIVATE_KEY: live_private
BRAINTREE_ENVIRONMENT: production
3. Webhook-Antworten validieren
pm.test('Webhook erfolgreich verarbeitet', () => {
pm.response.to.have.status(200)
pm.response.to.have.body('OK')
})
pm.test('Transaktions-ID protokolliert', () => {
// Überprüfen Sie Ihre Protokolle oder Datenbank
const transactionId = pm.environment.get('last_transaction_id')
pm.expect(transactionId).to.not.be.empty
})
Testen Sie Braintree-Webhooks mit Apidog – kostenlos
Häufige Fehler und Behebungen
Verarbeitung abgelehnt
Ursache: Die Bank hat die Transaktion abgelehnt.
Behebung: Oft unzureichende Deckung oder Betrugsfilter. Zeigen Sie dem Kunden einen generischen Fehler, schlagen Sie alternative Karten vor. Protokollieren Sie processorResponseCode.
if (!result.success) {
if (result.transaction.processorResponseCode === '2000') {
// Bank hat abgelehnt
return res.status(400).json({
error: 'Ihre Bank hat diese Transaktion abgelehnt. Bitte versuchen Sie es mit einer anderen Karte.'
})
}
}
Gateway abgelehnt
Ursache: Betrugsfilter von Braintree haben blockiert.
Behebung: Prüfen Sie gatewayRejectionReason:
if (result.transaction.gatewayRejectionReason === 'cvv') {
// CVV-Fehler
}
if (result.transaction.gatewayRejectionReason === 'avs') {
// Adressverifizierung fehlgeschlagen
}
if (result.transaction.gatewayRejectionReason === 'fraud') {
// Erweiterte Betrugstools haben blockiert
}
Abrechnungsfehler
Ursache: Abwicklung nach Autorisierung fehlgeschlagen.
Behebung: Überwachen Sie transaction_settlement_declined Webhooks. Häufige Gründe:
- Zahlungsmethode abgelaufen
- Emittent blockiert Transaktion
- Unzureichende Deckung erkannt
Doppelte Transaktionen
Ursache: Mehrfaches Klicken oder erneute Versuche.
Behebung: Nutzen Sie den orderId-Parameter, Braintree lehnt Duplikate ab:
const result = await gateway.transaction.sale({
amount: '49.99',
paymentMethodNonce: nonce,
orderId: 'UNIQUE-ORDER-123', // Verhindert Duplikate
options: {
submitForSettlement: true
}
})
Alternativen und Vergleiche
| Funktion | Braintree | Stripe | PayPal |
|---|---|---|---|
| Preise | 2.9% + 30¢ | 2.9% + 30¢ | 2.9% + 30¢ |
| PayPal-Unterstützung | Nativ | Add-on | Nativ |
| Abonnements | Ja | Ja | Begrenzt |
| International | 46 Länder | 46 Länder | 200+ Länder |
| Betrugstools | Integriert | Integriert | Basis |
| SDK-Qualität | Ausgezeichnet | Ausgezeichnet | Gut |
| Auszahlungen | Ja | Ja | Ja |
Der Hauptvorteil von Braintree ist die native Unterstützung von PayPal und Venmo. Wenn Sie Kartenverarbeitung und PayPal benötigen, ist es oft einfacher als Stripe + PayPal separat zu betreiben.
Anwendungsfälle aus der Praxis
SaaS-Abonnementplattform:
Ein Projektmanagement-Tool nutzt Braintree für monatliche Abos. Webhooks melden fehlgeschlagene Zahlungen (Karte abgelaufen, keine Deckung) und lösen E-Mail-Benachrichtigungen aus. Benutzer aktualisieren ihre Zahlungsmittel eigenständig.
Marktplatz-Zahlungen:
Eine Freelancer-Plattform teilt Zahlungen zwischen Plattformgebühr und Freelancer. Braintrees Händler- und Sub-Händler-Modell vereinfacht die Komplexität.
E-Commerce mit PayPal:
Ein Online-Shop bietet Kreditkarten und PayPal an. Die einheitliche API von Braintree verarbeitet beides. Dasselbe Kundenobjekt gilt für alle Zahlungsarten.
Fazit
Das Wichtigste in Kürze:
- Braintree SDKs übernehmen die serverseitige Zahlungsabwicklung
- Client-Tokens autorisieren das Frontend
- Transaktionsverkäufe belasten Kreditkarten und PayPal
- Abonnements steuern wiederkehrende Zahlungen
- Webhooks informieren über Zahlungsereignisse
- Testen Sie alles mit Apidog, bevor Sie live gehen
FAQ
Was ist eine Zahlungsmethoden-Nonce?
Eine Nonce ist ein einmaliger Token, der eine Zahlungsmethode repräsentiert. Das Frontend generiert ihn nach der Eingabe der Kartendaten. Ihr Server verwendet die Nonce zum Belasten der Karte. Nonces verfallen nach 3 Stunden.
Was ist der Unterschied zwischen Autorisierung und Abrechnung?
Autorisierung reserviert Beträge auf der Karte. Abrechnung belastet die Karte tatsächlich. Standardmäßig wird automatisch abgerechnet. Bei Vorbestellungen können Sie erst autorisieren und später abrechnen:
// Nur autorisieren
await gateway.transaction.sale({
amount: '99.00',
paymentMethodNonce: nonce,
options: {
submitForSettlement: false // Nur autorisieren
}
})
// Später abrechnen
await gateway.transaction.submitForSettlement('transaction_id')
Wie gehe ich mit Währungen um?
Jedes Händlerkonto hat eine Standardwährung. Für mehrere Währungen sind mehrere Händlerkonten notwendig. Kontaktieren Sie den Braintree-Support für Einrichtung.
Welche Testkartennummern sollte ich verwenden?
In der Sandbox stehen diese Testkarten zur Verfügung:
-
4111111111111111– Visa (Erfolg) -
4000111111111115– Visa (Ablehnung) -
5555555555554444– Mastercard (Erfolg) -
378282246310005– Amex (Erfolg)
Wie gehe ich mit Streitigkeiten/Rückbuchungen um?
Überwachen Sie die Webhooks dispute_opened, dispute_won, dispute_lost. Reichen Sie Beweise über das Kontrollpanel ein. Dokumentieren Sie Kundenkommunikation, Lieferungen und AGB.
Kann ich Kreditkartennummern speichern?
Nein. Aus PCI-Gründen dürfen Sie keine Rohdaten speichern. Verwenden Sie stattdessen Zahlungsmethoden-Tokens. Braintree übernimmt die PCI-Compliance.
Was ist 3D Secure?
3D Secure fügt einen Authentifizierungsschritt für Karten ohne Vorlage hinzu. In Braintree aktivieren und auf authentication_required reagieren:
const result = await gateway.transaction.sale({
amount: '100.00',
paymentMethodNonce: nonce,
threeDSecure: {
required: true
}
})
Wie lange dauern Rückerstattungen?
Rückerstattungen werden meist innerhalb von 3–5 Werktagen bearbeitet. Der Zeitrahmen hängt von der Bank ab. Ein transaction_refunded Webhook informiert Sie über den Abschluss.


Top comments (0)