Success-страница после оформления заказа
        Сделал по данному мануалу:
1. добавил параметр в системные minishop2

2. создал файл customorder.class.php в /core/components/minishop2/custom/order/ и зарегистрировал по документации через console

3. Прописал в настройках

4. Проверял как указано делая опечатку, ошибка 500 есть, класс подключен. Вот код файла нового обработчика:
MODX Revolution 2.8.4-pl
Minishop2 4.1.4-pl
Может кто подсказать в чем ошибка?
    
    
                                                                                
            1. добавил параметр в системные minishop2

2. создал файл customorder.class.php в /core/components/minishop2/custom/order/ и зарегистрировал по документации через console

3. Прописал в настройках

4. Проверял как указано делая опечатку, ошибка 500 есть, класс подключен. Вот код файла нового обработчика:
<?php
class customOrderInterface extends msOrderHandler {
    public function submit($data = [])
    {
        $response = $this->ms2->invokeEvent('msOnSubmitOrder', [
            'data' => $data,
            'order' => $this,
        ]);
        if (!$response['success']) {
            return $this->error($response['message']);
        }
        if (!empty($response['data']['data'])) {
            $this->set($response['data']['data']);
        }
        $response = $this->getDeliveryRequiresFields();
        if ($this->ms2->config['json_response']) {
            $response = json_decode($response, true);
        }
        if (!$response['success']) {
            return $this->error($response['message']);
        }
        $requires = $response['data']['requires'];
        $errors = [];
        foreach ($requires as $v) {
            if (!empty($v) && empty($this->order[$v])) {
                $errors[] = $v;
            }
        }
        if (!empty($errors)) {
            return $this->error('ms2_order_err_requires', $errors);
        }
        $user_id = $this->ms2->getCustomerId();
        if (empty($user_id) || !is_int($user_id)) {
            return $this->error(is_string($user_id) ? $user_id : 'ms2_err_user_nf');
        }
        $cart_status = $this->ms2->cart->status();
        if (empty($cart_status['total_count'])) {
            return $this->error('ms2_order_err_empty');
        }
        $delivery_cost = $this->getCost(false, true);
        $cart_cost = $this->getCost(true, true) - $delivery_cost;
        $num = $this->getNewOrderNum();
        /** @var msOrder $msOrder */
        $msOrder = $this->storageHandler->getForSubmit(
            compact('user_id', 'num', 'cart_cost', 'cart_status', 'delivery_cost')
        );
        $response = $this->ms2->invokeEvent('msOnBeforeCreateOrder', [
            'msOrder' => $msOrder,
            'order' => $this,
        ]);
        if (!$response['success']) {
            return $this->error($response['message']);
        }
        if ($msOrder->save()) {
            $response = $this->ms2->invokeEvent('msOnCreateOrder', [
                'msOrder' => $msOrder,
                'order' => $this,
            ]);
            if (!$response['success']) {
                return $this->error($response['message']);
            }
            if ($this->storage === 'session') {
                $this->ms2->cart->clean();
                $this->clean();
            }
            if (empty($_SESSION['minishop2']['orders'])) {
                $_SESSION['minishop2']['orders'] = [];
            }
            $_SESSION['minishop2']['orders'][] = $msOrder->get('id');
            // Trying to set status "new"
            $status_new = $this->modx->getOption('ms2_status_new', null, 1);
            $response = $this->ms2->changeOrderStatus($msOrder->get('id'), $status_new);
            if ($response !== true) {
                return $this->error($response, ['msorder' => $msOrder->get('id')]);
            }
            // Reload order object after changes in changeOrderStatus method
            /** @var msOrder $msOrder */
            $msOrder = $this->modx->getObject('msOrder', ['id' => $msOrder->get('id')]);
            /** @var msPayment $payment */
            $payment = $this->modx->getObject(
                'msPayment',
                ['id' => $msOrder->get('payment'), 'active' => 1]
            );
            if ($payment) {
                $response = $payment->send($msOrder);
                if ($this->config['json_response']) {
                    @session_write_close();
                    echo is_array($response) ? json_encode($response) : $response;
                    die();
                }
                if (!empty($response['data']['redirect'])) {
                    $this->modx->sendRedirect($response['data']['redirect']);
                }
                if (!empty($response['data']['msorder'])) {
                    $redirect = $this->modx->context->makeUrl(
                        $this->modx->resource->id,
                        ['msorder' => $response['data']['msorder']]
                    );
                    $this->modx->sendRedirect($redirect);
                }
                $this->modx->sendRedirect($this->modx->context->makeUrl($this->modx->resource->id));
            } else {
                if ($this->config['json_response']) {
                    /** Вот мои изменения ниже */
                    $success_page = $this->modx->getOption('ms2_order_success_page');
                    if(is_numeric($success_page)) {
                        if ($this->modx->getCount('modResource', array('id'=>$success_page,'published' => true,'deleted' => false))) {
                            $url = $this->modx->context->makeUrl($success_page);
                            return $this->success('', array('redirect' => $url.'?msorder='.$order->get('id')));
            	        }
                    }
                    return $this->success('', ['msorder' => $msOrder->get('id')]);
                }
                $redirect = $this->modx->context->makeUrl(
                    $this->modx->resource->id,
                    ['msorder' => $msOrder->get('id')]
                );
                $this->modx->sendRedirect($redirect);
            }
            return $this->success();
        }
        return $this->error();
    }
}Но редиректа не происходит… Так же обновляется страница с ?msorder=ID заказаMODX Revolution 2.8.4-pl
Minishop2 4.1.4-pl
Может кто подсказать в чем ошибка?
Комментарии: 8
                Вот же у тебя условие написано по которому твой код должен отрабатывать
                    if ($this->config['json_response']) {}По умолчанию оно false, ты где-то меняешь параметр json_response?            
                Нет, всё остальное стандартно            
                    
                Так значит надо либо условие убрать или установить значение true.            
                    
                Залоггируйте каждый if используя
$this->modx->log(1, print_r('переменная или строка/этап',1))
Чтобы посмотреть куда заходит код и что он получает
                    $this->modx->log(1, print_r('переменная или строка/этап',1))
Чтобы посмотреть куда заходит код и что он получает
//Например этот участок кода
if ($this->config['json_response']) {
    /** Вот мои изменения ниже */
    $success_page = $this->modx->getOption('ms2_order_success_page');
    $this->modx->log(1, print_r($success_page,1))
    if(is_numeric($success_page)) {
        if ($this->modx->getCount('modResource', array('id'=>$success_page,'published' => true,'deleted' => false))) {
            $this->modx->log(1, print_r('1-1',1))
            $url = $this->modx->context->makeUrl($success_page);
            return $this->success('', array('redirect' => $url.'?msorder='.$order->get('id')));
	}
    }
    $this->modx->log(1, print_r('1-2',1))
    return $this->success('', ['msorder' => $msOrder->get('id')]);
}
$this->modx->log(1, print_r('2-1',1))
$redirect = $this->modx->context->makeUrl(
    $this->modx->resource->id,
    ['msorder' => $msOrder->get('id')]
);
$this->modx->log(1, print_r('2-2'.$redirect,1))
$this->modx->sendRedirect($redirect);А так у меня недавно была проблема с редиректом, но пока отложилась эта проблема, может что-то поменялось в обновлениях нынче раз не у меня одного проблема появилась.            
                Что-то у меня уже с 1ой такой записью (
                    $this->modx->log(1, print_r($success_page,1))) ошибка 500            
                Странно, видимо как-то надо еще подключать
ну как вариант еще в файл сохранять
                    // попробовать так вызывать, указать явно PDO::LOG_LEVEL_ERROR
$this->modx->log(xPDO::LOG_LEVEL_ERROR, '1-1');
// тут я пальцем в небо, какие из этих строчек может помогут, но сначала то что выше написал попробуйте
$this->modx->getService('error','error.modError');
$this->modx->setLogLevel(xPDO::LOG_LEVEL_ERROR);ну как вариант еще в файл сохранять
<?
file_put_contents(MODX_ASSETS_PATH.'log.txt', print_r('1-1',1), FILE_APPEND | LOCK_EX);            
                Точки с запятой нет после инструкии $this->modx->log(1, print_r($success_page,1))
надо
                    надо
$this->modx->log(1, print_r($success_page,1));            
                :)            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.