Zahlungs-Gateways erstellen

Aus sourceDESK Wiki
Wechseln zu: Navigation, Suche

Sie können in das System weitere modulare Zahlungs-Gateways einbauen, über welche Zahlungen Ihrer Kunden abgewickelt werden können. Die Integration ist recht simpel möglich.

Grundaufbau

Im Ordner modules/payment liegen alle Zahlungs-Gateways. Jedes Zahlungsgateway hat dort einen Ordner mit einem Namen für dieses (nur Kleinbuchstaben; natürlich können Abkürzungen verwaltet werden). Dieser kurze Name wird im Folgenden als Kurzname bezeichnet.

In einem Ordner eines Gateways wiederum muss sich eine Datei mit dem Kurznamen des Gateways und der Endung .php befinden. Diese Datei stellt die Hauptdatei des Gateways dar. Außerdem muss ein Ordner language für den Support mehrerer Sprachen existieren. Für Smarty-Templates kann zum Beispiel ein seperater Ordner templates angelegt werden.

Aufbau der Hauptdatei

In der Hauptdatei muss eine Klasse definiert werden, welche einen einmaligen Namen tragen und die abstrakte Klasse PaymentGateway erweitern muss.

class PayPalPG extends PaymentGateway {

Es wird eine statische Variable benötigt, welchen den Kurznamen der Klasse enthält (theoretisch darf dieser auch abweichen, der Übersichtlichkeit halber sollte dieser aber gleich sein):

public static $shortName = "paypal";

Für jede Gateway-Klasse sollte ein eigener Konstruktor geschrieben werden. Dieser muss den Konstruktor von PaymentGateway (der Oberklasse) aufrufen und sollte die aktuelle Sprache festsetzen. Außerdem müssen die Sprachdateien geladen werden. Wir lernen hier den Ausnahmen-Typ ModuleException kennen. Ein Wurf einer solchen Ausnahme wird das Modul nicht laden sondern ignorieren.

public function __construct($language) {
	parent::__construct(self::$shortName);
	$this->language = $language;
 
        if(!include(dirname(__FILE__) . "/language/$language.php"))
        	throw new ModuleException();
        if(!is_array($addonlang) || !isset($addonlang["NAME"]))
        	throw new ModuleException();
 
        $this->lang = $addonlang;
}

Einstellungen

Es können Einstellungen definiert werden, die durch den Administrator zu tätigen sind, wenn er das Modul in der Administration konfiguriert. Nachfolgend sehen Sie, wie Sie diese Einstellungen im Konstruktor der Gateway-Klasse definieren.

$this->options = Array(
	"text" => Array("type" => "text", "name" => "Textfeld", "default" => "Standard", "placeholder" => "Hier irgendwas eingeben", "help" => "Das steht drunter"),
	"check" => Array("type" => "checkbox", "description" => "Daneben", "default" => true, "help" => "Das steht drunter"),
);

Sie sehen hier ein multidimensionales Array. Als Key der Arrays in der zweiten Dimension wird ein Options-Name verwendet, dieser ist beliebig. Der Wert ist wiederum ein Array. Darin befindet sich u.a. die Eigenschaft type, sie kann text (Textfeld) oder checkbox sein und bestimmt, welches Steuerelement angezeigt wird. Die weiteren Parameter sind optional, wobei natürlich zumindest name bzw. description angegeben werden sollte.

Der Zugriff auf die getätigten Einstellungen kann dann innerhalb der Klasse recht simpel erfolgen mit:

$this->settings[$key];

Zahlungs-Log

Es gibt ein Log-System für Zahlungs-Gateways, welches für das Logging von IPN-Anfragen gedacht ist. Diese Funktion ist jedoch standardmäßig deaktiviert und muss pro Gateway aktiviert werden.

$this->log = true;

Das Einfügen muss manuell mit einer Datenbank-Query erfolgen, als Vorlage können Sie diese verwenden:

$db->query("INSERT INTO " . $CFG['DB']['PREFIX'] . "payment_logs (`data`, `log`, `time`, `gateway`) VALUES ('$data', '$log', " . time() . ", '" . self::$shortName . "')");

Als $data verwenden Sie am besten die eingegeben Rohdaten, indem Sie zum Beispiel $_POST dumpen. Achten Sie hierbei unbedingt auf die Entfernung langer oder unnötiger Werte, um das Zahlungs-Log im Adminbereich nicht zu sprengen. Für $log ist normalerweise ein eigener String vorgesehen, der die Aktionen des IPN-Handlers beschreibt. (Zeilenumbruch durch \n) Es eignet sich hierfür eine try-catch-Struktur.

Cashbox

...

Sprachsystem

...

Weiteres

Es ist möglich, im Modal zur Gateway-Konfiguration unter den Einstellungen einen Text anzuzeigen. Dieser kann zum Beispiel wichtige Hinweise zur Konfiguration oder Warnungen enthalten. Die Definition sollte wie folgt im Konstruktor der Gateway-Klasse erfolgen:

$this->admin_warning = "Warntext";