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>| Zeile | Bedeutung |
|---|---|
<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.
| Attribut | Wirkung |
|---|---|
data-lang | Setzt die Sprache fest, zum Beispiel de. Ohne Angabe wird die Sprache der Gastgeber-Seite übernommen. |
data-amount | Wählt einen Betrag vor |
data-payment-type | Wählt die Spendenart vor: onetime oder recurring |
data-interval | Wä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 }
});| Zustand | Bedeutung |
|---|---|
success | Die Spende war erfolgreich |
processing | Die Zahlung ist unterwegs und wird noch bestätigt |
failed | Die 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
| Beobachtung | Ursache und Lösung |
|---|---|
| Es erscheint nichts | Prü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. schon | Die Freigabe gilt exakt für die eingetragene Adresse. Trage beide Varianten ein. |
| Formular erscheint nur ohne Werbeblocker | Datenschutz-Erweiterungen entfernen die Herkunftsangabe der Anfrage. Prüfe die Seite in einem privaten Fenster ohne Erweiterungen. |
| Formular bleibt leer, Konsole meldet blockierte Ressourcen | Die Content-Security-Policy der Gastgeber-Seite blockiert das Skript oder die Formatierung. Ergänze die Einträge oben. |
| Apple Pay fehlt | Die Domain ist im Stripe-Konto nicht als Web-Domain hinterlegt. Karten funktionieren trotzdem. |
| Falsche Sprache | Die Gastgeber-Seite meldet eine andere oder keine Sprache. Setze data-lang fest. |
Updated 3 days ago
