Kartenzahlung mit „Meses sin intereses“ akzeptieren
Erfahren Sie, wie Sie Kreditkartenzahlungen mit „Meses sin intereses“ für eine Vielzahl von Stripe-Produkten akzeptieren.
Bei Ratenzahlungen (Meses sin intereses) handelt es sich um eine Funktion von Verbraucherkreditkarten in Mexiko, mit der Kundinnen/Kunden den Kaufbetrag auf mehrere Abrechnungen aufteilen können. Sie erhalten die Zahlung wie bei einer normalen einmaligen Zahlung abzüglich einer Gebühr und die Kundenbank kümmert sich um den Einzug der Gelder im vereinbarten Zeitraum.
Es gibt Beschränkungen bezüglich der Transaktionen und Karten, mit denen Ratenzahlungen verwendet werden können. Weitere Informationen erhalten Sie in den Kompatibilitätsanforderungen.
Wenn Sie eine Ratenzahlung annehmen, wird eine zusätzliche Gebühr zur Standardgebühr für Kreditkartenzahlungen erhoben.
Sie können Ratenzahlungen für eine Vielzahl von Stripe-Produkten aktivieren. Wählen Sie unten die zu Ihrer Implementierung passende Anleitung aus.
Integration mit der Payment Intents API
Sie können Ratenzahlungen über die Payment Intents API akzeptieren. Dazu müssen Zahlungsdetails und Angaben zum Ratenzahlungsplan auf dem Client erfasst und die Zahlung auf dem Server abgeschlossen werden.
- Angaben zur Zahlungsmethode auf dem Client erfassen
- Ratenzahlungspläne auf dem Server abrufen
- Ratenzahlungsplan auf dem Client auswählen
- PaymentIntent auf dem Server bestätigen
Angaben zur Zahlungsmethode auf dem Client erfassen
Die Payment Intents API arbeitet mit Stripe.js und Elements zusammen, um Zahlungsinformationen (zum Beispiel Kreditkartendaten) auf der Client-Seite sicher zu erfassen. Um Elements einzurichten, fügen Sie das folgende Skript auf Ihren Seiten ein. Dieses Skript muss stets direkt von js.stripe.com geladen werden, um die PCI-Konformität zu gewährleisten. Es ist nicht möglich, es in ein Paket einzufügen oder es selbst zu hosten.
<script src="https://js.stripe.com/v3/"></script>
Um Kartendaten von Ihren Kundinnen/Kunden sicher zu erfassen, erstellt Elements von Stripe gehostete Komponenten der Nutzeroberfläche für Sie, die wir in Ihrem Zahlungsformular platzieren, anstatt dass Sie sie selbst erstellen. Um festzulegen, an welcher Stelle im Formular diese Komponenten erscheinen sollen, erstellen Sie bitte leere DOM-Elemente (Container) mit eindeutigen IDs in Ihrem Bezahlformular.
<div id="details"> <input id="cardholder-name" type="text" placeholder="Cardholder name"> <!-- placeholder for Elements --> <form id="payment-form"> <div id="card-element"></div> <button id="card-button">Next</button> </form> </div>
Erstellen Sie als Nächstes eine Instanz des Stripe-Objekts und geben Sie dabei Ihren veröffentlichbaren API-Schlüssel als ersten Parameter an. Erstellen Sie anschließend eine Instanz des Elements-Objekts. Verwenden Sie das neu erstellte Objekt, um ein Card-Element am entsprechenden Platzhalter auf der Seite zu verbinden.
const stripe = Stripe(
); const elements = stripe.elements(); const cardElement = elements.create('card'); cardElement.mount('#card-element');'pk_test_TYooMQauvdEDq54NiTphI7jx'
Verwenden Sie dann stripe.createPaymentMethod auf Ihrem Client, um die Kartenangaben zu erfassen und eine PaymentMethod zu erstellen, wenn der/die Nutzer/in auf die Schaltfläche „Absenden“ klickt.
const cardholderName = document.getElementById('cardholder-name'); const form = document.getElementById('payment-form'); form.addEventListener('submit', async (ev) => { ev.preventDefault(); const {paymentMethod, error} = await stripe.createPaymentMethod( 'card', cardElement, {billing_details: {name: cardholderName.value}}, ); if (error) { // Show error in payment form } else { // Send paymentMethod.id to your server (see Step 2) const response = await fetch('/collect_details', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({payment_method_id: paymentMethod.id}), }); const json = await response.json(); // Handle server response (see Step 3) handleInstallmentPlans(json); } });
Ratenzahlungspläne auf dem Server abrufen
Um verfügbare Ratenzahlungspläne abzurufen, richten Sie auf Ihrem Server einen Endpoint für den Empfang der Anfrage ein.
Erstellen Sie einen neuen PaymentIntent mit der ID der auf Ihrem Client erstellten PaymentMethod. Legen Sie payment_
fest, damit für diese Zahlung die Ratenzahlungsfunktion verwendet werden kann. Senden Sie die verfügbaren Pläne an den Client, damit der Kunde/die Kundin auswählen kann, mit welchem Plan er/sie bezahlt.
Notiz
Bestätigen Sie den PaymentIntent hier nicht (d. h. legen Sie die confirm-Eigenschaft nicht fest), da wir noch nicht wissen, ob der/die Nutzer/in in Raten bezahlen möchte.
Das PaymentIntent-Objekt listet die verfügbaren Ratenzahlungspläne für die PaymentMethod unter payment_
auf.
{ "id": "pi_1FKDPTJXdud1yP2PpUXNgq0V", "object": "payment_intent", "amount": 3099, ... "payment_method_options": { "card": { "installments": { "enabled": true, "plan": null, "available_plans": [ { "count": 3, "interval": "month", "type": "fixed_count" },
Ratenzahlungsplan auf dem Client auswählen
Lassen Sie den/die Kund/in den gewünschten Ratenzahlungsplan auswählen.
<div id="plans" hidden> <form id="installment-plan-form" > <label><input id="immediate-plan" type="radio" name="installment_plan" value="-1" />Immediate</label> <input id="payment-intent-id" type="hidden" /> </form> <button id="confirm-button">Confirm Payment</button> </div> <div id="result" hidden> <p id="status-message"></p> </div>
const selectPlanForm = document.getElementById('installment-plan-form'); let availablePlans = []; const handleInstallmentPlans = async (response) => { if (response.error) { // Show error from server on payment form } else { // Store the payment intent ID. document.getElementById('payment-intent-id').value = response.intent_id; availablePlans = response.available_plans; // Show available installment options availablePlans.forEach((plan, idx) => { const newInput = document.getElementById('immediate-plan').cloneNode(); newInput.setAttribute('value', idx); newInput.setAttribute('id', ''); const label = document.createElement('label'); label.appendChild(newInput); label.appendChild( document.createTextNode(`${plan.count} ${plan.interval}s`), ); selectPlanForm.appendChild(label); }); document.getElementById('details').hidden = true; document.getElementById('plans').hidden = false; } };
Senden Sie den gewählten Plan an Ihren Server.
const confirmButton = document.getElementById('confirm-button'); confirmButton.addEventListener('click', async (ev) => { const selectedPlanIdx = selectPlanForm.installment_plan.value; const selectedPlan = availablePlans[selectedPlanIdx]; const intentId = document.getElementById('payment-intent-id').value; const response = await fetch('/confirm_payment', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ payment_intent_id: intentId, selected_plan: selectedPlan, }), }); const responseJson = await response.json(); // Show success / error response. document.getElementById('plans').hidden = true; document.getElementById('result').hidden = false; var message; if (responseJson.status === "succeeded" && selectedPlan !== undefined) { message = `Success! You made a charge with this plan:${ selectedPlan.count } ${selectedPlan.interval}`; } else if (responseJson.status === "succeeded") { message = "Success! You paid immediately!"; } else { message = "Uh oh! Something went wrong"; } document.getElementById("status-message").innerText = message; });
PaymentIntent auf dem Server bestätigen
Bestätigen Sie den PaymentIntent mithilfe eines anderen Server-Endpoints, um die Zahlung zu finalisieren und die Bestellung auszuführen.
In der Antwort des Servers wird angegeben, dass Sie den Plan für den PaymentIntent und die resultierende Zahlung ausgewählt haben.
{ "id": "pi_1FKDPFJXdud1yP2PMSXLlPbg", "object": "payment_intent", "amount": 3099, ... "charges": { "data": [ { "id": "ch_1FKDPHJXdud1yP2P2u79mcIX", "object": "charge", "amount": 3099, "payment_method_details": { "card": { "installments": { "plan": { "count": 3, "interval": "month", "type": "fixed_count" } },
Ratenzahlungsplan manuell entfernen
Nachdem ein Ratenzahlungsplan für einen PaymentIntent festgelegt wurde, bleibt er bestehen, bis Sie ihn entfernen.
Nehmen wir zum Beispiel den Fall, dass die Karte eines Kunden/einer Kundin abgelehnt wird, wenn er/sie versucht, mit seiner/ihrer ersten Karte in Raten zu zahlen, und dann eine zweite Karte eingibt, die keine Ratenzahlung unterstützt. Die Bestätigung des PaymentIntent schlägt fehl, da die Ratenzahlungen für die Karte nicht unterstützt werden.
Sie müssen payment_
bei der erneuten Bestätigung des PaymentIntent ausdrücklich deaktivieren, um anzugeben, dass kein Ratenzahlungsplan vorhanden ist.
Nutzerdefinierte Einstellungen
Sie können die Konfiguration der Ratenzahlungen über die Einstellungsseite für Zahlungsmethoden im Stripe-Dashboard anpassen.
Die Option Ratenzahlungen können Sie in Ihren Einstellungen für Zahlungsmethoden aktivieren bzw. deaktivieren. Dort können Sie Ratenzahlungen für No-Code-Zahlungsmethoden aktivieren, einschließlich Payment Links und Checkout.
Unabhängig davon können Sie auf der Seite mit den Einstellungen für die Zahlungsmethoden auch die spezifischen Monatspläne konfigurieren, die Sie anbieten möchten, und die Mindest- und Höchstbeträge für die einzelnen Pläne konfigurieren. Diese Plankonfigurationen gelten für alle Ihre bestehenden Ratenzahlungensintegrationen.
Integration testen
Sie können die folgenden Karten verwenden, um Ihre Integration zu testen:
Nummer | Beschreibung |
---|---|
Ratenzahlungsplänte für 3, 6, 9, 12, 18 und 24 Monate verfügbar | |
Keine Ratenzahlungspläne verfügbar. |