Hallo,
der phpShop bietet zwar die Möglichkeit neue Bezahlarten anzulegen, jedoch sind die Bezahlsysteme fest eingestellt.
Im Bezahlsystem stecken alle Eigenschaften des Bezahlvorganges.Die dem Bezahlsystem zugeordnete Bezahlart erbt sie dann gewissermaßen.
Der Vorteil eines neuen Bezahlsystemes kann einerseits eine höhere Übersichtlichkeit sein und andererseits bekommt man dadurch die Möglichkeit eigene Plausibilitätsprüfungen für die dem neuen Bezahlsystem zugeordnete Bezahlart vorzunehmen.
(Beispiel für Plausibilitätsprüfungen: für das bereits integrierte Bezahlsystem "Bankeinzug" werden bei der Bestellung die Kontodaten des Kunden überprüft).
D.h. bei allen Bezahlarten die ich dem Bezahlsystem "Bankeinzug" zuordne, werden auch diese Plausibilitätsprüfungen durchgeführt
Um ein neues Bezahlsystem in den phpShop zu integrieren ist folgendes abzuändern/hinzuzufügen: (1) - generell
in .../administrator/components/com_phpshop/languages/
germanf.php muß folgende Variable hinzugefügt werden.
- ca. Zeile 953 (in diesem Code heißt das neue Bezahlsystem z.B. "Vorkasse")
Quote:
Code: var $_PHPSHOP_PAYMENT_FORM_NB = "Vorkasse"; |
(2) – Eintrag des neuen Bezahlsystemes ins Listenfeld des Bezahlart-Formulars
- die .../administrator/components/com_phpshop/html/
store.payment_method_form.php muß folgendermaßen abgeändert werden
(Beachte: das value =‘V‘ (oder anderer Buchstabe) darf in der Inputbox nur einmal vorkommen )
-ca. Zeile 73
Quote:
Code: <select class="inputbox" name="enable_processor">
<? $payment_process = $db->f("enable_processor"); ?>
<option <?php if ($payment_process=='') echo "selected"; ?> value=''><? echo $PHPSHOP_LANG-
>_PHPSHOP_PAYMENT_FORM_CC ?></option>
<option <?php if ($payment_process=="Y") echo "selected"; ?> value='Y'><? echo $PHPSHOP_LANG-
>_PHPSHOP_PAYMENT_FORM_USE_PP ?></option>
<option <?php if ($payment_process=="B") echo "selected"; ?> value='B'><? echo $PHPSHOP_LANG-
>_PHPSHOP_PAYMENT_FORM_BANK_DEBIT ?></option>
<option <?php if ($payment_process=="N") echo "selected"; ?> value='N'><? echo $PHPSHOP_LANG-
>_PHPSHOP_PAYMENT_FORM_AO ?></option>
<!-- Beginn der Änderung (zus. Eintrag im Listenfeld "Bezahlsystem nutzen (z.B. authorize.net)?:" im
Bezahlartformular) -->
<option <?php if ($payment_process=="V") echo "selected"; ?> value='V'><? echo $PHPSHOP_LANG-
>_PHPSHOP_PAYMENT_FORM_NB ?></option>
<!-- Ende der Änderung (zus. Eintrag im Listenfeld "Bezahlsystem nutzen (z.B. authorize.net)?:" im
Bezahlartformular) -->
</select> |
(3) – Anzeige des neuen Bezahlsystemes in der Spalte „Bezahlsystem nutzen“ der Bezahlartenliste
- die .../administrator/components/com_phpshop/html/
store.payment_method_list.php muß folgendermaßen abgeändert werden:
- ca. Zeile 111
Quote:
Code: switch($enable_processor) {
case "Y":
echo $PHPSHOP_LANG->_PHPSHOP_PAYMENT_FORM_USE_PP;
break;
case "N":
echo $PHPSHOP_LANG->_PHPSHOP_PAYMENT_FORM_AO;
break;
/* Anfang der Änderungen - Anzeige von "Name des neuen Bezahlsystemes" in der Spalte "Bezahlsystem nutzen" in der Bezahlartenliste */
case "V":
echo $PHPSHOP_LANG->_PHPSHOP_PAYMENT_FORM_NB;
break;
/* Ende der Änderungen - Anzeige von "Name der neuen Bezahlsystemes" in der Spalte "Bezahlsystem nutzen" in der Bezahlartenliste*/
case "B":
echo $PHPSHOP_LANG->_PHPSHOP_PAYMENT_FORM_BANK_DEBIT;
break; |
(4) – Anzeige der Bezahlart eines neuen Bezahlsystemes während der Bestellung (Radiobuttons)
- die .../administrator/components/com_phpshop/html/
checkout.paymentradio.php muß folgendermaßen abgeändert werden:
(4.1) - Aufnahme des neuen Bezahlsystemes in die Kategorien "Creditkarte" ($cc_payments=true) oder „keine Creditkarte ($nocc_payments=true)“
- ist das neue Bezahlsystem ein Kreditkarten- oder Internet-Bezahlsystem muß hier folgendes hinzugefügt werden:
- ca.Zeile 30
Quote:
Code: $q = "SELECT DISTINCT * from #__pshop_payment_method,#__pshop_shopper_vendor_xref WHERE ";
$q .= "user_id='".$auth['user_id']."' AND #__pshop_payment_method.shopper_group_id=#__pshop_shopper_vendor_xref.shopper_group_id";
$q .= " AND (enable_processor='' or enable_processor='Y' or (enable_processor='V'))";
$db_cc->query($q);
if ($db_cc->num_rows()) {
$cc_payments=true; |
oder
- ist das neue Bezahlsystem kein Kreditkarten- oder Internet-Bezahlsystem muß hier folgendes hinzugefügt werden:
- ca. Zeile 42
Quote:
Code: $q = "SELECT DISTINCT * from #__pshop_payment_method,#__pshop_shopper_vendor_xref WHERE ";
$q .= "user_id='".$auth['user_id']."' AND #__pshop_payment_method.shopper_group_id=#__pshop_shopper_vendor_xref.shopper_group_id";
$q .= " AND ((enable_processor='B') or (enable_processor='N') or (enable_processor='V'))";
$db_nocc->query($q);
if ($db_nocc->num_rows()) {
$nocc_payments=true; |
(4.2) – Aufnahme des neuen Bezahlsystemes in den Aufruf der Funktion „list_checkNeuesBezahlsystem“
- ca. zeile 96
Quote:
Code: <td nowrap width=10% align=right><? echo $PHPSHOP_LANG->_PHPSHOP_CHECKOUT_PAYMENT_SELECT ?></td>
<td><?php $ps_payment_method->list_nocheck($payment_method_id, true);
$ps_payment_method->list_bank($payment_method_id, true);
$ps_payment_method->list_checkNeuesBezahlsystem($payment_method_id, true);?> </td> |
(4.3) – Erstellen einer neuen Funktion (hier "list_checkNeuesBezahlsystem")
- in der .../administrator/components/com_phpshop/classes/
ps_payment_method.php muß folgende Funktion hinzugefügt werden:
-ca. Zeile 357
Quote:
Code: /* Anfang der Änderung - Übergabe der neuen Bezahlart an die Fkt. "list_payment_radio"*/
function list_checkNeuesBezahlsystem($payment_method_id, $horiz) {
$this->list_payment_radio("V",$payment_method_id, $horiz); //A bit easier :-)
}
/* Ende der Änderung - Übergabe der neuen Bezahlart an die Fkt. "list_payment_radio"*/
|
Hinweis - Plausibilitätsprüfung
In der ps_checkout.php kann man in der folgender Funktion: "
function validate_payment_method(&$d, $is_test)" für das neue Bezahlsystem über das Feld „enable_processor“ (z.B. enable_processor="V") verschiedene Plausibilitätsprüfungen vornehmen.
Das Feld „enable_processor“ in der Tabelle „mos_pshop_payment_method“ (wird abgespeichert im Bezahlart-Formular „.../administrator/components/com_phpshop/html/
store.payment_method_form.php ") kennzeichnet gewissermaßen die Bezahlsysteme, sodaß man Sie dadurch im Code von einander unterscheiden kann
- Aufschlag
Soll für eine Bezahlart ein Aufschlag erhoben werden (z.B. eine Nachnahme-Gebühr), muß im Feld Rabatt (das übrigens in der germanf.php
var $_PHPSHOP_PAYMENT_METHOD_LIST_DISCOUNT und
var $_PHPSHOP_PAYMENT_METHOD_FORM_DISCOUNT
z.B. auf „Nachnahme-Gebühr“ umbenannt werden kann)
ein Aufschlag als negative Zahl eingegeben werden (z.B. –4.00 für 4 € Aufschlag )
- Vorkasse
Der Bezahlart "Vorkasse" sollte man entweder das Bezahlsystem „Nachnahme“ (wie schon von amarok
Mwst im Warenkorb und der Produktübersicht (Reply Nr.17) richtig dargestellt) zuweisen, da dort keine Plausibilitätsprüfungen erfolgen, oder aber man legt sich nach dieser Anleitung dafür ein eigenes Bezahlsystem an. Das ist reine Geschmackssache. Die erste Variante (amarok s.o.) ist auf jede Fälle die schnellere. Nur wenn man eigene Plausibilitätsprüfungen für die Bezahlung braucht, kommt man um die zweite Variante nicht umhin.
- Code-Feld
Das Feld „Code“ im Bezahlart-Formular muß zwar, beim Anlegen einer neuen Bezahlart, ausgefüllt werden, jedoch wird es nur ausgewertet, wenn man das Bezahlsystem „Kreditkarte“ oder „Nutzung mit Internet-Bezahlsystem“ gewählt hat, das Häkchen im Feld „Kreditkarten-Bezahlart?:“ gesetzt hat und einer der folgenden Zeichenfolgen: (mc, visa, amex und discover) im Feld Code stehen.
Die Auswertung erfolgt in Form von einer Format-Überprüfung der Kreditkartennummern und einer Gültigkeitsüberprüfung des Datum der Kreditkartenlaufzeit in der ps_payment_method.php.
Soll diese Auswertung trotz Kreditkarte nicht erfolgen muß man eine „0“ eintragen.
Werden also Bezahlarten angelegt, die nicht dem Bezahlsystem „Kreditkarte“ oder „Nutzung mit Internet-Bezahlsystem“ zugeordnet werden (z.B. Vorkasse) kann man eine beliebige Zeichenfolge im Feld „Code“ eingeben.
Im Anhang sind wieder die modifizierten Dateien.