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
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