Änderungen
/* Gebühren */
== Gebühren ==
Es ist dem Administrator für jedes Gateway individuell möglich, Gebühren einzustellen. Diese kann er sowohl prozentual als auch fix angeben (natürlich auch beides gleichzeitig). Bei einer Einstellung beider Gebühren-Typen für ein Gateway wird zuerst der prozentuale Wert gebildet und dann von diesem der fixe. Außerdem ist es möglich einzustellen, ob der vom Kunden eingegebene Betrag inklusive oder exklusive Gebühren sein soll.
Für die Gebührenrechnung gibt es zwei Methoden, der innerhalb der Klasse verfügbar sind. Die erste Methode ist ''addFees'', sie erwartet zwei Parameter. Der erste beinhaltet den Betrag ohne Gebühren, der zweite ist ein Boolean (true/false) und gibt an, ob der Betrag noch konvertiert werden muss. Für die Konvertierung wird die aktuell eingestellte Währung angenommen und der Betrag dann in die Basiswährung konvertiert. Außerdem vorhanden ist die Methode ''deductFees'', sie erwartet nur einen Parameter, nämlich den Betrag. Eine automatische Konvertierung kann hier nicht erfolgen.
Für die Anzeige der Gebühren sollte am besten zum Beispiel an das Ende des Zahlungs-Buttons eine entsprechende Information angehangen werden. Diese ist standardmäßig wie folgt realisiert:
<source lang="php">
$fees = $addon = "";
if($this->settings['excl'] == 1)
$addon = "_EXCL";
if($this->settings['fix'] != 0 && $this->settings['percent'] != 0)
$fees = " " . str_replace(Array("%p", "%a"), Array($nfo->format($this->settings['percent'], 2, true), $cur->infix($nfo->format($cur->convertAmount(null, $this->settings['fix']), 2))), $lang['CREDIT']['FEES_BOTH' . $addon]);
else if($this->settings['fix'] != 0)
$fees = " " . str_replace(Array("%p", "%a"), Array($nfo->format($this->settings['percent'], 2, true), $cur->infix($nfo->format($cur->convertAmount(null, $this->settings['fix']), 2))), $lang['CREDIT']['FEES_FIX' . $addon]);
else if($this->settings['percent'] != 0)
$fees = " " . str_replace(Array("%p", "%a"), Array($nfo->format($this->settings['percent'], 2, true), $cur->infix($nfo->format($cur->convertAmount(null, $this->settings['fix']), 2))), $lang['CREDIT']['FEES_PERCENT' . $addon]);
</source>
Es ist übrigens beispielsweise in der Methode ''getPaymentForm()'' auch sehr einfach, den Betrag clientseitig um die Gebühren zu erhöhen. Hierfür ein kleiner Ausschnitt JavaScript:
<source lang="javascript">
paypalFeesAdded = 0;
paypalFeesAdded = 0;
function addPayPalFees() {
<?php if($this->settings['excl'] == 1){ ?>
if(!paypalFeesAdded){
var percent = <?=$this->settings['percent']; ?>;
var fix = Number(<?=$cur->convertAmount(null, $this->settings['fix']); ?>);
var value = Number(document.getElementById("paypal_amount").value.replace(',', '.'));
value += Math.ceil(value / 100 * percent * 100) / 100;
value += fix;
value = String(value);
document.getElementById("paypal_amount").value = value<?=$CFG['NUMBER_FORMAT'] == "de" ? ".replace('.', ',')" : ""; ?>;
paypalFeesAdded = 1;
}
<?php } ?>
}
</source>
Dafür muss das Betrags-Feld natürlich die ID ''paypal_amount'' haben und der Zahlungs-Button als onClick-Handler ''addPayPalFees()''.
Mit einer Zeile Code im Konstruktor kann das Gebührensystem übrigens für dieses Gateway deaktiviert werden: