HubertLohmaier74 / DHL_entwicklerportal_api

Creating DHL labels using DHL Entwickler Portal API
GNU General Public License v3.0
2 stars 3 forks source link

Missing variable in addCustomer() and createShipmentRequest() #5

Open individole opened 2 years ago

individole commented 2 years ago

International shipments suspect in createShipmentRequest(): $myCustomer['addressAddition']; $myCustomer['dispatchingInformation'];

$mycustomer is created by addCustomer() and does not serve these varaibles.

HubertLohmaier74 commented 2 years ago

No, $mycustomer is NOT created by addCustomer()

And sorry, but I do not understand what you wanted to say at all. Where' the problem in detail?

HubertLohmaier74 commented 2 years ago

Any further reaction? I mean I have the script is in daily use and it is working without error or warning, so I would need more info to your complaint

individole commented 2 years ago

Sorry, i was on vacation for some days. I did not explain this issue good enough.

On line 490+491 of dhl_gks_labelcreator.php your code expects array variables 'addressAddition' and 'dispatchingInformation'. $receiver['Address']['addressAddition'] = $myCustomer['addressAddition']; $receiver['Address']['dispatchingInformation'] = $myCustomer['dispatchingInformation'];

PHP does not receive these, cause they are not initialized somewhere in all of your files. Where should/do they come from?

I am not so deep in your code, but if you wish we could talk easier by speaking german?

HubertLohmaier74 commented 2 years ago

$myCustomer wird als Parameter an createShipmentRequest() übergeben, und zwar in der Datei dhl_gks_labelcreator.php.

Die Werte dazu werden in der Datei dhl_gks_shipmentconfigurator.php ermittelt. Und zwar in der Zeile: 483: $customer = $this->getCustomerFromBinding($shipment);

und dann gesetzt in Zeile: 489: $shipmentRequest = $dhl->createShipmentRequest($shipment, $customer , $export);

HubertLohmaier74 commented 2 years ago

Alles bestens!

individole commented 2 years ago

Hallo Hubert,

bitte sei mir nicht böse, aber das wird mir hier etwas zu fummelig. Ich würde das ganze gern für mich aufräumen und die Fehler ausmerzen, da ich das Ganze längst in ein Live genutztes Tool eingebaut habe und es jetzt funktionieren muss.

Insbesondere unter PHP 8.0+ sind die ganzen fehlenden Keys/Values und unsaubere Schreibweisen einfach ein echtes Problem. Das geht leider so weit, dass noch nicht mal ein Error-Response ausgelöst wird und das Debugging eine ziemliche Herausforderung darstellt.

2 Beispiele in dhl_gks_shipmentconfigurator.php:

1.) Zeile 206: if ($phone[0] == "+")

$phone ist immer ein String. Sowas lässt sich überhaupt nicht wie ein Array behandeln. Daher ja mein früherer Vorschlag, der auch nicht elegant ist, aber wenigstens funktioniert: if (substr(trim($phone), 0, 1) == "+")

2.) Zeile 213:`` Hier wird $customer_details definiert. Dieses Array enthält NICHT die später benötigten Keys "addressAddition" und "dispatchingInformation". Diese werden in dhl_gks_labelcreator.php in Zeile 490 und 491 aber explizit angefordert. Zumindest PHP 8.0 toleriert das Fehlen von Array-Keys schlicht nicht und die Scriptausführung endet an dieser Stelle.

HubertLohmaier74 commented 2 years ago

Hallo. Ich bin nicht böse und bitte das ebenfalls nicht zu sein! Für deine Situation kann ich erst mal nichts. Ebenso bitte ich um Verständnis, dass ich für ein kostenlos zur Verfügung gestelltes Tool nur so viel Zeit aufbringen will, als ich ohne Schaden an Job, Familie mit 3 Kindern und Freizeit erübrigen will. Das mal vorab...

Nun zur Problemstellung:

Wenn es denn wirklich mit PHP 8 so hakt und es extrem eilt, dann würde ich für's Erste versuchen:

  1. Einen anderen Server zu nehmen mit PHP7.x
  2. Möglicherweise bietet sich es auch an, einfach die Dateiendung in .PHP7 zu ändern. Oft interpretieren die Server dann PHP in entsprechender Version.
  3. Oder die PHP-Version über die .htaccess Datei umzustellen (Beispiel: https://dev.weblication.de/dev/blog/So-werden-php-Dateien-ueber-htaccess-ueber-PHP-5-interpretiert.php)

Mein Internetprovider hat noch PHP 7.x im Einsatz. Darum merke ich von den hier beschriebenen Problemen anscheinend nichts. Im Weiteren kann ich dir aber anbieten, mir einmal die neueste XAMPP Version für PHP 8 zu installieren und mir das Skript bei Gelegenheit einmal darüber anzusehen. Aber nicht von heute auf morgen.

Zu deiner Kritik muss ich allerdings anmerken, dass ein String von Haus aus ein Array ist. Das sollte man wissen, wenn man programmiert. (String = array of chars.) Gerade bei einer von C abgeleiteten Sprachsyntax. Und da kann man wohl über den Index auf die einzelnen Zeichen zugreifen. Für Unsauberheiten entschuldige ich mich, auch wenn das eigentlich nicht nötig habe. Ich habe nicht alles selber geschrieben, vieles übernommen und mir hat es für meinen Bedarf ausserdem gereicht, dass es - trotz aller möglicherweise existierenden Mängel - zuverlässig lief.

Es sei aber auch angemerkt, dass es hier kein Copyright gibt. Du bist gerne frei, deine eigene Version daraus zu stricken. Ich möchte dann lediglich bitten, sie mir im Anschluss zugänglich zu machen. Vielleicht kann man sich bei der weiteen Entwicklung ja gegenseitig behilflich sein.