PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [BUG] DHL Geschäftskundenversand Fehler 214 wird nicht abgefangen => PHP Error



simtec
23.02.2018, 13:07
Der DHL Fehler 214 wird nicht abgefangen und es kommt eine PHP Error Msg
Invalid argument supplied for foreach()

seit GX 3.8.0.0
PHP7

GXMainComponents/Controllers/HttpView/Admin/GeschaeftskundenversandController.inc.php

Zeile 511 wird davon ausgegangen, dass es ein Object mit LabelData gibt, dies ist in dem Fehlerfall aber nicht der Fall.



if((int)$response->Status->statusCode === 0)
{
[....]
}
else
{
$statusMessage = '';
foreach($response->CreationState->LabelData->Status->statusMessage as $partMessage)
{
$statusMessage .= !empty($statusMessage) ? ', ' : '';
$statusMessage .= (string)$partMessage;
}
$GLOBALS['messageStack']->add_session(sprintf('%s - %s (%s)',
$this->languageTextManager->get_text('gkv_error_creating_label'),
$statusMessage,
(string)$response->Status->statusCode), 'error');
# $GLOBALS['messageStack']->add_session(sprintf('<pre>%s</pre>', htmlspecialchars(print_r($response, true))), 'error');
}



Response sieht so aus:

USER NOTICE: "CreateShipmentOrder response:
stdClass Object
(
[Version] => stdClass Object
(
[majorRelease] => 2
[minorRelease] => 0
)

[Status] => stdClass Object
(
[statusCode] => 214
[statusText] => invalid printer settings - please adjust your
printer settings in the DHL business customer portal "Sending > Basic Settings > General" and save
them in any case with occupied user.

[statusMessage] => Nicht unterstützte Pollingclient Druckkonfiguration.
)

)


Workaround/Fix
if Prüfung einbauen.
Else weil sonst doppelte Status Nachricht kommt weil in LabelData die gleiche MSG steht oder eine genauere.



$statusMessage = '';
if(isset($response->CreationState->LabelData)){
foreach($response->CreationState->LabelData->Status->statusMessage as $partMessage)
{
$statusMessage .= !empty($statusMessage) ? ', ' : '';
$statusMessage .= (string)$partMessage;
}
}else{
$statusMessage .= (string)$response->Status->statusMessage;
}


$GLOBALS['messageStack']->add_session(sprintf('%s - %s (%s)',
$this->languageTextManager->get_text('gkv_error_creating_label'),
$statusMessage,
(string)$response->Status->statusCode), 'error');



Git Change 3.7.2.0 auf 3.8.0.0 mit meinem Fix
689

rf-musik
23.02.2018, 19:48
Hallo,
das sollte in der 3.8.0.1 Version behoben sein.

KlausK
23.02.2018, 20:37
Jau, habe ich gerade hochgeladen :D