Payment Modul Klasse für modified programmieren¶
Textstatus - Entwurf
Status: 2 von 5 - Erster Entwurf: Erste Ausformulierung einiger Informationen.
Konzept¶
Wenn du weitere Informationen zur Entwicklung von Payment-Modulen suchst, findest du im modified Forum unter www.modified-shop.org/forum/index.php?topic=21701 hilfreiche Ressourcen.
Um einen umfassenden Überblick zu erhalten, empfehlen wird dir, diese Dokumentation zu lesen.
Aufbau¶
Ein Zahlungs- oder Payment-Modul folgt dem Aufbauschema von Modul Klassen. Allerdings erfordert es zusätzliche Methoden, die von modified während des Bestellablaufs aufgerufen werden können.
Zur Erstellung einer Payment-Modulklasse legst du eine Moduldatei im Verzeichnis /includes/modules/payment/
an. Die zugehörigen Sprachdateien befinden sich in /lang/<LANGUAGE>/modules/payment/
.
├── includes
│ └── modules
│ └── payment
│ └── payment_mc_my_module.php
└── lang
└── <LANGUAGE>
└── modules
└── payment
└── payment_mc_my_module.php
Für einen klaren Überblick über alle verfügbaren Modulklassen und deren erweiterbare Methoden stehen Musterdateien auf github.com/RobinTheHood/class-extensions und in unserer Klassen und Schnittstellenfeferenz zur Verfügung.
Für eine konkrete Umsetzung eines Payment-Moduls und aller dazugehörigen Dateien kannst du einen Blick auf unser Stripe-Modul unter github.com/RobinTheHood/modified-stripe werfen. Dieses Beispiel bietet eine praktische Referenz, um die Struktur und die benötigten Dateien für ein funktionierendes Payment-Modul zu verstehen. Dieses Beispiel dient als praktische Referenz und bietet eine umfassende Dokumentation des Quellcodes, um Entwicklern bei der Verständnisbildung zu helfen.
Der Bestellablauf¶
Hier ist eine detaillierte Übersicht des Bestellablaufs und der Reihenfolge, wie die Payment-Modul-Methoden vom modified eCommerce Shop System abgearbeitet werden:
Schritt | Name | Controller-Datei |
---|---|---|
1 | shipping |
/checkout_shipping.php |
2 | payment |
/checkout_payment.php |
3 | confirmation |
/checkout_confirmation.php |
4a | process |
/checkout_process.php |
4b | iFrame |
/checkout_payment_iframe.php (optional) |
5 | success |
/checkout_success.php |
1. checkout_shipping.php¶
In Schritt shipping
wird dem Käufer eine Liste mit Versandoptionen angezeigt. Hier kann er die bevorzugte Versandoption auswählen. In diesem Schritt greifen Zahlungsmodule nicht in den Bestellablauf ein.
2. checkout_payment.php¶
In Schritt payment
wird dem Käufer eine Liste mit verschiedenen Zahlungsoptionen angezeigt. Hier kann er die bevorzugte Zahlungsoption auswählen und erforderliche Informationen in die Eingabemaske eingeben (z. B. IBAN, Kreditkartennummer usw.).
Methoden im Zahlungsmodul:
1. selection()
- Rendert die Eingabemaske.
1. get_error()
- Liefert Fehlermeldungen, z. B. bei fehlerhafter Eingabe.
1. javascript_validation()
3. checkout_confirmation.php¶
In Schritt confirmation
wird dem der Käufer eine Übersicht aller während des Kaufprozesses gesammelten Daten, einschließlich Warenkorb, Rechnungs- und Lieferadresse, Versandart und Zahlungsoptionen angezeigt. Der Käufer wird aufgefordert, diese Daten zu bestätigen, um den Kauf abzuschließen.
Methoden im Zahlungsmodul:
1. update_status()
- überprüft, ob die Zahlungsoption möglich ist
1. pre_confirmation_check()
1. confirmation()
1. process_button()
- zeigt zusätzliche Daten auf der Confirmation an oder leitet Daten per POST reqeust an process weiter
4a. checkout_process.php¶
In Schritt `process`` werden die während des Kaufprozesses gesammelten Daten verarbeitet.
Methoden im Zahlungsmodul:
1. before_process()
1. payment_action()
1. before_send_order()
1. after_process()
4b. checkout_payment_iframe.php (optional)¶
Methoden im Zahlungsmodul:
1. iframeAction()
5. checkout_success.php¶
In Schritt success
erhält der Käufer eine Bestätigung über den erfolgreichen Abschluss seiner Bestellung.
Methoden im Zahlungsmodul:
1. success()
Payment Klassen Methoden¶
In diesem Abschnitt gehen wir auf alle Methoden im Detail ein.
update_status()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_confirmation.php |
Beschreibung
Diese Methode wird vom System aufgerufen, um zu kontrollieren, ob die Zahlungsart (weiterhin) zur Verfügung steht. Z. B. können Bedingungen, wie Warenwert, Land, Kundenstatus etc. dazu führen, dass eine Zahlart nicht zur Verfühgung stehen soll. Oft wird dazu auf $order
oder $xtPrice
per global
Statement zugegriffen. Als Ergebnis kann die Methode die Klassenvariable $this->enabled
auf true
oder false
setzen.
Zeitpunkt der Verwendung
Die Methode wird zu Beginn der checkout_confirmation.php
aufgerufen.
Beispiel
public function update_status(): void
{
global $order;
if ($order->billing['country']['id'] === 1) {
$this->enabled = true;
} else {
$this->enabled = false;
}
}
In diesem Beispiel wird die Zahlungsart nur dann aktiviert, wenn das Land der Rechnungsadresse die ID 1 hat. Andernfalls wird die Zahlungsart deaktiviert. Beachte, dass du auf verschiedene Parameter wie $order
, $xtPrice
oder andere globale Variablen zugreifen kannst, um die Bedingungen für die Aktivierung der Zahlungsart zu definieren.
pre_confirmation_check()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_confirmation.php |
Beschreibung
// TODO: Die Method macht ...
Anmerkung
Einige Module geben bei dieser Methode als Rückgabewert boolean
true
oder false
zurück. Das ist jedoch nicht nötig, da vom modified Core kein Rückgabewert von der Methode erwartet oder verarbeitet wird.
Zeitpunkt der Verwendung
Die Methode wird in checkout_confirmation.php
aufgerufen.
Beispiel
selection()¶
Option | Value |
---|---|
optional | 🚫 |
caller | checkout_payment.php |
Beschreibung
Diese Methode wird vom System aufgerufen, um eine Eingabemaske für die Daten zur Zahlungsabwicklung anzuzeigen. In der Methode wird von vielen Modulen auf $order
per global
Statement zugegriffen. Als Ergebnis gibt die Methode ein Eingabeformular als Array zurück. Z. B. Felder zur Eingabe von Vor- und Nachname, IBAN, Kreditkartennummer etc.
Zeitpunkt der Verwendung
Die Methode wird in checkout_payment.php
aufgerufen.
Objekte und Arraystrukturen
SelectionArray (array)
Key | Typ | Beschreibung | Beispiel |
---|---|---|---|
id |
string | Eindeutiger Bezeichner der Zahlart in snake_case | mc_my_first_payment_module |
module |
string | Anzeigename auf checkout_payment.php |
Bezahlen mit MyPayment |
description |
string | Anzeigebeschreibung auf checkout_payment.php |
Einfach bezahlen mit ... |
fields |
array | Array aus mind. einem SelectionFieldArray |
// TODO: ... |
SelectionFieldArray (array)
Key | Typ | Beschreibung | Beispiel |
---|---|---|---|
title |
string | // TODO: ... | // TODO: ... |
field |
string | Html Eingabefeld | // TODO: ... |
Beispiel
public function selection(): array
{
// ...
$selectionFieldArray = [
'title' => '// TODO: ...',
'field' => '<input type="text" name="iban">'
];
$selectionArray = [
'id' => 'mc_my_first_payment_module',
'module' => 'Bezahlen mit MyPayment',
'description' => 'Einfach bezahlen mit MyPayment',
'fields' => [$selectionFieldArray]
];
return $selectionArray;
}
confirmation()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_confirmation.php |
Beschreibung
// TODO: Die Method macht ...
Zeitpunkt der Verwendung
Die Methode wird in checkout_confirmation.php
aufgerufen.
Objekte und Arraystrukturen
ConfirmationArray (array)
Key | Typ | Beschreibung | Beispiel |
---|---|---|---|
title |
string | // TODO: ... | // TODO: ... |
fields |
array | Array aus mind. einem ConfirmationFieldArray |
ConfirmationFieldArray (array)
Key | Typ | Beschreibung | Beispiel |
---|---|---|---|
title |
string | // TODO: ... | // TODO: ... |
field |
string | // TODO: ... | // TODO: ... |
Beispiel
process_button()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_confirmation.php |
Beschreibung
Oft wird diese Methode dazu verwendet, um mithilfe von hidden Inputfeldern Informationen per POST
request weiterzugeben. In der Methode wird von vielen Modulen auf $order
per global
Statement zugegriffen. Zudem kann mit dieser Methode weiterer Content auf der Seite angezeigt werden.
Als Ergebnis gibt die Methode ein Eingabeformular als HTML (string) zurück. Z. B. Felder für Vor- und Nachname, IBAN, Kreditkartennummer etc.
Im Checkout Schritt proccess
kann dann mit $_POST
auf die Daten zugegriffen werden.
Zeitpunkt der Verwendung
Die Methode wird in checkout_confirmation.php
aufgerufen.
Beispiel
public function process_button(): string
{
global $order;
$prefix = 'mc_my_first_payment_module_';
$htmlStr =
xtc_draw_hidden_field($prefix . 'firstname', 'Max') .
xtc_draw_hidden_field($prefix . 'lastname', 'Mustermann') .
xtc_draw_hidden_field($prefix . 'iban', 'DE...');
return $htmlStr;
}
before_process()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_process.php |
Beschreibung
In dieser Methode können Daten für den Zahlungsablauf aufbereitet werden, kurz bevor die Bestellung in die Datenbank eingetragen wird.
// TODO: Die Method macht ...
Anmerkung
Einige Module geben bei dieser Methode als Rückgabewert boolean
true
oder false
zurück. Das ist jedoch nicht nötig, da vom modified Core kein Rückgabewert von der Methode erwartet oder verarbeitet wird.
Zeitpunkt der Verwendung
Die Methode wird in Checkout-Step process
in checkout_confirmation.php
aufgerufen, bevor die Bestellung order
verarbeitet und in die Datenbank geschrieben wird.
payment_action()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_process.php |
Beschreibung
// TODO: Die Method macht ...
Zeitpunkt der Verwendung
Die Methode wird in checkout_process.php
aufgerufen.
before_send_order()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_process.php |
Beschreibung
// TODO: Die Method macht ...
Zeitpunkt der Verwendung
Die Methode wird in checkout_process.php
aufgerufen.
after_process()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_process.php |
Beschreibung
// TODO: Die Method macht ...
Zeitpunkt der Verwendung
Die Methode wird in checkout_process.php
aufgerufen.
success()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_success.php |
Beschreibung
// TODO: Die Method macht ...
Zeitpunkt der Verwendung
Die Methode wird in checkout_success.php
aufgerufen.
Objekte und Arraystrukturen
SuccsessArray (array)
Key | Typ | Beschreibung | Beispiel |
---|---|---|---|
title |
string | Anzeigeinformation für den Nutzer | Bezahlen mit MyPayment |
class |
string | Eindeutiger Bezeichner der Versandart in snake_case | mc_my_first_payment_module |
fields |
array | Array aus mind. einem SuccsessFieldArray |
... |
SuccsessFieldArray (array)
Key | Typ | Beschreibung | Beispiel |
---|---|---|---|
title |
string | // TODO: ... | // TODO: ... |
field |
string | // TODO: ... | // TODO: ... |
get_error()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_payment.php |
Beschreibung
// TODO: Die Method macht ...
Zeitpunkt der Verwendung
Die Methode wird in checkout_payment.php
aufgerufen.
Objekte und Arraystrukturen
ErrorArray (array)
Key | Typ | Beschreibung | Beispiel |
---|---|---|---|
title |
string | Titel der Fehlermeldung | // TODO: ... |
error |
string | Fehlermeldung | // TODO: ... |
iframeAction()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_payment_iframe.php |
Beschreibung
Diese Methode wird vom System aufgerufen, eine URL zu generieren. Diese URL wird von modified in einem iFrame geöffnet.
// TODO: Die Method macht ...
Zeitpunkt der Verwendung
Die Methode wird in checkout_payment_iframe.php
aufgerufen.
javascript_validation()¶
Option | Value |
---|---|
optional | ✅ |
caller | checkout_payment.php |
Beschreibung
Diese Methode wird vom System aufgerufen, um Javascript in den Header zu laden.
// TODO: Die Method macht ...
Zeitpunkt der Verwendung
Die Methode wird in checkout_payment.php
aufgerufen.
create_paypal_link()¶
Option | Value |
---|---|
optional | ✅ |
caller | none |
Beschreibung
Es sieht so aus, als würde diese Methode niemals vom modified Core aufgerufen werden, obwohl diese in der Klasse /includes/classes/payment.php
vorhanden ist. Es gibt externe (Drittanbieter) Module, wie Micropayment die die Methode create_paypal_link()
über die payment.php
Klasse aufrufen. Der modified Core selbst scheint dieses nicht zu tun.
// TODO: Die Method macht ...
Zeitpunkt der Verwendung
Diese Methode wird nicht vom modified Core auferufen.
info()¶
Option | Value |
---|---|
optional | ✅ |
caller | none |
Beschreibung
Es sieht so aus, als würde diese Methode niemals vom modified Core aufgerufen werden, obwohl diese in der Klasse /includes/classes/payment.php
vorhanden ist. Es gibt externe (Drittanbieter) Module, wie Micropayment die die Methode info()
über die Klasse payment.php
aufrufen. Der modified Core selbst scheint dieses nicht zu tun.
// TODO: Die Method macht ...
Zeitpunkt der Verwendung
Diese Methode wird nicht vom modified Core aufgerufen.
Payment Klasse Codebeispiel¶
class mc_my_first_payment_module extends StdModule
{
public function __construct()
{
parent::__construct(
'MODULE_PAYMENT_MC_MY_FIRST_PAYMENT_MODULE'
);
$this->checkForUpdate(true);
}
/**
* Diese Methode wird vom System aufgerufen, um zu kontrollieren, ob die Zahlungsart
* (weiterhin) zur Verfügung steht. Z. B. können Bedingungen, wie Warenwert, Land, Kundenstatus etc.
* dazu führen, dass eine Zahlart nicht zur Verfühgung stehen soll. Oft wird dazu auf $order
* oder $xtPrice per global Statement zugegriffen. Als Ergebnis kann die Methode die
* Klassenvariable $this->enabled auf true oder false setzen.
*
* @return void
*/
public function update_status(): void
{
global $order, $xtPrice;
// ...
$this->enabled = true;
}
/**
* ...
*
* Einige Module geben als Rückgabewert boolean true oder false zurück. Das ist jedoch nicht nötig, da vom
* modified Core kein Rückgabewert von der Methode erwartet oder verarbeitet wird.
*
* @return void
*/
public function pre_confirmation_check(): void
{
}
/**
* ???
*
* @return array ConfirmationArray
*/
public function confirmation(): array
{
// ...
$confirmationFieldArray = [
'title' => string,
'field' => string
]
$confirmationArray = [
'title' => string,
'fields' => [
$confirmationFieldArray
]
];
return $confirmationArray;
}
/**
* ???
*
* @return string
*/
public function process_button(): string
{
global $order;
}
/**
* ???
*
* @return void
*/
public function before_process(): void
{
}
/**
* ???
*
* @return void
*/
public function payment_action(): void
{
}
/**
* ???
*
* @return void
*/
public function before_send_order(): void
{
}
/**
* ???
*
* @return void
*/
public function after_process(): void
{
}
/**
* ???
*
* @return array SuccessArray
*/
public function success(): array
{
}
/**
* ???
*
* @return array ErrorArray
*/
public function get_error() array
{
}
/**
* ???
*
* @return string Eine URL die in einem iFrame geöffnet werden soll.
*/
public function iframeAction(): string
{
}
/**
* ???
*
* @return ??? type is unknown
*/
public function create_paypal_link(): ???
{
}
/**
* ???
*
* @return mixed ???
*/
public function info(): mixed
{
}
}