Widget einbetten

Diese Seite richtet sich an die Person, die die Gastgeber-Seite betreut. Voraussetzung ist ein Kampagnenlink mit aktiviertem Widget und eine freigegebene Domain, siehe Spenden-Widget und Erlaubte Domains.


Der Einbettungscode

Den fertigen Code findest du im Admin unter Fundraising-Hub → Kampagnenlinks → Kampagnenlink öffnen → Widget (Einbettung) → Einbettungscode. Ein Klick auf Code kopieren legt ihn in die Zwischenablage.

<div data-soulclick-widget data-campaign-id="pk_widget_..."></div>
<script src="https://deine-plattform.ch/static/js/soulclick-widget.min.js?v=1" defer></script>
ZeileBedeutung
<div>Platzhalter an genau der Stelle, an der das Formular erscheinen soll
<script>Lädt das Widget. Eine Zeile pro Seite genügt, auch wenn mehrere Formulare eingebunden sind.

Der Wert von data-campaign-id (pk_widget_...) ist der öffentliche Schlüssel des Kampagnenlinks. Er ist kein Passwort und darf im Quelltext stehen, siehe Erlaubte Domains.

💡

Das Skript lädt alle weiteren Bestandteile selbst nach: das Formular, die Formatierung und, falls nötig, die Zahlungsbibliothek. Du musst nichts weiter einbinden.


Optionale Attribute

Alle Attribute werden auf dem <div> gesetzt und sind freiwillig.

AttributWirkung
data-langSetzt die Sprache fest, zum Beispiel de. Ohne Angabe wird die Sprache der Gastgeber-Seite übernommen.
data-amountWählt einen Betrag vor
data-payment-typeWählt die Spendenart vor: onetime oder recurring
data-intervalWählt das Intervall einer Dauerspende in Monaten vor: 1, 3, 6 oder 12
<div data-soulclick-widget
     data-campaign-id="pk_widget_..."
     data-lang="fr"
     data-payment-type="recurring"
     data-interval="3"
     data-amount="25"></div>

Vorauswahl über die Adresse der Seite

Wird die Gastgeber-Seite mit diesen Parametern aufgerufen, gelten sie für genau diesen Besuch und haben Vorrang vor den Attributen im Code:

https://beispiel.org/spenden/?scw-amount=25&scw-payment_type=recurring&scw-interval=3

So übergibst du z.B. von einem Spenden-Teaser auf deiner eigenen Webseite, Informationen wie Spendenbeträge und Intervalle ans Widget weiter.

Eine Vorauswahl kann nur unter den Optionen wählen, die im Kampagnenlink konfiguriert wurden. Unbekannte Werte werden ignoriert oder im Fall von Spendenbeträgen ans Freibetrag-Feld weitergeben. Es wird keine Fehlermeldung ausgegeben.

⚠️

Bei Dauerspenden gelten die hinterlegten Beträge für das kürzeste angebotene Intervall. Längere werden hochgerechnet: stehen «vierteljährlich» und «jährlich» zur Auswahl, werden aus 25 pro Quartal 100 pro Jahr. Sind alle Intervalle im Angebot, ist das kürzeste der Monat. Übergib deshalb immer den hinterlegten Betrag, also 25. Ein freier Betrag wird nie multipliziert und genau so belastet, wie er übergeben wurde.


Mehrere Widgets auf einer Seite

Mehrere <div>-Platzhalter auf derselben Seite sind erlaubt, auch mit unterschiedlichen Kampagnenlinks. Das <script> wird trotzdem nur einmal eingebunden.

Bei Zahlungen mit Weiterleitung kann die Erfolgsmeldung nach der Rückkehr beim falschen Formular erscheinen. Wo das stört, bettest du pro Seite nur ein Widget ein.


Widget später einbinden

Erscheint das Formular erst nach einer Aktion, zum Beispiel in einem Popup oder in einer Single-Page-Anwendung, wird es per Aufruf eingebunden:

SoulclickWidget.run("#spenden", {
  campaignId: "pk_widget_...",
  lang: "de",
  onResult: (detail) => console.log(detail),
});

Ergebnis der Spende auswerten

Nach Abschluss meldet das Widget das Ergebnis an die Gastgeber-Seite. Damit lassen sich eigene Dankestexte einblenden oder Tracking-Ereignisse auslösen.

document
  .querySelector("[data-soulclick-widget]")
  .addEventListener("soulclick:donation", (event) => {
    console.log(event.detail); // { state, orderId }
  });
ZustandBedeutung
successDie Spende war erfolgreich
processingDie Zahlung ist unterwegs und wird noch bestätigt
failedDie Zahlung ist fehlgeschlagen

Zusätzlich meldet das Widget soulclick:ready, sobald das Formular bereit ist, und soulclick:error, wenn es nicht geladen werden konnte.

Alternativ kann eine Rückrufmethode gesetzt werden, entweder pro Widget über onResult im Aufruf oben oder global über window.soulclickWidget = { onResult: (detail) => {} }.

Soll die spendende Person stattdessen auf eine eigene Dankesseite geleitet werden, trägst du diese im Admin unter Success-Weiterleitung ein.


Content-Security-Policy

Setzt die Gastgeber-Seite eine strikte Content-Security-Policy, müssen folgende Quellen erlaubt sein, sonst wird das Formular nicht geladen. <soulclick-origin> steht für die Adresse deiner Plattform.

script-src  'self' <soulclick-origin> https://js.stripe.com;
style-src   'self' <soulclick-origin> 'unsafe-inline' https://fonts.googleapis.com;
connect-src 'self' <soulclick-origin> https://api.stripe.com;
frame-src   https://js.stripe.com https://hooks.stripe.com;
img-src     'self' <soulclick-origin> data:;
font-src    <soulclick-origin> <medien-origin> https://fonts.gstatic.com;

Verwendet deine Plattform eine hochgeladene Schriftart, wird diese von der Medienablage ausgeliefert. Deren Adresse (<medien-origin>) muss dann ebenfalls unter font-src stehen. Bei Payrexx sind keine weiteren Einträge nötig, weil die Zahlung auf der Seite von Payrexx stattfindet.


Wenn das Widget deaktiviert ist

Bleibt der Code auf der Gastgeber-Seite stehen, nachdem das Widget oder der Kampagnenlink deaktiviert wurde, erscheint an dieser Stelle einfach nichts. Besuchende sehen keine Fehlermeldung, in der Entwicklerkonsole steht ein Hinweis.


Fehlerbehebung

BeobachtungUrsache und Lösung
Es erscheint nichtsPrüfe der Reihe nach: Ist Widget aktiviert gesetzt? Steht der Kampagnenlink auf Aktiv? Ist die Domain unter Erlaubte Domains eingetragen?
Auf www. erscheint nichts, ohne www. schonDie Freigabe gilt exakt für die eingetragene Adresse. Trage beide Varianten ein.
Formular erscheint nur ohne WerbeblockerDatenschutz-Erweiterungen entfernen die Herkunftsangabe der Anfrage. Prüfe die Seite in einem privaten Fenster ohne Erweiterungen.
Formular bleibt leer, Konsole meldet blockierte RessourcenDie Content-Security-Policy der Gastgeber-Seite blockiert das Skript oder die Formatierung. Ergänze die Einträge oben.
Apple Pay fehltDie Domain ist im Stripe-Konto nicht als Web-Domain hinterlegt. Karten funktionieren trotzdem.
Falsche SpracheDie Gastgeber-Seite meldet eine andere oder keine Sprache. Setze data-lang fest.

Did this page help you?