Gelöst Plugin-Coaching gefragt - Was ist falsch?

bork

Sehr aktives Mitglied
26. Januar 2007
831
97
Hallo,

ich versuche immer noch, weitere Zahlungsarten in den Connector zu bekommen. Servicepartner und professionelle symfony Programmierer haben schon das Handtuch geworfen, und ein Angebot von JTL steht noch aus. Inzwischen habe ich selbst nochmal probiert, das System zu verstehen.

Habe mich dazu auf folgende Ressourcen gestützt:
Beispiel-Plugin für Shopware:
Example — JTL-Connector documentation

Event-Dokumentation von JTL:
jtl\Connector\Event\CustomerOrder\CustomerOrderAfterPullEvent | JTL-Connector documentation

Quellcode des Connectors, wo das Payment Mapping stattfindet:
https://gitlab.jtl-software.de/jtl-...Connector/Gambio/Mapper/CustomerOrder.php#L49

So bin ich vorgegangen:
- Beispiel-Connector von Shopware zur Vorlage genommen und die Erläuterungen dazu nachvollzogen
- Beispiel-Connector in Bezug auf Shopsystem und Event versucht anzupassen
- Plugin-Ordner "paymentpull" in "Plugins" angelegt und "paymentpull.php" darin abgelegt
- Unterordner "listener" in "paymentpull" angelegt und darin CustomerOrderListener.php abgelegt

Vermutlich oute ich mich hiermit als völligen Unwissenden, aber egal. Irgendwie muss es ja weitergehen, und es kann ja nicht sein, dass es niemanden auf der Welt gibt, der so ein doofes Plugin machen kann? Bisher jedenfalls wird mein Plugin vom Connector völlig ignoriert: Keine Fehlermeldung, keine Funktion. Irgendetwas Essentielles scheint noch zu fehlen. Jemand einen Tipp für mich?

Meine Dateien:
CustomerOrderListener.php

PHP:
<?PHP
namespace paymentpull\listener; // die Forumsoftware entfernt den Backslash  - der ist aber da.

use \jtl\Connector\Event\CustomerOrder\CustomerOrderAfterPullEvent;
/* use \jtl\Connector\Shopware\Utilities\IdConcatenator; */ // Hier weiß ich nicht was das Pendant zu Gambio ist. Liegt es hieran??
use \jtl\Connector\Core\Logger\Logger;
use \jtl\Connector\Formatter\ExceptionFormatter;
use \jtl\Connector\Core\Utilities\Language as LanguageUtil;

class CustomerOrderListener
{
    public function onCustomerOrderAfterPullAction(CustomerOrderAfterPullEvent $event)
    {
        if (strlen($event->getCustomerOrder()->getCustomerOrderId()->getEndpoint()) == 0) {
            return;
        }

        try {
				// Hier den  private $paymentMapping Array ergänzen
			} catch (\Exception $e) {
            Logger::write(ExceptionFormatter::format($e), Logger::WARNING, 'plugin');
        }
    }
}
?>

paymentpull.php :

PHP:
<?PHP
namespace paymentpull;

use \jtl\Connector\Plugin\IPlugin;
use \Symfony\Component\EventDispatcher\EventDispatcher;
use \paymentpull\listener\CustomerOrderListener;
use \jtl\Connector\Event\CustomerOrder\CustomerOrderAfterPullEvent;

class paymentpull implements IPlugin
{
    public function registerListener(EventDispatcher $dispatcher)
    {
        $dispatcher->addListener(CustomerOrderAfterPullEvent::EVENT_NAME, [
            new CustomerOrderListener(),
            'onCustomerOrderAfterPullAction'
        ]));
    }
}
?>
 

bork

Sehr aktives Mitglied
26. Januar 2007
831
97
Hallo Daniel,

kannst du nochmal reinschauen? Irgendwie greift das Plugin nicht - wird einfach ignoriert.

Unterorder paymentpull in Ordner Plugins enthält:
  • bootstrap.php
Code:
<?PHP
namespace paymentpull;

use \jtl\Connector\Plugin\IPlugin;
use \Symfony\Component\EventDispatcher\EventDispatcher;
use \paymentpull\listener\CustomerOrderListener;
use \jtl\Connector\Event\CustomerOrder\CustomerOrderAfterPullEvent;

class paymentpull implements IPlugin
{
    public function registerListener(EventDispatcher $dispatcher)
    {
        $dispatcher->addListener(CustomerOrderAfterPullEvent::EVENT_NAME, [
            new CustomerOrderListener(),
            'onCustomerOrderAfterPullAction'
        ]);
    }
}
?>

  • Unterordner listener mit der Datei CustomerOrderListener.php drin:
Code:
<?PHP
namespace paymentpull\listener;

use \jtl\Connector\Event\CustomerOrder\CustomerOrderAfterPullEvent;
/* use \jtl\Connector\Shopware\Utilities\IdConcatenator; */
use \jtl\Connector\Core\Logger\Logger;
use \jtl\Connector\Formatter\ExceptionFormatter;
use \jtl\Connector\Core\Utilities\Language as LanguageUtil;

class CustomerOrderListener
{
    public function onCustomerOrderAfterPullAction(CustomerOrderAfterPullEvent $event)
    {

        if (strlen($event->getCustomerOrder()->getCustomerOrderId()->getEndpoint()) == 0) {
            return;
        }


        try {
            // Extend array here
              protected function paymentModuleCode($data)
                    { 
                       // _assignProductData ist die bestehende Funktion die ergänzt wird
                       parent::paymentModuleCode($data);
                       
                        if ($data['payment_method'] == 'paypal3') {
                            return 'Zahlung via Paypal';
                        }
                       
                        if ($data['payment_method'] == 'pm_direct_debit') {
                            return 'Vorkasse';
                        }
                    }
           
            } catch (\Exception $e) {
            Logger::write(ExceptionFormatter::format($e), Logger::WARNING, 'plugin');
        }
    }
}
?>
 

daniel.jtl

Moderator
12. März 2014
1.277
28
Ja, also auf die Weise kann das auch nicht funktionieren.
Du kannst keine Methode in einem try Block schreiben.
Auch der Aufruf von paymentModuleCode führt so zu gar nichts.
Am Besten erstmal die absoluten Basics und Grundlagen der Programmierung angucken...
 

bork

Sehr aktives Mitglied
26. Januar 2007
831
97
Hab das mit dem try block aus dem Shopware Beispiel Connector. Also dann ohne. Und wenn ich nicht am paymentModuleCode ansetze, dann vielleicht direkt am Payment Array? So gehts auch nicht:

Code:
<?PHP
namespace paymentpull\listener;

use \jtl\Connector\Event\CustomerOrder\CustomerOrderAfterPullEvent;
/* use \jtl\Connector\Shopware\Utilities\IdConcatenator; */
use \jtl\Connector\Core\Logger\Logger;
use \jtl\Connector\Formatter\ExceptionFormatter;
use \jtl\Connector\Core\Utilities\Language as LanguageUtil;

class CustomerOrderListener
{
    public function onCustomerOrderAfterPullAction(CustomerOrderAfterPullEvent $event)
    {

        if (strlen($event->getCustomerOrder()->getCustomerOrderId()->getEndpoint()) == 0) {
            return;
        }

             $paymentMapping[] = 'paypal3' => 'paypalplus';
             $moneyorder_replace = array('moneyorder' => 'banktransfer');
             $paymentMapping = array_replace($paymentMapping,$moneyorder_replace);

            catch (\Exception $e) {
            Logger::write(ExceptionFormatter::format($e), Logger::WARNING, 'plugin');
        }
    }
}
?>
 

Daniel B.

Moderator
17. Juni 2009
1.430
40
Hey,

also das es nicht klappt liegt einfach daran, dass es ein paar PHP Syntax Errors bei dir existieren.

Code:
$paymentMapping[] = 'paypal3' => 'paypalplus';

Das geht so nicht.

PHP Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW)

Bitte schau dir dazu die PHP Doku einmal an --> http://php.net/manual/de/language.types.array.php

Danach hast du ein Catch aber kein Try. Das funktioniert so in PHP auch nicht.
 
  • Gefällt mir
Reaktionen: bork

bork

Sehr aktives Mitglied
26. Januar 2007
831
97
Hallo Daniel B.

Gerade nochmal mein PHP für Dummies Buch rausgekramt und dann in einer separaten Testumgebung gebastelt. Da funktioniert es jetzt, aber im Plugin-System wird's immer noch ignoriert:

Code:
<?PHP
namespace paymentpull\listener;

use \jtl\Connector\Event\CustomerOrder\CustomerOrderAfterPullEvent;
/* use \jtl\Connector\Shopware\Utilities\IdConcatenator; */
use \jtl\Connector\Core\Logger\Logger;
use \jtl\Connector\Formatter\ExceptionFormatter;
use \jtl\Connector\Core\Utilities\Language as LanguageUtil;

class CustomerOrderListener
{
    public function onCustomerOrderAfterPullAction(CustomerOrderAfterPullEvent $event)
    {

        if (strlen($event->getCustomerOrder()->getCustomerOrderId()->getEndpoint()) == 0) {
            return;
        }

            $paymentMapping['paypal3'] = 'Paypal';
            $paymentMapping['moneyorder'] = 'Vorkasse-Bankueberweisung';

            catch (\Exception $e) {
            Logger::write(ExceptionFormatter::format($e), Logger::WARNING, 'plugin');
        }
    }
}
?>

Irgendwas scheint da grundsätzlich noch nicht zu stimmen. Die Plugin-Vorlage war ja ein Shopware-Plugin. Fehlt noch was Gambio-Spezifisches oder braucht man vielleicht hierfür noch ein Gambio-Äquivalent?
use \jtl\ Connector\Shopware\Utilities\IdConcatenator;

Danke für einen Tipp!
VG
Bork
 

daniel.jtl

Moderator
12. März 2014
1.277
28
Der Syntax ist immer noch komplett falsch. Ein Catch-Block kann nicht ohne Try-Block existieren.

Ganz ehrlich und in Anbetracht des bisherigen Verlaufs dieses Threads:
Es mangelt offenbar leider vollkommen am Verständnis was Programmier-Grundlagen betrifft. Von der Funktionsweise und Komplexität des Connectors mal ganz abgesehen.
Ich würde dir sehr dazu raten dich an einen Service-Partner oder einen fähigen Entwickler zu wenden, da ich es für sehr gefährlich halte ohne dem notwendigen Wissen an Dingen wie Zahlungsdaten zu basteln...
 

bork

Sehr aktives Mitglied
26. Januar 2007
831
97
Es mangelt offenbar leider vollkommen am Verständnis was Programmier-Grundlagen betrifft.

Das ist richtig. Habe ich ja auch schon mehrfach geschrieben. Leider habe ich bisher niemanden gefunden, der das machen kann. Mehrere ausgewiesene PHP Experten mit exzellenten Feedback-Profilen von Upwork.com mit OOP und symfony-Kenntnissen haben sich daran die Zähne ausgebissen, und ich habe auch schon mit ein paar von euren Servicepartnern telefoniert, die sich auch mit Plugins beschäftigen sollen. Wenn man die anrufen, haben die aber entweder von dem Gambio Connector noch nie was gehört, machen einem ein 5000,- EUR Angebot für das Hinzufügen einer Zahlungsmethode oder versuchen, einem einen neuen Shopware Shop zu verkaufen. Zwei studierte befreundete Wirtschaftsinformatiker haben sich das auch schonmal grob angesehen und waren ratlos bei diesem Event-Gedöns und phar Archiv etc.

Habe auch schon mehrere Versuche unternommen, das Phar Archiv zu entpacken und die Änderungen direkt im Core durchzuführen, aber diese Composer-Abhängigkeiten kann ich ohne Webserver mit Root-Zugriff bzw. ohne ein voll konfiguriertes XAMPP auch nicht ohne weiteres mal eben erzeugen, geschweige denn dass es wieder nur Raterei wäre und du immer betonst, dass das nicht zukunftstauglich ist und du davon abrätst.

Hier in eurem Stellenausschreibungs-Forum habe ich auch schon gepostet, ob sich da jemand gegen Bezahlung mal dransetzt: https://forum.jtl-software.de/forums/dienstleistung-jobs-und-aehnliches.73/ - keine Resonanz.

Habe ja auch schon ein paar Mal per PN oder Post darum gebeten, einen Servicepartner zu benennen, der Plugins für die neuen Connectoren schreibt, aber vermutlich gibt es keinen.

Fakt ist: Ich schlage mich seit etwa Februar mit so simplen kleinen Anpassungen herum und komme nicht weiter. Was schlägst du mir vor außer einen Crashkurs in PHP, für den ich leider zu wenig Zeit habe?
 

bork

Sehr aktives Mitglied
26. Januar 2007
831
97
Keine Methode in einem try Block und kein catch ohne try, ok. Habe mir gerade die Ausnahmebehandlung in PHP durchgelesen. Dann muss ich wohl ein try ohne Methode machen oder auf try/catch komplett verzichten. So vielleicht?

Code:
<?PHP
namespace paymentpull\listener;

use \jtl\Connector\Event\CustomerOrder\CustomerOrderAfterPullEvent;
/* use \jtl\Connector\Shopware\Utilities\IdConcatenator; */
use \jtl\Connector\Core\Logger\Logger;
use \jtl\Connector\Formatter\ExceptionFormatter;
use \jtl\Connector\Core\Utilities\Language as LanguageUtil;

class CustomerOrderListener
{
    public function onCustomerOrderAfterPullAction(CustomerOrderAfterPullEvent $event)
    {

        if (strlen($event->getCustomerOrder()->getCustomerOrderId()->getEndpoint()) == 0) {
            return;
        }
       
        try {

            $paymentMapping['paypal3'] = 'Paypal';
            $paymentMapping['moneyorder'] = 'Vorkasse-Bankueberweisung';
        }

            catch (\Exception $e) {
            Logger::write(ExceptionFormatter::format($e), Logger::WARNING, 'plugin');
        }
    }
}
?>
 

daniel.jtl

Moderator
12. März 2014
1.277
28
Das ist bedauerlich dass du dann anscheinend keine kompetenten Entwickler finden konntest.
Bezüglich unserer SPs kannst du mir gerne per PN mal schreiben um wen es sich da konkret handelt. Denn da werden wir dann mal der Sache auf den Grund gehen, warum jemand angibt Kenntnisse in der Connector-Plugin-Entwicklung zu haben, und dann jedoch mit einer derartigen Aufgabe offenbar überfordert ist...

Das Event-System in dieser Form ist in jedem Fall ein absoluter Standard, der so ähnlich auch in unzähligen anderen Projekten zum Einsatz kommt.
Gerne kann ich dir auch per PN unsere eigenen Konditionen nennen für individuelle Anpassungen...
 

Verkäuferlein

Sehr aktives Mitglied
29. April 2012
2.344
839
Unsere Erfahrungen bzgl. Connector und Anpassungen sind derzeit leider ähnlich. Entweder sind die Programmierer ausgebucht oder nicht erfahren genug in OOP bzw. kommen sie nicht mit dem Connector klar.

Servicepartner haben wir aber bisher - mangels Empfehlung - auch noch keinen befragt.

@bork
Hast Du es denn schon einmal bei sfxonline probiert. Die sind ja immerhin offiziell benannter SP für modified und damit auch einem XT-basierten Shop. Ich schiebe das schon länger vor mir her, dort mal anzufragen.

Für Gambio scheint es ja keinen offiziell benannten SP zu geben.
 

bork

Sehr aktives Mitglied
26. Januar 2007
831
97
Hallo Verkäuferlein,

sfxonline habe ich vorhin nicht erreicht, habe aber nochmal ein paar Servicepartner angerufen und jetzt bei einem Hoffnung. Das klärt sich Anfang der Woche. Wenn ich Erfolg habe bei der Suche, berichte ich hier. Wenn das auch nichts wird, beauftrage ich JTL, auch wenn die buchbaren Programmier-Pakete recht groß sind.

PS: Mein letzter Plugin-Versuch von heute Mittag bewirkt auch nichts.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Plugin Konfigurator für Breite x Höhe Plugins für JTL-Shop 6
Neu JTL PayPal: Plugin - Bestellungen werden nicht angezeigt. Fehlermeldung "Unable to load config 'file:.conf'" Plugins für JTL-Shop 2
Neu Plugin für Boomerang Versandverpackungen Plugins für JTL-Shop 1
Neu Netto für Händler gleich, Brutto für Endkunden - Plugin oder andere Alternative? Allgemeine Fragen zu JTL-Shop 0
Neu 💙 Neues Plugin: Wunschzettel Plus (Wunschzettelauswahl direkt am Artikel) Plugins für JTL-Shop 0
Neu Paypal Plugin Version 1.2.0 läuft und 1.4.0. läuft nicht auf derselben Umgebung Plugins für JTL-Shop 0
Neu Fehlermeldung nach Bestellabschluss durch Plugin Gelöste Themen in diesem Bereich 7
Neu Neues Plugin: Google Translate / Übersetzer (DSGVO-konform und weitere Features) Plugins für JTL-Shop 2
Neu Händlerbund Plugin lässt sich nicht installieren Shop ver. 5.3.0 Plugins für JTL-Shop 1
Neu Eigene Seiten mit Plugin erstellen Technische Fragen zu Plugins und Templates 1
Neu Neues Plugin: Instagram-Feed Portlet (Als Galerie- oder Slideransicht und weitere Features) + 3x kostenlose Lizenzen Plugins für JTL-Shop 4
Neu 🌟Neues Plugin: Bounce Landingpage Plugins für JTL-Shop 5
Neu 504 Gateway Time-Out nginx bei Plugin-Updates Gelöste Themen in diesem Bereich 10
Neu Unterstützung bei JTL5-Shop-Überarbeitung gesucht - Template/Plugin uvm. Dienstleistung, Jobs und Ähnliches 1
Neu Erledigt - Plugin PayPal Checkout, Update auf 1.4.0, Komplettabsturz Plugins für JTL-Shop 1
Neu Paypal Plugin erzeugt "Quirks Mode" Betrieb / Pflege von JTL-Shop 0
Neu Mail-Versand & Plugin Doku Technische Fragen zu Plugins und Templates 2
Neu Variationen im Shop Auswahl zurücksetzen (Plugin?) Betrieb / Pflege von JTL-Shop 3
Neu NEU ✔️ PDF-Angebots-Plugin für den JTL-Shop 5 - PDF Angebote von der Produktseite oder aus dem Warenkorb heraus generieren B2C / B2B Plugins für JTL-Shop 5
Neu Neues Plugin: Hersteller Slider Portlet (Zentrierungs- oder Schwarz/Weiß-Modus, Responsive Anpassung..) inkl. 5 kostenlosen Lizenzen Plugins für JTL-Shop 4
Neu Plugin KBA Finder Implementierung/Darstellungsänderung Plugins für JTL-Shop 0
Neu Custom Template für Custom Artikel mit Plugin? Plugins für JTL-Shop 0
Neu JTL Connector Plugin Aktivierunf [Fehlermeldung] WooCommerce-Connector 3
Neu Erfahrung mit LS-Cache Plugin Technische Fragen zu Plugins und Templates 10
Neu 🌟Neues Plugin: FRASPY Altersprüfung & IdentitätsCheck Plugins für JTL-Shop 3
Neu 🎉 Neues Plugin: "Versandkosten und Lieferzeit automatisch beziehen - UPS Extension" 🎉 Plugins für JTL-Shop 2

Ähnliche Themen