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

bork

Sehr aktives Mitglied
26. Januar 2007
848
103
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
848
103
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
848
103
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
848
103
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
848
103
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
848
103
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.603
1.054
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
848
103
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 Google Shopping (Plugin) Export immer leer Allgemeine Fragen zu JTL-Shop 4
Neu Sendcloud Plugin immer im Tab fehlerhaft - Lizenz abgelaufen Plugins für JTL-Shop 0
Neu Texteditor Hinweis Plugin von Webstollen Plugins für JTL-Shop 0
Neu Welches PlugIn für ein besseres Google Ranking? Plugins für JTL-Shop 2
Neu Händlerbund Plugin: "Zahlung und Versand" wird nicht automatisch übernommen Plugins für JTL-Shop 2
Neu Die Zahlungsart SOFORT ist eine Plugin-Zahlungsart für Mollie. Das zugehörige Plugin ist jedoch nicht installiert! Allgemeine Fragen zu JTL-Shop 0
Neu Plugin PayPal - capture failed for method PayPal Checkout Plugins für JTL-Shop 0
Neu Plugin-Update 2.4.1: JTL Exportformat Google Shopping Plugins für JTL-Shop 6
Neu Paypal Plugin läßt sich nicht installieren - SQL Fehler Plugins für JTL-Shop 2
Neu Paypal Plugin 2.0.1 Merachant JTL-Shop - Fehler und Bugs 10
Neu Plugin Fehler JTL-Shop - Fehler und Bugs 7
Neu PayPal Plugin 2.0 - Vaulting - Ist IMMER ein neues Onboarding nötig? Wie prüfen, ob OK? Plugins für JTL-Shop 6
Neu Plugin - Kindartikel in der Artikelübersicht anzeigen - SHOP-475 Plugins für JTL-Shop 8
Neu 🌟Neues Plugin: Produkt FAQ Plugins für JTL-Shop 0
Neu Suche Plugin: Zusatzartikel mit einfacher Variationsauswahl Plugins für JTL-Shop 8
Neu Neues Plugin - Der ultimative Super-Slider Plugins für JTL-Shop 0
Neu Plugin "Verwalte deinen JTL Shop mit Excel Dateien" geht wohl nicht mit JTL-Shop 5.4.1 Plugins für JTL-Shop 1
Neu Update 5..50 + Plugin: JTL Exportformat Google Shopping Export Stopp JTL-Shop - Fehler und Bugs 8
Neu JTL-Shop 5.5.0 PayPal Plugin Installation / Updates von JTL-Shop 2
Neu Update auf Shop 5.5.0 in Kombination mit Plugin "AmazonPay" nicht möglich - 500er Fatal Error JTL-Shop - Fehler und Bugs 13
Neu Test Plugin lässt sich weder installieren, noch löschen Plugins für JTL-Shop 0
Neu ChatGPT Plugin Plugins für JTL-Shop 0
Neu Plugin Produktsicherheitsverordnung (GPSR) Plugin für den JTL-Shop 5 nicht PHP 8.4 fähig Technische Fragen zu Plugins und Templates 4

Ähnliche Themen