Closed ghost closed 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…
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.
Ich bin nicht sicher ob du den Code richtig verstehst:
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.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 ;-)
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.
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.
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.