Erfahren Sie, wie Sie ein AbonnementAbonnement per SEPA-Lastschriftverfahren einrichten und abrechnen können.
Notiz
Wenn Sie ein neuer Nutzer/eine neue Nutzerin sind, verwenden Sie das Payment Element, statt wie in diesem Leitfaden beschrieben Stripe Elements zu nutzen. Das Payment Element bietet einen Low-Code-Integrationspfad mit integrierten Konversionsoptimierungen. Eine Anleitung finden Sie unter Abonnement zusammenstellen.
Produkte stehen für den von Ihnen angebotenen Artikel oder Dienst. Preise geben an, wie viel und wie häufig Sie für ein Produkt berechnen. Dies schließt ein, wie viel ein Produkt kostet, welche Währung Sie akzeptieren und ob es sich um eine einmalige oder eine wiederkehrende Zahlung handelt. Wenn Sie nur ein paar wenige Produkte und Preise haben, können Sie diese im Dashboard erstellen und verwalten.
In diesem Leitfaden wird ein Stock-Foto-Service als Beispiel verwendet, für den Kund/innen ein monatliches Abonnement mit dem Betrag von 15 EUR berechnet werden. Um dies zu modellieren:
Zeichnen Sie nach Erstellen des Produkts und des Preises die Preis-ID auf, sodass Sie diese in nachfolgenden Schritten verwenden können. Die ID wird auf der Preisseite angezeigt und sieht in etwa so aus: price_G0FvDp6vZvdwRZ.
Ein Abonnement benötigt einen Kunden/eine Kundin, sodass Zahlungsmethoden wiederverwendet und wiederkehrende Zahlungen nachverfolgt werden können. Erstellen Sie ein Customer-Objekt, wenn Ihr Kunde/Ihre Kundin ein Konto bei Ihrem Unternehmen einrichtet.
Create the subscription using the customer and price IDs. Return to the client side the client_secret from either the latest invoice’s confirmation_secret.client_secret or, for subscriptions that don’t collect a payment up front, the pending_setup_intent. Additionally, set:
payment_behavior auf default_incomplete, um die Erfassung des SEPA-Lastschriftmandats zu vereinfachen.
save_default_payment_method auf on_subscription, um die Zahlungsmethode als Standard für das Abonnement zu speichern, wenn die Zahlung erfolgreich ist. Durch das Speichern einer Standardzahlungsmethode wird die Erfolgsquote zukünftiger Abonnementzahlungen erhöht.
# Set your secret key. Remember to switch to your live secret key in production.# See your keys here: https://dashboard.stripe.com/apikeysStripe.api_key =
Sie können jetzt mit Stripe Elements Zahlungsinformationen auf dem Client erfassen. Elements beinhaltet vorgefertigte Komponenten der Nutzeroberfläche zur Erfassung von Zahlungsdetails.
Ein Stripe Element enthält ein iframe, dass die Zahlungsdaten über eine HTTPS-Verbindung sicher an Stripe sendet. Die Adresse der Bezahlseite muss ebenfalls mit https:// beginnen, nicht mit http://, damit Ihre Integration funktioniert.
Sie können Ihre Integration ohne HTTPS testen. Dann müssen Sie das Protokoll aber aktivieren, bevor Sie Ihre ersten Live-Zahlungen empfangen.
Stripe Elements einrichten
Stripe Elements ist ein Feature von Stripe.js und steht damit automatisch zur Verfügung. Fügen Sie das Stripe.js-Skript auf Ihrer Zahlungsseite ein, indem Sie es in den head Ihrer HTML-Datei einbinden. Laden Sie Stripe.js immer direkt von js.stripe.com, um die PCI-Compliance zu gewährleisten. Fügen Sie das Skript nicht in ein Bundle ein und hosten Sie selbst keine Kopie davon.
Erstellen Sie auf Ihrer Zahlungsseite mit dem folgenden JavaScript eine Instanz von Elements:
const stripe =Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
);const elements = stripe.elements();
IBAN-Element hinzufügen und konfigurieren
Weisen Sie Elements in Ihrem Zahlungsformular einen festen Platz zu. Erstellen Sie in Ihrem Zahlungsformular leere DOM-Knoten (Container) mit eindeutigen IDs und übergeben Sie diese IDs dann an Elements. Außerdem müssen Ihre Kund/innen das SEPA-Lastschriftmandat lesen und akzeptieren.
Zeigen Sie den folgenden Standard-Autorisierungstext an, damit Ihre Kund/innen das Mandat implizit akzeptieren.
Ersetzen Sie Rocket Rides durch den Namen Ihres Unternehmens.
Authorization text template
By providing your payment information and confirming this payment, you authorise (A) and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur.
Beim Einrichten einer Zahlungsmethode wird das akzeptierte Mandat erstellt. Da die Kund/innen das Mandat mit der Zustimmung zu diesen Bedingungen implizit akzeptiert haben, müssen Sie diese Bedingungen in Ihrem Formular oder per E-Mail mitteilen.
payment_setup.html
<formaction="/form"method="post"id="setup-form"><divclass="form-row inline"><divclass="col"><labelfor="accountholder-name">
Name
</label><inputid="accountholder-name"name="accountholder-name"placeholder="Jenny Rosen"required/></div><divclass="col"><labelfor="email">
Email Address
</label><inputid="email"name="email"type="email"placeholder="jenny.rosen@example.com"required/></div></div><divclass="form-row"><!--
Using a label with a for attribute that matches the ID of the
Element container enables the Element to automatically gain focus
when the customer clicks on the label.
--><labelfor="iban-element">
IBAN
</label><divid="iban-element"><!-- A Stripe Element will be inserted here. --></div></div><!-- Add the client_secret from the SetupIntent as a data attribute --><buttonid="submit-button"data-secret="{CLIENT_SECRET}">
Set up SEPA Direct Debit
</button><!-- Display mandate acceptance text. --><divid="mandate-acceptance">
By providing your payment information and confirming this payment, you
authorise (A) Rocket Rides and Stripe, our payment service provider
and/or PPRO, its local service provider, to send instructions to your
bank to debit your account and (B) your bank to debit your account in
accordance with those instructions. As part of your rights, you are
entitled to a refund from your bank under the terms and conditions of
your agreement with your bank. A refund must be claimed within 8 weeks
starting from the date on which your account was debited. Your rights
are explained in a statement that you can obtain from your bank. You
agree to receive notifications for future debits up to 2 days before
they occur.
</div><!-- Used to display form errors. --><divid="error-message"role="alert"></div></form>
Wenn das Formular geladen wurde, erstellen Sie eine Instanz des IBAN-Elements und verbinden Sie sie mit dem Element-Container:
// Custom styling can be passed to options when creating an Element.const style ={
base:{
color:'#32325d',
fontSize:'16px','::placeholder':{
color:'#aab7c4'},':-webkit-autofill':{
color:'#32325d',},},
invalid:{
color:'#fa755a',
iconColor:'#fa755a',':-webkit-autofill':{
color:'#fa755a',},},};const options ={
style,
supportedCountries:['SEPA'],// Elements can use a placeholder as an example IBAN that reflects// the IBAN format of your customer's country. If you know your// customer's country, we recommend passing it to the Element as the// placeholderCountry.
placeholderCountry:'DE',};// Create an instance of the IBAN Elementconst iban = elements.create('iban', options);// Add an instance of the IBAN Element into the `iban-element` <div>
iban.mount('#iban-element');
Verwenden Sie confirmSepaDebitPayment oder, für Abonnements, bei denen keine Zahlung im Voraus erfasst wird, confirmSepaDebitSetup, um das Abonnement zu bestätigen und eine PaymentMethod SEPA-Lastschrift zu erstellen. Fügen Sie den Namen und die E-Mail-Adresse des Kunden/der Kundin in die Eigenschaften payment_method.billing_details ein.
PaymentSetup.js
// Define stripe with your publishable keyvar stripe =Stripe('pk_test_1234');// Get the IBAN information from your elementvar iban = document.getElementById('iban-element');const form = document.getElementById('payment-form');const accountholderName = document.getElementById('accountholder-name');const email = document.getElementById('email');
form.addEventListener('submit',async(event)=>{
event.preventDefault();// Create the subscriptionconst res =awaitfetch('/create-subscription',{
method:'POST',});const{type, clientSecret}=await res.json();const confirmIntent = type ==='setup'? stripe.confirmSepaDebitSetup: stripe.confirmSepaDebitPayment;const{error}=awaitconfirmIntent({
clientSecret,{
payment_method:{
sepa_debit: iban,
billing_details:{
name: accountholderName.value,
email: email.value,},},}});});
Sie müssen Ihren Kund/innen eine gespeicherte Zahlungsmethode hinzufügen, damit zukünftige Zahlungen erfolgreich sind. Hierfür wird die zuvor erfasste Zahlungsmethode auf das übergeordnete Customer-Objekt und als Standard-Zahlungsmethode für Rechnungen festgelegt:
SEPA-Lastschriftzahlungen werden nie automatisch wiederholt, auch dann nicht, wenn Sie einen Wiederholungsplan für andere Zahlungsmethoden konfiguriert haben.
Sie können Ihre Integration unter Verwendung der unten aufgeführten IBANs testen. Die Zahlungsmethodendetails werden für jede IBAN erfolgreich erfasst, weisen jedoch bei Abbuchung ein unterschiedliches Verhalten auf.
Test-IBANs
Kontonummer
Beschreibung
BE62510007547061
Der Status des PaymentIntent wechselt von processing zu succeeded.
BE78510007547064
Der Status des PaymentIntent wechselt nach mindestens drei Minuten von processing zu succeeded.
BE68539007547034
Der Status des PaymentIntent wechselt von processing zu requires_payment_method.
BE51510007547065
Der Status des PaymentIntent wechselt nach mindestens drei Minuten von processing zu requires_payment_method.
BE08510007547063
Der Status des PaymentIntent wechselt von processing zu succeeded, es wird jedoch sofort eine Zahlungsanfechtung erstellt.
BE90510000343434
Die Zahlung schlägt mit dem Fehlercode charge_exceeds_source_limit fehl, da der Zahlungsbetrag den wöchentlichen Grenzwert für das Zahlungsvolumen überschreitet.
BE52510000121212
Die Zahlung schlägt mit dem Fehlercode charge_exceeds_weekly_limit fehl, da der Zahlungsbetrag das Transaktionsvolumenlimit des Kontos überschreitet.
BE90510002222227
Die Zahlung schlägt mit dem Fehlercode insufficient_funds fehl.