So ermittelst du vollautomatisch, ob jemand bei Digistore24 über deinen Affiliatelink bestellt hat und lieferst deinen Bonus aus

Du kennst es vielleicht. Du findest ein richtig cooles Produkt auf dem Digistore24-Marktplatz, welches du gerne weiterempfehlen würdest.

Jetzt überlegst du dir wie du deine Kontakte und Besucher davon überzeugen kannst unbedingt über deinen Affiliatelink zu kaufen.

Am besten eignet sich dazu ein passender Bonus.

Ein Problem gibt es da aber schon. Wie kannst du prüfen, ob jemand über deinen Affiliatelink gekauft und tatsächlich bezahlt hat?

Viele tun nun folgendes und davon rate ich dir ab!

Sie sprechen die Produktverkäufer an und bitten sie darum die Käuferdaten zu übermitteln, damit sie ihre Boni ausliefern können.

Dabei gibt es jetzt mehrere Probleme:

  • Das ist nicht zulässig, weil die Kundendaten nicht einfach so an Dritte weitergegeben werden dürfen.
  • Vielleicht hat jemand über dich gekauft, aber nichts von deinem Bonus gewusst und ist nun (negativ) überrascht, dass du ihn deshalb unerwartet kontaktierst.
  • Kaum ein Vendor wird hier mitmachen und dir regelmäßig manuell Kundendaten zukommen lassen. Nichts für Evergreen-Fans.
  • Für dich ist es einfach nur lästig jedes Mal ggf. mehrere Vendoren kontaktieren zu müssen und um ihre Kundendaten zu bitten.
  • Du weißt nicht, ob du dich auf die übermittelten Daten wirklich verlassen kannst. Vielleicht sind ja Kunden dabei, die ihre Bestellung bereits storniert haben und du daher keine Provision erhalten hast.

Man könnte hier jetzt sicher noch weitere Stolpersteine finden. Das lassen wir aber und machen lieber weiter.

Du fragst dich jetzt: Wie lösen wir all diese Probleme und das am besten noch DSGVO-konform?

Gute Frage! 😉

Natürlich müssen wir dafür ein wenig programmieren. Aber keine Sorge, gemeinsam schaffen wir das schon! 💪

Den Lösungsweg vorab gedanklich grob skizzieren

Viele Wege führen nach Rom. Doch hier müssen wir uns für einen Weg entscheiden.

Ich gebe hier jetzt einfach einen Weg vor, den ich für sehr einfach in der Umsetzung halte. Zumindest im Vergleich zu anderen Lösungsansätzen.

Wenn wir jetzt über Automatisierung nachdenken, dann denken wir hier vor allem daran, dass etwas für uns vollautomatisch laufen soll.

Das ist also nun der Weg, den wir gehen werden.

Wir werden ein Formular erstellen, in das ein Interessent seine Digistore24 Bestell-ID eingeben kann. Es besteht letztendlich nur aus einem Eingabefeld und einem Sende-Button.

Du musst also deinen Interessenten kommunizieren, dass sie nach ihrer Bestellung über deinen Link die Seite mit dem Formular besuchen und ihre Bestell-ID eingeben müssen, um deinen Bonus zu erhalten.

Alles um das Formular herum und das Formular selbst kannst du später gestalten wie du möchtest.

Sobald jemand seine Bestell-ID in das Formular eingegeben und gesendet hat, wird geprüft, ob eine Bestellung mit dieser ID vorliegt, die über dich getätigt wurde.

Außerdem wird auch geprüft, ob die Bestellung vollständig bezahlt wurde.

Wurde über dich bestellt und vollständig bezahlt, wird der Interessent auf die Seite mit dem Bonus weitergeleitet.

Man kann hier natürlich eine noch viel umfangreichere Lösung programmieren. Jedoch wird es dann zu individuell, umfangreich und kompliziert.

Lass es uns möglichst einfach halten. 😉

Es sollte am Ende ungefähr so funktionieren:

digistore24 s2s postback skript entwurf

Das brauchst du für die Umsetzung

Digistore24

Du brauchst einen Affliate-Account bei Digistore24.

Außerdem brauchst du eine genehmigte Partnerschaft mit dem Produkthersteller und natürlich den entsprechenden Promo- bzw. Contentlink.

Für die automatische Übertragung der notwendigen Daten nutzen wir das S2S-Postback-Verfahren, welches dir sowohl als Affiliate als auch Vendor in Digistore24 zur Verfügung steht.

Webhosting

Da wir hier ein PHP-Skript irgendwo hochladen müssen, brauchst du ein Webhosting, auf dem du PHP ausführen kannst.

Das bekommst du heutzutage an jeder Ecke. Sollte also kein allzu großes Problem sein.

Falls du mit WordPress arbeitest, dann check auch mal unser WordPress-Hosting ab.

Fangen wir an 🚀

Bevor wir in die Programmierung einsteigen, definieren wir ein paar Konstanten, die wir in unserem Skript verwenden.

Erstelle erstmal ein neues Verzeichnis auf deinem Computer und nenne es ds24-s2s-postback. Sollte dann so aussehen:

ds24 s2s postback verzeichnis

Rufe jetzt am besten vscode.dev in deinem Browser auf. Es öffnet sich ein voll funktionsfähiger Editor. Klicke links auf den blauen Button „Open Folder“ und wähle dein gerade erstelltes Verzeichnis aus.

vscode verzeichnis oeffnen

Nicht erschrecken! Du musst deinem Browser noch erlauben, dass er Dateien an vscode.dev senden darf. Das kannst du ruhig bestätigen.

Du kannst natürlich auch einen anderen Editor benutzen, aber ich fahre in dieser Anleitung jetzt mit Visual Studio Code (vscode.dev) fort.

config.php

Erstelle im Editor eine neue Datei und nenne sie config.php:

vscode datei erstellen

Füge in diese Datei den folgenden Code ein:

config.php
<?php

/**
 * Auf diese Seite wird weitergeleitet, wenn über deinen Link gekauft wurde.
 */
define('SUCCESS_URL', 'https://meine-webseite.de/bonus');

/**
 * Auf diese Seite wird weitergeleitet, wenn NICHT über deinen Link gekauft wurde.
 */
define('ERROR_URL', 'https://meine-webseite.de/kein-bonus');

/**
 * Name der Datenbankdatei.
 * Solltest du so ändern, dass niemand auf den Namen kommt.
 * Beispiel: 09sdzf8g.db
 */
define('DB_FILE', 's2s.db');

In Zeile 6 gibst du die URL zu deiner Bonusseite an und in Zeile 11 die URL zu der Fehlerseite.

Den Dateinamen in Zeile 18 solltest du so ändern, dass niemand einfach so darauf kommt. Das verhindert später, dass jemand die Datei auslesen kann, der diese Anleitung auch kennt. Und somit ggf. deinen Bonus abgreift, obwohl er dazu nicht berechtigt ist.

Diese Datei ist die einzige Datei, die du vom gesamten Skript anpassen musst. Den Rest habe ich schon so umgesetzt, dass du eigentlich nur noch Kopieren und Einfügen musst. 😉

postback.php

Damit unser Skript über neue Verkäufe informiert wird, müssen wir Digistore24 die Möglichkeit geben unser Skript darüber zu benachrichtigen.

Erstelle also eine neue Datei, nenne sie postback.php und füge folgenden Code ein:

postback.php
<?php

require_once('config.php');

if(isset($_GET['order_id']) && isset($_GET['billing_status'])) {
    $db_data = file_exists(DB_FILE) ? json_decode(file_get_contents(DB_FILE), true) : [];
    $db_data[$_GET['order_id']] = $_GET['billing_status'];
    file_put_contents(DB_FILE, json_encode($db_data), LOCK_EX);
}

Diese Datei empfängt alle Bestellungen, die du für andere Vendoren generiert hast.

Die übermittelten Daten müssen nun irgendwo gespeichert werden, weil sie sonst verloren wären und wir sie später mit der Eingabe im Formular nicht abgleichen können.

Das geschieht in der Datei s2s.db, die auch schon in der config.php eingetragen ist. Die DB-Datei musst du nicht selbst erstellen. Sie wird automatisch erstellt, sobald die erste Bestellung erfasst wurde.

Ich habe mich hier für eine einfache Datei entschieden, um es nicht noch komplizierter zu machen. Normalerweise würde ich dafür eine MySQL-Datenbank nutzen. In diesem Fall reicht aber eine einfache Datei vollkommen aus.

Es werden nur die Bestell-ID und der aktuelle Zahlungsstatus gespeichert. Mehr brauchen wir nicht.

check.php

Jetzt können wir schon die Daten von Digistore24 empfangen und auch speichern.

Nun muss noch irgendwie geprüft werden, ob ein Kunde berechtigt ist deinen Bonus zu erhalten oder nicht.

Erstelle eine weitere Datei, nenne sie check.php und füge diesen Code ein:

check.php
<?php

require_once('config.php');

if(!empty($_POST['order_id'])) {
    $order_id = filter_var($_POST['order_id'], FILTER_SANITIZE_STRING);
    $db_data = file_exists(DB_FILE) ? json_decode(file_get_contents(DB_FILE), true) : [];

    if(array_key_exists($order_id, $db_data) && ($db_data[$order_id] == 'completed' || $db_data[$order_id] == 'paying')) {
        result(SUCCESS_URL);
    }
    
    result();
}

function result($redirect = ERROR_URL) {
    $result = [
        'redirect' => $redirect
    ];

    header('Content-Type: application/json; charset=utf-8');
    die(json_encode($result));
}

Dieses Skript empfängt die Eingabe aus dem Formular, also die eingegebene Bestell-ID.

Dann wird erstmal geprüft, ob diese Bestell-ID überhaupt in unserer DB-Datei existiert. Falls nicht, heißt das, dass der Kunde nicht über deinen Link gekauft hat.

Sollte die Bestell-ID bekannt sein, dann wird noch geprüft, ob die Bestellung auch vollständig bezahlt wurde oder bei einer Abo-/Ratenzahlung der Zahlungsstatus noch aktiv ist.

Je nachdem, was bei diesem Check herauskommt, wird an unser Formular die Info zurückgegeben auf welche Seite weitergeleitet werden soll.

check.js

Ich habe dir gerade gesagt, dass die check.php Daten von unserem Formular empfängt und auch wieder zurücksendet.

Aber wie senden wir die Daten überhaupt an die check.php?

Das realisieren wir mit ein bisschen JavaScript.

Erstelle jetzt eine neue Datei mit dem Namen check.js und füge diesen Code ein:

check.js
document.addEventListener('DOMContentLoaded', function() {
    let gosuccess_s2s_check_form = document.getElementsByName('gosuccess_s2s_check')[0];

    gosuccess_s2s_check_form.addEventListener('submit', function(e) {
        e.preventDefault();

        let gosuccess_s2s_order_id = document.getElementsByName('gosuccess_s2s_order_id')[0].value;
        let xhr = new XMLHttpRequest();

        xhr.open('POST', gosuccess_s2s_check_form.action, true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');        
        xhr.onreadystatechange = function() {
            if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
                location.href = JSON.parse(xhr.responseText).redirect;
            }
        }
        xhr.send('order_id='+gosuccess_s2s_order_id);
    });
});

Dieser JavaScript-Code gehört auf dieselbe Seite, wo du auch das Formular – zu dem wir als nächstes kommen – einfügst.

Der Code fängt die Daten beim Senden ab und schickt sie erstmal an die check.php, wo die Prüfung der Bestell-ID stattfindet.

Es wird solange gewartet, bis eine Antwort zurückkommt und anschließend wird auf die URL weitergeleitet, die die check.php zurückgegeben hat.

Sollte nur ein paar Millisekunden dauern. Die Weiterleitung findet also gefühlt sofort statt.

Alles speichern und hochladen

Bei dir sollte es jetzt so aussehen:

vscode verzeichnis ds24 s2s postback inhalt

Achte nicht auf die form.html. Diese Datei sollte bei dir nicht enthalten sein. Ich habe sie dort nur, um den HTML-Quelltext für das noch folgende Formular zwischenzuspeichern.

Du kannst nun alles Speichern. Das gesamte Skript ist soweit fertig.

vscode alles speichern

Anschließend lädst du das gesamte Verzeichnis ds24-s2s-postback auf deinen Webspace hoch. Das Skript muss unter derselben Domain gehostet werden, wo du es auch verwenden möchtest!

Das Formular

Wir haben es nun fast geschafft. Jetzt fehlen nur noch zwei Dinge. Das Formular, wo der Kunde seine Bestell-ID eingeben kann und natürlich noch die S2S-Postback-Anbindung an Digistore24.

Das Formular habe ich extrem einfach gehalten. Du kannst es selbstverständlich so gestalten wie du möchtest. Ich habe es in keiner Weise gestylt, weil sowieso jede Webseite anders aussieht.

Aber mit ein wenig CSS kannst du das Formular zu 100% an deine Webseite anpassen.

Füge folgenden Code an die Stelle ein, wo du das Formular gerne haben möchtest:

HTML
<form method="post" action="https://meine-webseite.de/ds24-s2s-postback/check.php" name="gosuccess_s2s_check">
    <input type="text" placeholder="Digistore24 Bestell-ID" name="gosuccess_s2s_order_id" required>
    <button type="submit">Zum Bonus</button>
</form>

<script src="https://meine-webseite.de/ds24-s2s-postback/check.js"></script>

Hier musst du das „action“-Attribut im Formular anpassen. Trage dort die URL zu deiner check.php ein.

Du siehst, dass nicht nur das Formular dabei ist, sondern auch unsere check.js eingebunden wurde. Die check.js muss auf derselben Seite eingebunden werden wie das Formular.

Nachdem du das Formular auf deiner Webseite eingebunden hast, wechseln wir zu Digistore24.

S2S-Postback einrichten

Log dich in deinen Digistore24-Account ein und wechsle in die „Affiliate“-Ansicht, falls noch nicht geschehen:

digistore24 ansicht wechseln

Gehe dann im Menü auf Konto -> S2S-Postback:

digistore24 konto s2s postback

Und klicke auf den blauen Button „Neue S2S-Postback-Anbindung hinzufügen“:

digistore24 s2s postback anbindung hinzufuegen

Jetzt kannst du folgende Einstellungen vornehmen:

digistore24 s2s postback einstellungen

Name

Vergebe einen Namen, der dir später dabei hilft diese Anbindung wiederzufinden. Den Namen kannst nur du sehen.

Affiliate-Partnerschaften

Wähle hier alle Produkte aus, für die du deinen Bonus anbieten möchtest.

Für Bestell-Ereignisse

Wähle alle Ereignisse aus, damit auch Rückgaben und Rücklastschriften erfasst werden.

Postback-Url

Hier gibst du die URL zur postback.php an.

Also z.B. so:

https://meine-webseite.de/ds24-s2s-postback/postback.php

Dann musst du noch die GET-Parameter hinzufügen, damit Daten übertragen werden können und unser Skript etwas zutun hat.

Das sieht dann so aus:

https://meine-webseite.de/ds24-s2s-postback/postback.php?order_id={order_id}&billing_status={billing_status}

Du siehst, nur die Bestell-ID und der Zahlungsstatus werden an unser Skript übergeben.

Klicke anschließend auf den Button „Speichern“.

S2S-Postback testen

Der Test besteht aus zwei Teilen.

Verbindung testen

Zuerst solltest du testen, ob die Verbindung zu deinem S2S-Postback-Skript steht. Dazu klickst du einfach auf den blauen Button „Verbindung testen“.

Wenn alles in Ordnung ist, kann es weitergehen.

Sollte dir Digistore24 sagen, dass ein Fehler vorliegt, dann musst du dein Skript noch einmal prüfen. Vielleicht findest du auch eine error_log-Datei im ds24-s2s-postback-Verzeichnis. Die Datei solltest du öffnen und dir die Fehlermeldung(en) ansehen, um den Fehler besser lokalisieren zu können.

Wir nehmen aber an, dass alles geklappt hat und machen mit dem zweiten Teil weiter. 😉

Formular testen

Inzwischen solltest du das Formular auf deiner Webseite eingebunden haben. Bei mir sieht es so aus:

digistore24 s2s postback bonus formular

Durch den Verbindungstest im ersten Teil wurde die Bestell-ID ABCD1234 in der DB-Datei gespeichert. Diese ID kannst du nun zum Testen des Formulars nutzen.

Du solltest anschließend zur Bonusseite weitergeleitet werden.

Kehre zu deinem Formular zurück und gebe irgendeine andere ID ein und du solltest zur Fehlerseite weitergeleitet werden.

Zum Abschluss noch ein paar Hinweise

Die hier vorgestellte Lösung ist eine sehr einfache. Natürlich kann man noch viel mehr umsetzen.

Du solltest beachten, dass es Verkäufer gibt, die in ihren Partnerprogramm-Regeln das Werben mit Boni verbieten.

Sei also fair, bleib sauber und verstoße nicht gegen solche Regeln. ✌️