Александр

Александр

С нами с 08 марта 2023; Место в рейтинге пользователей: #6769
Александр
08 марта 2023, 20:19
0
Как понял, в самом компоненте, в котором работал с контроллером.
Использовал свой код + ваши подсказки и код в другом контроллере от zoomx и все сработало.
Хотя до этого и там не работало.
Александр
08 марта 2023, 20:06
0
в итоге получилось.
Спасибо вам больше за помощь!
Александр
08 марта 2023, 18:49
0
все вызывается и работает (заказ то создается), если отключить json_response, то я получу ответ в том виде, который я отдаю, но без id новосозданного заказа.
Данный контроллер используется в api для построения фронта отдельно от modx
Александр
08 марта 2023, 18:20
0
<?php

class shopOrder2 extends shopBaseRestController
{
    public $allowedMethods = array('post');

    public function post()
    {
        
        // инициализируем miniShop2
            $scriptProperties = [
                'json_response' => 1,
            ];
        	
        	$miniShop2 = $this->modx->getService('minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
        	
        	// опции товара, если они необходимы
        	$option = array();
        	/*$option = array(
        	  "option1" => "value1",
        	  "option2" => "value2",
        	);*/
        	// инициализируем miniShop2 в текущем контексте
        	$miniShop2->initialize($this->modx->context->key, $scriptProperties);
        
        $cart = $miniShop2->cart->get();

        if (!count($cart)) {
            $result = [
                'message' => 'Корзина пуста',
                'success' => false
            ];
            return $this->failure('', $result);
        }

        //Получатель
        $email = $this->getProperty('email');
        $phone = $this->getProperty('phone');
        $receiver = $this->getProperty('name');

        //Дата и время доставки
        //$soon = (bool)$this->getProperty('soon');
        $delivery_date = $this->getProperty('delivery_date');
        $delivery_time = $this->getProperty('delivery_time');

        //Адрес
        $street = $this->getProperty('street');
        $building = $this->getProperty('building');
        $room = $this->getProperty('apartment');
        $entrance = $this->getProperty('entrance');
        $floor = $this->getProperty('floor');

        $comment = $this->getProperty('comment');

        //Доставка и оплата
        $payment = (int)$this->getProperty('payment');
        $delivery = (int)$this->getProperty('delivery');

        $miniShop2->order->add('payment', $payment);
        $miniShop2->order->add('delivery', $delivery);

        $miniShop2->order->add('receiver', $receiver);
        $miniShop2->order->add('email', $email);
        $miniShop2->order->add('phone', $phone);

        $miniShop2->order->add('soon', $soon);
        $miniShop2->order->add('delivery_date', $delivery_date);
        $miniShop2->order->add('delivery_time', $delivery_time);

        $miniShop2->order->add('street', $street);
        $miniShop2->order->add('building', $building);
        $miniShop2->order->add('room', $room);
        $miniShop2->order->add('entrance', $entrance);
        $miniShop2->order->add('floor', $floor);
        $miniShop2->order->add('comment', $comment);

        $result['r'] = json_decode($miniShop2->order->submit(),1);
        
        $result['r'] = $arr = json_decode($miniShop2->order->submit(),1);
        if($arr['success'] && $arr["data"]["msorder"] > 0){
            $msOrder = $modx->getObject('msOrder', $arr["data"]["msorder"]);
            $order = $msOrder->toArray();
            $result['orderId'] = $order;
            $resp['out'] = $pdo->parseChunk('@FILE cart/fastOrderSuccess.tpl',$arr);
        }
        $result['orderId'] = $response['data']['msorder'];
        
        return $this->success('', $result);

    }
}
Александр
08 марта 2023, 17:57
0
Не помогло, к сожалению.
Повторил ваше получение заказа и все равно тот же вывод
{"success":true,"message":"","data":{"msorder":56}}
в виде html с игнорированием вообще каких-либо конструкций вывода информации. Что само по себе очень странно.
Даже нет ошибки из-за отсутствия такого чанка как у вас (специально решил не менять, чтобы вызвать ошибку)
Александр
08 марта 2023, 16:03
0
Действительно
$scriptProperties = ['json_response' => 1];
помогает, но в таком случае ответ приходит в виде html с содержимым {«data»: {«msorder»:15}} и полностью игнорирует построение ответа.
Вот пример:
if (isset($response['success']) && $response['success'] == true) {
            $result['post'] = $this->properties;
            $result['response'] = $response;
            $result['orderId'] = $response['data']['msorder'];
            $miniShop2->cart->clean();
            return $this->success('', $result);
        }
и по идее, вывод должен быть таким только с наполненной data[]:
{
    "success": true,
    "message": "",
    "object": {
        "post": {
            "payment": "1",
            "delivery": "1",
            "name": "Алекс",
            "email": "test@test.ru"
        },
        "response": {
            "success": true,
            "message": "",
            "data": []
        },
        "orderId": null
    },
    "code": 200
}
а выведет при включенном json_response вот так:
{"success":true,"message":"","data":{"msorder":53}}
Причем в html формате.

Никак не могу решить данную проблему
Александр
08 марта 2023, 15:17
0
вот спустя почти 4 года проблема с
$miniShop2->order->submit()
осталась.
Удалось кому-то решить?