Anpassung der sepa.php Updatesicher machen

Thema wurde von ccxx, 6. Februar 2017 erstellt.

  1. ccxx

    ccxx Erfahrener Benutzer

    Registriert seit:
    18. April 2013
    Beiträge:
    66
    Danke erhalten:
    0
    Danke vergeben:
    19
    Guten Tag!

    Ich habe die
    includes/modules/payment/sepa.php angepasst (etwas auskommentiert, sodass keine Eingabe der IBAN-Daten und keine Bestätigung für das Fax-SEPA-Mandat notwenig ist).
    Wie bekomme ich diese Anpassung updatesicher (das sie nicht überschrieben wird)?

    Bei den Templates gibt es ja den USERMOD-Ordner, aber wie kann ich dies unter includes/ machen?
    Mit sepa-USERMOD.php habe ich es schon versucht, dies hat keine Wirkung gezeigt.

    Vielen Dank
     
  2. Sergej (Gambio)

    Sergej (Gambio) Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    1. August 2016
    Beiträge:
    336
    Danke erhalten:
    205
    Danke vergeben:
    69
  3. ccxx

    ccxx Erfahrener Benutzer

    Registriert seit:
    18. April 2013
    Beiträge:
    66
    Danke erhalten:
    0
    Danke vergeben:
    19
    Vielen Dank!

    Ich habe jetzt unter
    GXUserComponents/overloads/payment/

    die Datei
    PaymentOverload.inc.php
    angelegt.

    Was muss ich nun innerhalb der Datei machen, wenn ich die komplette function
    function pre_confirmation_check()
    einfach leer haben möchte, bzw. möchte dass diese nichts macht?

    function pre_confirmation_check()
    {
    {
    if($_POST['sepa_fax'] == false)

    $_SESSION['sepa_owner'] = $_POST['sepa_owner'];
    $_SESSION['sepa_bic'] = $_POST['sepa_bic'];
    $_SESSION['sepa_iban'] = $_POST['sepa_iban'];
    $_SESSION['sepa_bankname'] = $_POST['sepa_bankname'];

    $sepa_validation = MainFactory::create_object('SepaAccountCheck');
    $sepa_result = $sepa_validation->CheckAccount($_POST['sepa_owner'], $_POST['sepa_iban'], $_POST['sepa_bic'], $_POST['sepa_bankname']);

    switch($sepa_result)
    {
    case 0: // payment o.k.
    $error = 'O.K.';
    $recheckok = 'false';
    break;
    case 1: // number & blz not ok (BLZValidation)
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_1;
    $recheckok = 'false';
    break;
    case 2: // account number has no calculation method (BLZValidation)
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_2;
    $recheckok = 'true';
    break;
    case 3: // No calculation method implemented (BLZValidation)
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_3;
    $recheckok = 'true';
    break;
    case 4: // Number cannot be checked (BLZValidation)
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_4;
    $recheckok = 'true';
    break;
    case 5: // BLZ not found (BLZValidation)
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_5;
    $recheckok = 'false'; // Set "true" if you have not the latest BLZ table!
    break;
    // CUSTOM ERRORS
    case 10: // no account holder
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_10;
    $recheckok = 'false';
    break;
    case 11: // no iban
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_11;
    $recheckok = 'false';
    break;
    case 12: // no iban check digits
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_12;
    $recheckok = 'false';
    break;
    case 13: // incorrect iban
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_13;
    $recheckok = 'false';
    break;
    case 14: // no bic
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_14;
    $recheckok = 'false';
    break;
    case 15: // incorrect bic
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_15;
    $recheckok = 'false';
    break;
    case 16: // no bankname
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_16;
    $recheckok = 'false';
    break;
    case 128: // Internal error
    $error = 'Internal error, please check again to process your payment';
    $recheckok = 'true';
    break;
    default:
    $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_4;
    $recheckok = 'true';
    break;
    }

    if($sepa_result > 0 && $_POST['recheckok'] != 'true')
    {
    $payment_error_return = 'payment_error=' . $this->code . '&error=' . urlencode($error) . '&recheckok=' . $recheckok;
    xtc_redirect(xtc_href_link(FILENAME_CHECKOUT_PAYMENT, $payment_error_return, 'SSL', true, false));
    }

    $this->sepa_owner = $sepa_validation->owner;
    $this->sepa_iban = $sepa_validation->iban;
    $this->sepa_bic = $sepa_validation->bic;
    $this->sepa_bankname = $sepa_validation->bankname;
    $this->sepa_prz = $sepa_validation->prz;
    $this->sepa_status = $sepa_result;

    $_SESSION['sepa_owner'] = $sepa_validation->owner;
    $_SESSION['sepa_bic'] = $sepa_validation->bic;
    $_SESSION['sepa_iban'] = $sepa_validation->iban;
    $_SESSION['sepa_bankname'] = $sepa_validation->bankname;
    }
    }



    Orginaldatei:
     
  4. Sergej (Gambio)

    Sergej (Gambio) Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    1. August 2016
    Beiträge:
    336
    Danke erhalten:
    205
    Danke vergeben:
    69
    #4 Sergej (Gambio), 6. Februar 2017
    Zuletzt bearbeitet: 6. Februar 2017
    Zu aller erst muss der Ordner im overload-Ordner den gleichen Namen haben wie die Klasse die du überladen möchtest.
    Bei Klassen mit einem "..._ORIGIN" muss das "_ORIGIN" als Ordnername unter overload wegfallen.

    Also z.B.:
    Original Klasse lautet "sepa_ORIGIN" der Ordner unter overload lautet "sepa".
    In diesen Ordner "sepa" legst du eine neue Datei z.B. PaymentSepaOverload.inc.php mit folgendem Inhalt ab

    PHP:
    class PaymentSepaOverload extends PaymentSepaOverload_parent
    {
    public function 
    pre_confirmation_check() {
       ...
    }
    }
    damit hast du z.B. die Methode pre_confirmation_check() überladen.

    Wenn du möchtest das die Methode "nichts" macht, dann einfach nichts in der Methode hinterlegen, da es sich bei dieser Methode ehe um eine void-Rückgabewert handelt und es einige $_SESSION-Sachen manipuliert.

    Genieße sowas jedoch mit Vorsicht. Man weiß nicht, wo die Methode bzw. die SESSIONS überall genutzt werden :)
     
  5. ccxx

    ccxx Erfahrener Benutzer

    Registriert seit:
    18. April 2013
    Beiträge:
    66
    Danke erhalten:
    0
    Danke vergeben:
    19
    Vielen Dank habe es nun probiert!

    Unter
    /igpshop/GXUserComponents/overloads/sepa/

    eine Datei
    PaymentSepaOverload.inc.php

    mit dem Inhalt
    class PaymentSepaOverload extends PaymentSepaOverload_parent
    {
    public function pre_confirmation_check() {
    }
    }


    angelegt.

    Wenn ich nun im Bestellprozess bin kommt folgende Fehlermeldung:

    FATAL ERROR(1): "Class 'PaymentSepaOverload' not found"Information:
    class PaymentSepaOverload extends PaymentSepaOverload_parent
    {
    public function pre_confirmation_check() {
    }
    }<br />
    <b>Fatal error</b>: Class 'PaymentSepaOverload' not found in <b>/kunden/289356_72888/rp-hosting/897122/65/shop/system/core/MainFactory.inc.php(61) : eval()'d code</b> on line <b>1</b><br />

    Was mache ich falsch?

    Vielen Dank!!
     
  6. Sergej (Gambio)

    Sergej (Gambio) Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    1. August 2016
    Beiträge:
    336
    Danke erhalten:
    205
    Danke vergeben:
    69
    Wenn du ein overload von Klassen anlegst, musst du diese dem System bekannt machen.

    Dazu musst du im Gambio Admin unter Caches die ersten zwei Einträge ausführen.
     
  7. ccxx

    ccxx Erfahrener Benutzer

    Registriert seit:
    18. April 2013
    Beiträge:
    66
    Danke erhalten:
    0
    Danke vergeben:
    19
    Hab ich gemacht, hatte sogar alle gelöscht :-/
     
  8. Sergej (Gambio)

    Sergej (Gambio) Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    1. August 2016
    Beiträge:
    336
    Danke erhalten:
    205
    Danke vergeben:
    69
    Irgendetwas hast du aber nicht befolgt ;)

    Bei mir in der Testumgebung auf die schnelle getestet ohne Fehler
     
  9. Sergej (Gambio)

    Sergej (Gambio) Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    1. August 2016
    Beiträge:
    336
    Danke erhalten:
    205
    Danke vergeben:
    69
    #9 Sergej (Gambio), 7. Februar 2017
    Zuletzt bearbeitet: 7. Februar 2017
    Den Inhalt der Zip-Datei in den overload-Ordner kopieren - caches leeren

    Jedoch erwähne ich es gerne noch ein mal - Genieße sowas mit Vorsicht, man weiß nicht wo überall die Methode bzw. die $_SESSIONS, die durch die Methode manipuliert werden, gebraucht werden. ;)
     

    Anhänge:

    • sepa.zip
      Dateigröße:
      570 Bytes
      Aufrufe:
      5
  10. ccxx

    ccxx Erfahrener Benutzer

    Registriert seit:
    18. April 2013
    Beiträge:
    66
    Danke erhalten:
    0
    Danke vergeben:
    19
    VIelen Dank hat nun funktioniert.
    Ich weiß jetzt vermutlich an was es lag.

    ICh habe nur die Funktion reingemacht, ohne den PHP-Part oben :/

    Aber so wie ich die Logik verstanden habe, dürfte ich doch kein Problem mit dem Overload bekommen, oder?
    Der Overload dürfte doch die Klasse public function pre_confirmation_check() nur im SEPA-Bereich überschreiben?

    Nochmal vielen Dank!
    LG
     
  11. Sergej (Gambio)

    Sergej (Gambio) Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    1. August 2016
    Beiträge:
    336
    Danke erhalten:
    205
    Danke vergeben:
    69
    Das ist richtig, der Overload überschreibt nur die Methode "pre_confirmation_check()" der sepa_ORIGIN-Klasse...
    ABER... da die Methode nun nichts in eine bestimmte $_SESSION schreibt, fehlen dir die Informationen z.B. in der Bestellbestätigung, welche, wie ich vermute, auch an Gambio Admin weitergegeben werden.

    Dies war/ist mein Hinweis an dich, dass du die Art eines Overlods nicht nutzten sollst, indem du z.B. eine Methode "nichts" machen lässt.

    Ein Overload dient in der Regel um Methoden um weitere Informationen zu erweitern oder gewisse Informationen/Vorgänge anders zu verarbeiten, etc., jedoch nicht um nichts zu machen :)