Tapaya
Online-ZahlungenIntegrationsleitfadenHosted Checkout

Hosted Checkout

Erstellen Sie eine Checkout-Session, leiten Sie den Kunden weiter und verifizieren Sie die Zahlung von Ihrem Server aus.

Leiten Sie den Kunden auf eine von Tapaya gehostete Zahlungsseite für Karten, Apple Pay und Google Pay weiter und verifizieren Sie das Ergebnis anschließend auf Ihrem Server. Ihre Seite verarbeitet nie Kartendaten, und Sie fügen Ihrem Shop keine Kartenfelder hinzu.

Your frontend
Your backend
Tapaya
  1. 1. Your backend to Tapaya: Create session.
  2. 2. Tapaya to Your backend: Session ID and URL.
  3. 3. Your backend to Your frontend: Redirect to Checkout.
  4. 4. Your frontend to Tapaya: Open Checkout and pay.
  5. 5. Tapaya to Your frontend: Return to your shop.
  6. 6. Your backend to Tapaya: Retrieve session.
  7. 7. Tapaya to Your backend: Payment status.
  8. 8. Your backend to Your frontend: Show verified result.

Bevor Sie beginnen

Wählen Sie den Schlüssel, der dazu passt, wer Ihr Backend betreibt. Bewahren Sie jeden der beiden Schlüssel auf Ihrem Server auf; die serverseitigen Regeln listet die Checkout-Sicherheit auf.

Gehen Sie dann unter Checkout in der Tapaya Platform wie folgt vor:

  1. Fügen Sie Ihren Händler hinzu und prüfen Sie, ob er Ready anzeigt. Siehe Checkout-Einstellungen.
  2. Registrieren Sie Ihren Shop als erlaubte Website mit Standard-URLs für Erfolg und Abbruch, und zwar für den gewählten Schlüssel. Die Beispiele verwenden https://shop.example.

Rückkehr-URLs richten sich nach dem Schlüssel

Sessions mit Händlerschlüssel verwenden die Rückkehr-URLs des Händlers. Sessions, die mit dem Secret key der Organisation erstellt werden, verwenden stattdessen die Rückkehrziele der Organisation. Die beiden werden nie kombiniert.

Eine Zahlung annehmen

Alle drei Optionen erstellen dieselben Checkout-Sessions mit denselben Zugangsdaten. Wählen Sie eine aus; jeder Schritt unten folgt Ihrer Wahl.

Server einrichten

Setzen Sie TAPAYA_CHECKOUT_API_URL auf https://api.sandbox.tapaya.com und speichern Sie Ihren Schlüssel in TAPAYA_CHECKOUT_API_KEY. Rufen Sie die API mit dem fetch Ihrer Serverlaufzeit auf, niemals aus dem Browser des Kunden. Die Beispiele lesen diese Werte über process.env; passen Sie diesen Zugriff an, wenn Ihre Laufzeitumgebung eine andere Schnittstelle für Secrets verwendet.

Erstellen Sie eine Hilfsfunktion, die HTTP-Fehler prüft, bevor sie den Body der Antwort zurückgibt:

server/checkout.js
const apiUrl = process.env.TAPAYA_CHECKOUT_API_URL;
const apiKey = process.env.TAPAYA_CHECKOUT_API_KEY;

async function checkoutRequest(path, options = {}) {
	const response = await fetch(new URL(path, apiUrl), {
		...options,
		headers: {
			...options.headers,
			Authorization: `Bearer ${apiKey}`,
		},
		redirect: 'error',
		cache: 'no-store',
		signal: AbortSignal.timeout(8000),
	});

	if (!response.ok) {
		throw new Error(`Checkout request failed (${response.status})`);
	}

	return response.json();
}

Session erstellen

Berechnen Sie den Gesamtbetrag der Bestellung auf Ihrem Server, einschließlich Steuern und Versand. Speichern Sie die Bestellung und einen eindeutigen checkoutAttemptKey, bevor Sie die Anfrage stellen, und laden Sie order aus diesem gespeicherten Snapshot. merchantOrderId ist erforderlich.

const session = await checkoutRequest('/merchant/checkout-sessions', {
	method: 'POST',
	headers: {
		'Content-Type': 'application/json',
		'Idempotency-Key': order.checkoutAttemptKey,
	},
	body: JSON.stringify({
		merchantOrderId: order.id,
		amount: order.totalInMinorUnits,
		currency: order.currency,
		successUrl: 'https://shop.example/checkout/return',
		cancelUrl: 'https://shop.example/checkout/cancel',
	}),
});

Die Antwort enthält die id der Session und die gehostete url. Positionsübersichten, Steueraufschlüsselungen, Kundendaten und alle Felder der Antwort beschreibt Checkout-Session erstellen.

Wenn die Anfrage fehlschlägt oder in ein Timeout läuft, wiederholen Sie sie mit demselben Schlüssel und unverändertem Body. Erzeugen Sie für ein unsicheres Ergebnis nie einen neuen Schlüssel: Ein geänderter Body mit demselben Schlüssel gibt HTTP 409 zurück.

OptionAutomatische Wiederholung
HTTP (fetch), cURLNein. Wiederholen Sie die Anfrage selbst. Siehe Idempotenz und Fehler.
Node.js SDKBis zu zweimal nach einem Verbindungsfehler, einem Timeout oder HTTP 429, 502, 503 oder 504, mit demselben Schlüssel und Body. Siehe Idempotenz und Wiederholungsversuche. Übergeben Sie über getrennte Aufrufe oder Neustarts hinweg Ihren gespeicherten Schlüssel: Wenn Sie ihn weglassen, wird pro Aufruf ein neuer erzeugt.

Kunden weiterleiten

Speichern Sie session.id mit Ihrer Bestellung als deren checkoutSessionId und leiten Sie den Browser dann mit HTTP 303 auf session.url weiter. Verwenden Sie die URL unverändert, statt sie selbst zusammenzusetzen.

// First persist session.id as the order's checkoutSessionId.
return Response.redirect(session.url, 303);

Wenn Ihr Framework eine andere API für Antworten verwendet, senden Sie HTTP 303 mit session.url im Header Location. Öffnen Sie bei cURL die zurückgegebene url in Ihrem Browser, um die Zahlung von Hand zu testen.

Zahlung verifizieren

Ermitteln Sie in Ihrem Rückkehr-Handler die Bestellung aus dem authentifizierten Checkout-Kontext Ihrer Anwendung und rufen Sie ihre gespeicherte Session von Ihrem Server ab. Tun Sie dies auch bei der Abbruch-URL: Ein Aufruf einer der beiden URLs beweist nichts.

const current = await checkoutRequest(
	`/merchant/checkout-sessions/${encodeURIComponent(order.checkoutSessionId)}`,
);

if (
	current.id !== order.checkoutSessionId ||
	current.merchantOrderId !== order.id ||
	current.amount !== order.totalInMinorUnits ||
	current.currency !== order.currency
) {
	throw new Error('Checkout session does not match the order');
}

const paid = current.paymentStatus === 'successful';

Nur einmal abwickeln und nur, wenn bezahlt

Verbuchen Sie die Zahlung und wickeln Sie die Bestellung nur ab, wenn die Session mit Ihrer gespeicherten Bestellung übereinstimmt und paymentStatus successful ist, und halten Sie dies atomar fest, damit es genau einmal geschieht. Wenn der Abruf fehlschlägt oder die Zahlung ungeklärt ist, behalten Sie die Session-ID und prüfen Sie erneut. Siehe Zahlungsstatus.

Zahlungsergebnisse behandeln

Die Checkout-Sicherheit beschreibt, was Sie verifizieren sollten und wie Sie ein unbekanntes Ergebnis wiederholen, ohne eine zweite Session zu erstellen.

ErgebnisWas die Session zeigtWas zu tun ist
Abgelehntopen, mit paymentStatus: failedNichts. Der Kunde kann auf derselben Seite eine andere Karte oder Wallet versuchen.
Noch unbekanntopen und unpaid, während Tapaya das Ergebnis bestätigtRufen Sie die Session später erneut ab.
Neue Session für dieselbe BestellungDie vorherige unbezahlte Session meldet expiredVerwenden Sie die neue Session. Eine bezahlte Bestellung oder eine Bestellung mit laufender Zahlung gibt HTTP 409 zurück. Siehe Eine Zahlung pro Bestellung.
AbgelaufenNimmt 30 Minuten nach der Erstellung keine neuen Zahlungen mehr anErstellen Sie eine neue Session, wenn die Bestellung noch unbezahlt ist. Eine vor dem Ablauf abgesendete Zahlung wird trotzdem abgeschlossen.

Noch keine Webhooks

Es gibt noch keine Checkout-Webhooks. Betreiben Sie einen serverseitigen Abgleichsjob, der die Sessions von Bestellungen abruft, deren Kunden nie zurückkehren.

Integration prüfen

Fehlt Ihnen etwas auf dieser Seite?Wünschen Sie sich eine Funktion. Wir hängen diese Seite an, damit das Team den Kontext sieht.