Zahlungsabieterplugins entwickeln

Hey, ich schaue mir gerade das neue Tutorial dazu an. Nun habe ich eine Frage/Problem beim weiterleiten. Die externe Seite wird wie bei Paypal in einem Iframe angezeigt. Sobald die Zahlung erfolgreich war, leite ich auf auf den Payment Controller zurück das EndAction. /\*\* \* End action method \*/ public function endAction() { $secret = Shopware()-\>Config()-\>myPaymentSecret; $transactionId = $this-\>Request()-\>getParam('transactionId'); $status = $this-\>Request()-\>getParam('status'); $hash = $this-\>Request()-\>getParam('hash'); if(empty($transactionId) || $status != 'success' || $hash != md5($secret.'|'.$transactionId.'|success')) { return $this-\>forward('error'); } $this-\>saveOrder($transactionId, $hash); return $this-\>forward('finish', 'checkout', null, array('sUniqueID' =\> $hash)); } Nun spielt sich das ganze ja immer noch im Iframe ab und der Code return $this->forward(‘finish’, ‘checkout’, null, array(‘sUniqueID’ => $hash)); wird auch im Iframe ausgeführt bzw. angezeigt. Wie mache ich das für die komplette Seite? Danke

[quote=“ottscho”]Hey, ich schaue mir gerade das neue Tutorial dazu an. Nun habe ich eine Frage/Problem beim weiterleiten. Die externe Seite wird wie bei Paypal in einem Iframe angezeigt. Sobald die Zahlung erfolgreich war, leite ich auf auf den Payment Controller zurück das EndAction. /\*\* \* End action method \*/ public function endAction() { $secret = Shopware()-\>Config()-\>myPaymentSecret; $transactionId = $this-\>Request()-\>getParam('transactionId'); $status = $this-\>Request()-\>getParam('status'); $hash = $this-\>Request()-\>getParam('hash'); if(empty($transactionId) || $status != 'success' || $hash != md5($secret.'|'.$transactionId.'|success')) { return $this-\>forward('error'); } $this-\>saveOrder($transactionId, $hash); return $this-\>forward('finish', 'checkout', null, array('sUniqueID' =\> $hash)); } Nun spielt sich das ganze ja immer noch im Iframe ab und der Code return $this->forward(‘finish’, ‘checkout’, null, array(‘sUniqueID’ => $hash)); wird auch im Iframe ausgeführt bzw. angezeigt. Wie mache ich das für die komplette Seite? Danke[/quote] Warum machst Du das im IFRAME und leitest nicht direkt auf die PayPal-Seite weiter? Oder Du baust im Checkout-Template ein Javascript ein, das die Seite aus dem IFRAME befreit: <script type="text/javascript"> <!-- if (parent.frames.length > 0) top.location=self.location; <!-- </script>

[quote=“avenger”][quote=“ottscho”]Hey, ich schaue mir gerade das neue Tutorial dazu an. Nun habe ich eine Frage/Problem beim weiterleiten. Die externe Seite wird wie bei Paypal in einem Iframe angezeigt. Sobald die Zahlung erfolgreich war, leite ich auf auf den Payment Controller zurück das EndAction. /\*\* \* End action method \*/ public function endAction() { $secret = Shopware()-\>Config()-\>myPaymentSecret; $transactionId = $this-\>Request()-\>getParam('transactionId'); $status = $this-\>Request()-\>getParam('status'); $hash = $this-\>Request()-\>getParam('hash'); if(empty($transactionId) || $status != 'success' || $hash != md5($secret.'|'.$transactionId.'|success')) { return $this-\>forward('error'); } $this-\>saveOrder($transactionId, $hash); return $this-\>forward('finish', 'checkout', null, array('sUniqueID' =\> $hash)); } Nun spielt sich das ganze ja immer noch im Iframe ab und der Code return $this->forward(‘finish’, ‘checkout’, null, array(‘sUniqueID’ => $hash)); wird auch im Iframe ausgeführt bzw. angezeigt. Wie mache ich das für die komplette Seite? Danke[/quote] Warum machst Du das im IFRAME und leitest nicht direkt auf die PayPal-Seite weiter? Oder Du baust im Checkout-Template ein Javascript ein, das die Seite aus dem IFRAME befreit: <script type="text/javascript"> <!-- if (parent.frames.length > 0) top.location=self.location; <!-- </script> [/quote] Ich finde es rein optisch schöner, wenn das Templates des Shops noch angezeigt wird. Den Tipp mit deinem Code werde ich versuchen. Danke dir Paypal war übrigens nur ein Beispiel.

Irgendwie komme ich hier allgemein nicht weiter. Im Beispiel wird mit saveOrder die Bestellung gespeichert. Versuche ich das so saveOrder('testid','testhash') erhalte ich den Fehler: Fatal error: Uncaught exception ‘PDOException’ with message ‘SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’ 0, 0, 0, 0, now(), 0, 17, , ‘testid’, ‘’ at line 3’ in /kunden/117539_78141/webseiten/testshop/engine/Enlight/Vendor/Zend/library/Zend/Db/Adapter/Pdo/Abstract.php:263 Stack trace:

Hey Stefan, hast du als Verfasser des Tutorial eine Idee woran das liegen könnte? Die beiden Werte können ja zum Test irgendwelche Informationen tragen, oder?

Hey, nein, das muss ein numerischer Wert sein, deshalb knallt die SQL-Abfrage auch.

Irgendwie bin ich zu blöd für das Tutorial. Oder ich habe es einfach noch nicht verstanden. Mit dem Code wird dich die Bestellung abgespeichert und dazu einen beliebige ID (welche normalerweise vom Zahlungsanbieter kommt, zur externen Zuordnung). Ich habe es jetzt mit allen Möglichen Variationen versucht: $this-\>saveOrder('666666','irgendwas'); $this-\>saveOrder(666666,'irgendwas'); Leider immer mit der gleichen PDO Fehlermeldung. Außerdem ist mir aufgefallen, dass die Paymentmethoden bei mir leer sind. Evtl. habe ich allgemein ein Problem. [code]<?php class Shopware_Controllers_Frontend_PaymentTest extends Shopware_Controllers_Frontend_Payment

{

public function indexAction()

{

	//Versuch 1
            die($this->getPaymentShortName()); //Versuch 2 $this-\>saveOrder(666666,'hash'); } } ?\> [/code]

Im Anhang mal eine komplette Beispiel-Schnittstelle (EOS) auf Basis der neuen API - eventuell bringt dich das weiter.

1 Like

Hey Stefan, der EOS Code funktioniertbei euch, oder? Wenn ich auf Zahlung durchführe lande ich auf: http://www.shopware.vm/shopware.php/sVi … ayment_eos Und die Startseite wird angezeigt. Der Controller heißt ja auch “Shopware_Controllers_Frontend_PaymentEos” Sollte dann nicht auch http://www.shopware.vm/shopware.php/sVi … PaymentEos aufgerufen werden?

Ist dein Shop von extern erreichbar? Für die Schnittstelle muss dieser nach außer erreichbar sein.

Der Shop läuft auf meinem PC unter VMWARE unter (shopware.vm). Die Domain ist von draußen natürlich nicht errreichbar… mhhh, okay!