if (!$return['TRRETURNURLKO']) {
        $return['TRRETURNURLKO'] = Tools::getValue('TRRETURNURLKO');
    }
    /* api 4.0 */
    foreach ($so->getFields(SCFields::REQUIRED) as $field) {
        if (!isset($return[$field])) {
            $errors_list[] = $so->l('This key is required for Socolissimo:') . $field;
        }
    }
} else {
    foreach ($errors_codes as $code) {
        $errors_list[] = $so->l('Error code:') . ' ' . $so->getError($code);
    }
}
if (empty($errors_list)) {
    if ($so->isCorrectSignKey($return['SIGNATURE'], $return) && $so->context->cart->id && saveOrderShippingDetails($so->context->cart->id, (int) $return['TRCLIENTNUMBER'], $return, $so)) {
        $trparamplus = explode('|', $return['TRPARAMPLUS']);
        if (count($trparamplus) > 1) {
            $so->context->cart->id_carrier = (int) $trparamplus[0];
            if ($trparamplus[1] == 'checked' || $trparamplus[1] == 1) {
                /* value can be "undefined" or "not checked" */
                $so->context->cart->gift = 1;
            } else {
                $so->context->cart->gift = 0;
            }
        } elseif (count($trparamplus) == 1) {
            $so->context->cart->id_carrier = (int) $trparamplus[0];
        }
        if ((int) $so->context->cart->gift && Validate::isMessage($trparamplus[2])) {
            $so->context->cart->gift_message = strip_tags($trparamplus[2]);
        }
$nonBlockingError = array(133, 131, 517, 516, 515, 514, 513, 512, 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, 501);
$so = new Socolissimo();
$so_fields = new SCFields(Tools::getValue('DELIVERYMODE'));
$return = array();
foreach ($_POST as $key => $val) {
    if ($so_fields->isAvailableFields($key)) {
        $return[strtoupper($key)] = stripslashes($val);
    }
}
$return['TRRETURNURLKO'] = Tools::getValue('TRRETURNURLKO');
if (isset($return['SIGNATURE']) and isset($return['CENAME']) and isset($return['DYPREPARATIONTIME']) and isset($return['DYFORWARDINGCHARGES']) and isset($return['TRCLIENTNUMBER']) and isset($return['ORDERID']) and isset($return['TRCLIENTNUMBER'])) {
    if (!isset($return['ERRORCODE']) or $return['ERRORCODE'] == NULL or in_array($return['ERRORCODE'], $nonBlockingError)) {
        if ($so_fields->isCorrectSignKey($return['SIGNATURE'], $return)) {
            global $cookie;
            if (isset($cookie) or is_object($cookie)) {
                if (saveOrderShippingDetails(intval($cookie->id_cart), intval($return['TRCLIENTNUMBER']), $return, $so_fields)) {
                    $TRPARAMPLUS = explode('|', $return['TRPARAMPLUS']);
                    if (count($TRPARAMPLUS) > 1) {
                        $cart->id_carrier = (int) $TRPARAMPLUS[0];
                        if ($TRPARAMPLUS[1] == "true" || $TRPARAMPLUS[1] == 1) {
                            // value can be "undefined" or "not checked"
                            $cart->gift = 1;
                        } else {
                            $cart->gift = 0;
                        }
                    } elseif (count($TRPARAMPLUS) == 1) {
                        $cart->id_carrier = (int) $TRPARAMPLUS[0];
                    }
                    if ($cart->gift && $TRPARAMPLUS[2]) {
                        $cart->gift_message = strip_tags($TRPARAMPLUS[2]);
                    }
$validReturn = array('PUDOFOID', 'CECIVILITY', 'CENAME', 'CEFIRSTNAME', 'CECOMPANYNAME', 'CEEMAIL', 'CEPHONENUMBER', 'DELIVERYMODE', 'CEADRESS1', 'CEADRESS2', 'CEADRESS3', 'CEADRESS4', 'CEZIPCODE', 'CEDOORCODE1', 'CEDOORCODE2', 'CEENTRYPHONE', 'DYPREPARATIONTIME', 'DYFORWARDINGCHARGES', 'ORDERID', 'SIGNATURE', 'ERRORCODE', 'TRPARAMPLUS', 'TRCLIENTNUMBER', 'PRID', 'PRNAME', 'PRCOMPLADRESS', 'PRADRESS1', 'PRADRESS2', 'PRZIPCODE', 'PRTOWN', 'CETOWN', 'TRADERCOMPANYNAME', 'CEDELIVERYINFORMATION', 'CEDOORCODE1', 'CEDOORCODE2');
//list of non-blocking error
$nonBlockingError = array(133, 131, 517, 516, 515, 514, 513, 512, 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, 501);
$so = new Socolissimo();
$return = array();
foreach ($_POST as $key => $val) {
    if (in_array(strtoupper($key), $validReturn)) {
        $return[strtoupper($key)] = utf8_encode(urldecode(stripslashes($val)));
    }
}
if (isset($return['SIGNATURE']) and isset($return['CENAME']) and isset($return['DYPREPARATIONTIME']) and isset($return['DYFORWARDINGCHARGES']) and isset($return['TRCLIENTNUMBER']) and isset($return['ORDERID']) and isset($return['TRCLIENTNUMBER'])) {
    if (!isset($return['ERRORCODE']) or $return['ERRORCODE'] == NULL or in_array($return['ERRORCODE'], $nonBlockingError)) {
        if ($return['SIGNATURE'] === socolissimo::make_key($return['CENAME'], (double) $return['DYPREPARATIONTIME'], $return['DYFORWARDINGCHARGES'], $return['TRCLIENTNUMBER'], $return['ORDERID'])) {
            global $cookie;
            if (isset($cookie) or is_object($cookie)) {
                if (saveOrderShippingDetails((int) $cookie->id_cart, (int) $return['TRCLIENTNUMBER'], $return)) {
                    global $cookie;
                    $cart->id_carrier = (int) $_POST['TRPARAMPLUS'];
                    if (!$cart->update()) {
                        Tools::redirect();
                    } else {
                        Tools::redirect('order.php?step=3');
                    }
                } else {
                    echo '<div class="alert error"><img src="' . _PS_IMG_ . 'admin/forbbiden.gif" alt="nok" />&nbsp;' . $so->displaySoError('999') . '
						 <p><br/><a href="' . Tools::getProtocol(true) . htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8') . __PS_BASE_URI__ . 'order.php" class="button_small" title="Retour">« Retour</a></p></div>';
                }
            } else {
                echo '<div class="alert error"><img src="' . _PS_IMG_ . 'admin/forbbiden.gif" alt="nok" />&nbsp;' . $so->displaySoError('999') . '
						 <p><br/><a href="' . Tools::getProtocol(true) . htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8') . __PS_BASE_URI__ . 'order.php" class="button_small" title="Retour">« Retour</a></p></div>';
            }
require_once _PS_MODULE_DIR_ . 'socolissimo/socolissimo.php';
$validReturn = array('PUDOFOID', 'CECIVILITY', 'CENAME', 'CEFIRSTNAME', 'CECOMPANYNAME', 'CEEMAIL', 'CEPHONENUMBER', 'DELIVERYMODE', 'CEADRESS1', 'CEADRESS2', 'CEADRESS3', 'CEADRESS4', 'CEZIPCODE', 'CEDOORCODE1', 'CEDOORCODE2', 'CEENTRYPHONE', 'DYPREPARATIONTIME', 'DYFORWARDINGCHARGES', 'ORDERID', 'SIGNATURE', 'ERRORCODE', 'TRPARAMPLUS', 'TRCLIENTNUMBER', 'PRID', 'PRNAME', 'PRCOMPLADRESS', 'PRADRESS1', 'PRADRESS2', 'PRZIPCODE', 'PRTOWN', 'CETOWN', 'TRADERCOMPANYNAME', 'CEDELIVERYINFORMATION', 'CEDOORCODE1', 'CEDOORCODE2');
//list of non-blocking error
$nonBlockingError = array(133, 131, 517, 516, 515, 514, 513, 512, 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, 501);
$so = new Socolissimo();
$return = array();
foreach ($_POST as $key => $val) {
    if (in_array(strtoupper($key), $validReturn)) {
        $return[strtoupper($key)] = utf8_encode(urldecode(stripslashes($val)));
    }
}
if (isset($return['SIGNATURE']) and isset($return['CENAME']) and isset($return['DYPREPARATIONTIME']) and isset($return['DYFORWARDINGCHARGES']) and isset($return['TRCLIENTNUMBER']) and isset($return['ORDERID']) and isset($return['TRCLIENTNUMBER'])) {
    if (!isset($return['ERRORCODE']) or $return['ERRORCODE'] == NULL or in_array($return['ERRORCODE'], $nonBlockingError)) {
        if ($return['SIGNATURE'] === socolissimo::make_key($return['CENAME'], (double) $return['DYPREPARATIONTIME'], $return['DYFORWARDINGCHARGES'], $return['TRCLIENTNUMBER'], $return['ORDERID'])) {
            if (Context::getContext()->cart->id) {
                if (saveOrderShippingDetails(Context::getContext()->cart->id, (int) $return['TRCLIENTNUMBER'], $return)) {
                    $cart = Context::getContext()->cart;
                    $TRPARAMPLUS = explode('|', Tools::getValue('TRPARAMPLUS'));
                    $cart->id_carrier = $TRPARAMPLUS[0];
                    $cart->gift = (int) $TRPARAMPLUS[1];
                    if ((int) $cart->gift) {
                        if (Validate::isMessage($TRPARAMPLUS[2])) {
                            $cart->gift_message = strip_tags($TRPARAMPLUS[2]);
                        }
                    }
                    if (!$cart->update()) {
                        Tools::redirect();
                    } else {
                        $url = _PS_VERSION_ < '1.5' ? 'order.php?' : 'index.php?controller=order&';
                        Tools::redirect($url . 'step=3&cgv=1');
                    }