Problem mit Lastschriftzahlung

  • Hallo,

    ein Kunde hat mich gestern darauf aufmerksam gemacht, dass meine Zahlungsart Lastschrifteinzug wohl nicht richtig funktioniert. Ich habe das gerade mal nachvollzogen:
    Als der Kunde mich anrief, war bei Module > Zahlungsoptionen > Lastschriftverfahren > Bearbeiten die Option "Datenbanksuche für die BLZ verwenden?" auf True gesetzt. Ich habe eine Testbestellung versucht, bekomme dann die Fehlermeldung:

    ---
    1054 - Unknown column 'blz' in 'where clause'

    SELECT * from banktransfer WHERE blz = '67290100'

    [XT SQL Error]
    ---

    Ich habe diese Überprüfung ausgeschaltet und kann jetzt als Kunde dennoch nicht mit Lastschrift bezahlen, da bei Eingabe einer Fantasie-BLZ die Fehlermeldung "Diese Bankleitzahl existiert nicht, bitte korrigieren Sie Ihre Angabe." kommt, oder, wenn ich die richtige BLZ angegeben habe, die Fehlermeldung "Diese Kontonummer ist nicht pruefbar, bitte kontrollieren zur Sicherheit Sie Ihre Eingabe nochmals." kommt.
    Dann kann ich die Kontonummer sooft ich will neu eigeben und auf "Weiter" klicken, ich lande immer wieder im Zahlungsoptionenbildschirm mit der Fehlermeldung und komme nicht weiter im Bestellprozess.

    Ein Desaster!

    Wieso prüft der Shop die BLZ und/oder Kontonummer trotzdem, obwohl ich es in den Optionen ausgeschaltet habe und, viel wichtiger: Was kann ich umstellen oder tun, dass meine Lastschriftzahlung funktioniert? Eine Überprüfung auf Korrektheit ist erstmal zweitrangig.

    Wär echt wichtig.... danke für die Antworten vorab!

    Viele Grüße!
    Florian
    http://www.teelirium.de

  • Ich versuche mal aus Deinen Antworten mir das irgendwie zu erschließen was Du meinst, was - ehrlich gesagt - nicht ganz einfach ist.

    Also: Wenn ich die Überprüfung EINschalte, dann benötige ich in meiner mySQL Datenbank den Tabel "banktransfer_blz". Wenn ich die Überprüfung AUSschalte, dann benötige ich die csv Datei. Sehe ich das richtig?

    Ich habe den Table "banktransfer_blz" nicht und wenn ich die Überprüfung ausschalte kommt es zu obiger Fehlermeldung.

    Was kann/soll ich nun tun??? Wie kann ich den table anlegen? Wie kann ich ausschalten, dass überhaupt was abgefragt wird?

    Viele Grüße!
    Florian

  • Hallo,

    ich hab mich da jetzt mal durchgefummelt und die Tabelle banktransfer_blz angelegt. Die Datenbankabfrage im Zahlungsmodul ist eingeschaltet und ich erhalte jetzt die Fehlermeldung:

    ---
    1054 - Unknown column 'blz' in 'where clause'

    SELECT * from banktransfer WHERE blz = '67290100'

    [XT SQL Error]
    ---

    wenn ich per Lastschrift bezahlen möchte.

    Langsam gehen mir die Ideen aus :(

  • So langsam kommt Licht ins Dunkel, danke schonmal für die Unterstützung. Aber, mmhhhh, ich habe die Tabelle 'banktransfer' aber schon und da sind auch Daten drin. Ich habe, bevor der Shop online ging, alles möglich ausprobiert, so auch die Zahlungsoptionen und damals auch eine Testbestellung per Lastschrift bezahlt. Genau diese Daten stehen in meiner Tabelle 'banktransfer' schon drin. Irgendwie zögere ich gerade, diese Tabelle zu löschen...
    [Blockierte Grafik: http://www.teelirium.de/db_banktransfer.jpg]

  • OK, ich habe den table 'banktransfer' gelöscht und die Daten der banktransfer_blz2010.sql dort eingefügt. Getestet und mit meinem Privatkonto klappt die Abfrage nun. Aber: Ich kann nun alte Bestellungen, die die Zahlungsweise "Lastschrift" hatten, nicht mehr bearbeiten. Ich erhalte eine Fehlermeldung, dass Felder in dem table 'banktransfer' nicht vorhanden sind. So wie ich es sehe, dient der table 'banktransfer' dazu, die eingegebenen Daten der Kunden bei Lastschriftzahlungsweise zu speichern und die Tabelle 'banktransfer_blz' dient der Überprüfung, ob der Kunde eine der Prüfziffer entsprechende Kontonummer eingegeben hat. Der Rat, die Daten also einfach mal in den table 'banktransfer' zu spielen hätte auch ganz desaströse Folgen haben können. Glücklicherweise habe ich ein Backup des tables gemacht und konnte ihn auch wieder zurückspielen.
    Nun die Frage:

    1. Wo (in welcher PHP/HTML Datei) muss ich was genau ändern, dass der Shop die Kontoüberprüfung anhand des tables 'banktransfer_blz' durchführt und nicht im table 'banktransfer' schaut?

    Bei einem eben durchgeführten Test, hat der Shop die Daten eines meiner Konten problemlos akzeptiert. Daten eines anderen Kontos mit 100% richtigen Daten, wurden nicht akzeptiert, sondern ich bin wieder auf der checkout_payment.php gelandet mit dem Hinweis: "Diese Kontonummer ist nicht pruefbar, bitte kontrollieren zur Sicherheit Sie Ihre Eingabe nochmals." Ich kann nun überprüfen soviel ich will, die eingegebenen Daten stimmen, aber der Shop lässt mich nicht weiter. Wenn ich in den Einstellungen des Lastschriftmoduls den Haken bei der Einstellung "Datenbanksuche für die BLZ verwenden?" auf FALSE setze, schaut der Shop meines Wissens immer noch in der blz.csv nach, ob die eingegebenen Daten stimmen. Nun hätte ich aber gerne, dass der Shop nirgends prüft, ob die eingegebenen Daten stimmen, sondern jede Kombination von BLZ und Kontonummer akzeptiert. Daher meine zweite Frage:

    2. Wo kann ich die Überprüfung der Prüfziffer im Lastschriftmodul KOMPLETT ausschalten? Keine DB Abfrage, keine Abfrage der blz.csv

    Bin für jeden Tip dankbar!

    Viele Grüße
    Florian
    http://www.teelirium.de

  • So, ich schon wieder. Ich habe nun im Modul die DB Abfrage augeschaltet. Nun wird ja zur Prüfung die blz.csv herangezogen. Auch die ist bei mir auf dem aktuellsten Stand. Laut Bundesbank gibt es bei verschiedenen Banken keine offengelegte Prüfziffer, dann wird als Prüfziffer bei der betroffenen Bank die 09 eingesetzt (http://www.bundesbank.de/zahlungsverkeh…nberechnung.php). Nun habe ich ein Konto, bei dem die Abfrage anhand er blz.csv funktioniert. Ändere ich in der blz.csv die Prüfziffer dieser Bank auf 09, kann ich dieses Konto nicht mehr angeben, sondern erhalte immer die Fehlermeldung "Diese Kontonummer ist nicht pruefbar, bitte kontrollieren zur Sicherheit Sie Ihre Eingabe nochmals." Ich vermute, dass wird mit allen Banken so sein, die als Prüfziffer die 9 oder 09 haben. Zumindest habe ich es mit mehreren so probiert. Deswegen wäre es mir enorm wichtig, wenn ich wüsste:

    Wo kann ich die Überprüfung der Prüfziffer im Lastschriftmodul KOMPLETT ausschalten? Keine DB Abfrage, keine Abfrage der blz.csv!!!

    Danke für die Antworten!

    Viele Grüße!
    Florian

  • So weit ich weiß, wird diese Überprüfung in der /includes/classes/banktransfer_validation.php gemacht. Sobald ich ein bissel Luft habe, schaue ich nach.

  • Hallo,

    das war ein entscheidender Hinweis, danke!

    Ich habe die /includes/classes/banktransfer_validation.php nun so angepasst, dass als Returncode immer eine "0" zurückgegeben wird. Die "0" ist laut der Doku der Returncode, der besagt, dass alles in Ordnung ist. Hier die letzten Zeilen der Datei /includes/classes/banktransfer_validation.php:

    ---
    /* -------- Dies ist die wichtigste function ---------- */
    function CheckAccount($banktransfer_number, $banktransfer_blz) {
    // Wir kontrollieren auf einfache Art und Weise das
    // bloße Vorhandensein der BLZ/Kontonr.


    $KontoNR = ereg_replace('[^0-9]', '', $banktransfer_number);
    $BLZ = ereg_replace('[^0-9]', '', $banktransfer_blz);

    $Result = 0;
    if ($BLZ == '' || strlen($BLZ) < 8) {
    return 8; /* Keine BLZ übergeben */
    }
    if ($KontoNR == '') {
    return 9; /* Keine Kontonummer übergeben */
    }

    // Wir brechen hier gleich ab (0 wird immer als Erfolg zurückgemeldet)
    return 0;

    // Alter Code bleibt noch stehen für alle Fälle ;)

    /* Beginn Implementierung */
    ---
    usw.
    ---

    Ich versuche, die Datei noch so anzupassen, damit der Bankname wenigstens richtig aufgelöst wird. Wenn ich das hinkriege melde ich mich nochmal. Aber Hauptsache ist erstmal, dass das Modul wieder funktioniert. Ob die Kontonummer valide ist, kann man übrigens auch hier überprüfen: http://www.ckonto.de/

    Viele Grüße und danke für die Hilfe!!!
    Florian
    http://www.teelirium.de

  • ja, das ging schnell, aber so wird jetzt der richtige Bankname wenigstens aufgelöst. Ich habe den Returncode nur ein wenig nach unten verschieben müssen. Die letzten Zeilen der Datei /includes/classes/banktransfer_validation.php:

    /* -------- Dies ist die wichtigste function ---------- */
    function CheckAccount($banktransfer_number, $banktransfer_blz) {
    // Wir kontrollieren auf einfache Art und Weise das
    // bloße Vorhandensein der BLZ/Kontonr.


    $KontoNR = ereg_replace('[^0-9]', '', $banktransfer_number);
    $BLZ = ereg_replace('[^0-9]', '', $banktransfer_blz);

    $Result = 0;
    if ($BLZ == '' || strlen($BLZ) < 8) {
    return 8; /* Keine BLZ übergeben */
    }
    if ($KontoNR == '') {
    return 9; /* Keine Kontonummer übergeben */
    }


    /* Beginn Implementierung */
    $adata = $this->query($BLZ);
    if ($adata == -1) {
    $Result = 5; // BLZ nicht gefunden;
    $PRZ = -1;
    $this->PRZ = $PRZ;
    $this->banktransfer_number=ltrim($banktransfer_number,"0");
    $this->banktransfer_blz=$banktransfer_blz;
    } else {
    $this->Bankname = $adata['bankname'];
    $this->PRZ = str_pad ($adata['prz'], 2, "0", STR_PAD_LEFT);
    $this->banktransfer_number=ltrim($banktransfer_number,"0");
    //$this->banktransfer_number=$this->ExpandAccount($banktransfer_number);
    $this->banktransfer_blz=$banktransfer_blz;

    $PRZ = $adata['prz'];
    /*
    switch ($PRZ) {
    case "52" : $Result = $this->Mark52($KontoNR, $BLZ); break;
    case "53" : $Result = $this->Mark53($KontoNR, $BLZ); break;

    case "B6" : $Result = $this->MarkB6($KontoNR, $BLZ); break;
    case "C0" : $Result = $this->MarkC0($KontoNR, $BLZ); break;
    default:
    $MethodName = "Mark$PRZ";
    if (method_exists($this, $MethodName)){
    $Result = call_user_func (array($this, $MethodName), $KontoNR);
    } else {
    $Result = 3;
    }
    }
    */
    } /* end if num_rows */

    // Wir brechen hier gleich ab (0 wird immer als Erfolg zurückgemeldet)
    return 0;
    // Alter Code bleibt noch stehen für alle Fälle ;)

    return $Result;
    } /* End of CheckAccount */
    } /* End Class AccountCheck */
    ?>


    Es wundert mich nur, dass ich scheinbar der einzige bin, der diese Probleme hat. Ich habe sowohl meine DB als auch mein blz.csv auf den Stand von 2010 gebracht mit den Daten der Bundesbank. Vielleicht liegt es daran? Habe in der /includes/classes/banktransfer_validation.php gesehen, dass die letzten Änderungen/Ergänzungen von 2006 sind. Evtl. liegt es daran.

    Viele Grüße!
    Florian

  • Sieht vernüftig aus. Wie gesagt, wenn ich Zeit habe "zerlege" ich das Ding nochmal ganz genau.