isotope / core

Core repository of Isotope eCommerce, an eCommerce extension for Contao Open Source CMS
https://isotopeecommerce.org
135 stars 107 forks source link

Falsche Prüfung der Payment-ID führt zu "Bezahlung fehlgeschlagen" #1514

Closed ghost closed 9 years ago

ghost commented 9 years ago

Zeile 142 in /isotope/library/isotope/module/checkout.php:

$strBuffer = $objOrder->hasPayment() ? $objOrder->getPaymentMethod()->processPayment($objOrder, $this) : true;

Die Abfrage verursacht eine Endlosschleife nach der Abfrage der Payment ID, die es aber gibt. Wenn $objOrder->hasPayment() true ist, wird erneut eine Abfrage auf das Payment gestartet, richtig wäre aber das true zurück kommt oder die Abfrage negiert wird.

Richtig wäre:

$strBuffer = !$objOrder->hasPayment() ? $objOrder->getPaymentMethod()->processPayment($objOrder, $this) : true;

Somit funktioniert es.

Ich hatte massive Probleme mit PayOne und genau dieses Ausrufezeichen hat es gelöst.

aschempp commented 9 years ago

Ich kann das so nicht bestätigen. Dein Code:

$strBuffer = !$objOrder->hasPayment() ? $objOrder->getPaymentMethod()->processPayment($objOrder, $this) : true;

macht in Worten folgendes: Wenn kein Zahlungsmodul, dann führe die Zahlung durch, ansonsten mach nichts. Das führt dazu, dass die Zahlung nicht verarbeitet wird wenn ein Zahlungsmodul vorhanden ist, und das kann ja kaum gewollt sein…

ghost commented 9 years ago

Da Payone die richtige Payment ID liefert, bekomm ich hier >true< zurück:

public function hasPayment()
    {
        return (null === $this->getPaymentMethod()) ? false : true;
    }

So das die Abfrage:

$objOrder->hasPayment() ? $objOrder->getPaymentMethod()->processPayment($objOrder, $this) : true;

... mit

$objOrder->getPaymentMethod()->processPayment($objOrder, $this)
weitermacht, anstatt true zurück zu geben.

Es entsteht also eine Schleife die irgendwann abbricht und ich "Bezahlung fehlgeschlagen" erhalte.

Mit Ausrufezeichen funktioniert alles super. Zahlung geht bei PayOne durch. Bestellung taucht mit "paid_date" im Isotope auf.

aschempp commented 9 years ago

Ich bin nicht sicher ob du den Code richtig verstehst:

  1. hasPayment muss true zurückgeben, falls eine Zahlungsmethode vorhanden ist. In deinem Fall PayOne, daher ist true korrekt. false wäre der Wert nur, wenn alle Produkte kostenlos sind, dann verlangt Isotope automatisch nicht nach einer Zahlungsmethode.
  2. Wenn ein Zahlungsmodul vorhanden ist, muss processPayment auf der entsprechenden Zahlungsmethode ausgeführt werden, damit dieses Modul die Zahlung überprüfen kann. Ohne die Prüfung kann eine Bestellung manipuliert werden.

Warum eine Schleife entsteht kann ich dir auch nicht direkt sagen, aber sicherlich nicht wegen dieser Zeilen. Am besten suchst du nochmal an einer neuen Stelle ;-)

ghost commented 9 years ago

Wenn ich den Code wieder korrigiere, eine Bestellung ausführe, dann erhalte ich bei Payone (Nutzung der FrontEnd Schnittstelle) den Fehler "Failed Dependency".

Der wird in der postsale.php verursacht. Bin da echt ratlos, wo der Fehler ist.

aschempp commented 9 years ago

Sieht aus als ist die Schnittstelle bei dir nicht korrekt konfiguriert. Du könntest mal im Handbuch nachsehen ob davon etwas steht. Alternativen wäre das Community Forum oder Isotope Circle für weitere Hilfe. Das GitHub-Ticketsystem ist nur für Bugs oder Feature Request.