Ajax создание заказа и сохранение корзины

Здравствуйте!

Почти сделал, быстрый заказ он столкнулся с проблемой ответа $miniShop2->order->submit(), я его как бы сохраняю в переменную, но он ретурнит ответ, т.е. код после вызова submit не срабатывает т.к. уже ответил.
Ответ приходит такой
joxi.ru/gmvKvnNcv3O1X2

А должен выводить массив $resp.

Подскажите пожалуйста что не так?

JS
$.ajax({
    dataType: 'json',
    type: 'POST',
    url: urlRequest,
    data: {
        action: 'FastOrderCreate',
        form: form.serializeArray()
    },
    success: function( r ) {
        console.log( r );
        ......
  }
    });
});
PHP
$scriptProperties = array(
    'json_response' => 1,
    'max_count' => 1,
    'allow_deleted' => 0,
    'allow_unpublished' => 0
);

$miniShop2 = $modx->getService('minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
   
$option = [];
$miniShop2->initialize($modx->context->key, $scriptProperties);
$resp['tmpCart'] = $tmpCart = $miniShop2->cart->get();
$miniShop2->order->clean();
$miniShop2->cart->clean();
$miniShop2->cart->add($dataForm['id'],1,$option);
$miniShop2->order->add('receiver', htmlspecialchars($name,ENT_QUOTES));
$miniShop2->order->add('phone', $dataForm["phone"]);
$miniShop2->order->add('email', $dataForm["phone"].'@'.$_SERVER['HTTP_HOST']);
$miniShop2->order->add('payment', 1);
$miniShop2->order->add( 'delivery', 1);

/* Возвращает раньше нужного кода */
$resp['arr'] = $arr = $miniShop2->order->submit();

if($arr['success']==true && $arr["data"]["msorder"]){
    $resp['out'] = $pdo->parseChunk('@FILE chunks/minishop/fastOrderCreateSuccess.tpl',$arr);
}

$miniShop2->cart->set($tmpCart);

echo json_encode($resp);return;
Константин Ильин
26 мая 2020, 14:03
modx.pro
93
0

Комментарии: 8

Наумов Алексей
26 мая 2020, 16:00
0
Я просмотрел код miniShop2, что-то не вижу, чтобы он отправлял в вывод ответ и прекращал работу php… Например success
А каких-нибудь плагинов на ms*** нет активных у сайта, которые могут так делать?
    Артем
    26 мая 2020, 16:05
    +1
    это происходит, если в конфиге установлен json_response
      Наумов Алексей
      26 мая 2020, 16:07
      +1
      Да, вот она и разгадка:
      $scriptProperties = array(
          'json_response' => 1, // ТА-ДАМ
          'max_count' => 1,
          'allow_deleted' => 0,
          'allow_unpublished' => 0
      );
        Константин Ильин
        26 мая 2020, 16:16
        0
        это да, я менял этот флаг все работало, не написал об этом.

        Но возникает другой вопрос, как получить так сказать «на месте» ид созданного заказа ?) ЧТобы вывести его пользователю.

        Вот какой результат без флага json_response, в нем ничего нет соответственно
        joxi.ru/vAWjKbotqeW7L2
          Наумов Алексей
          26 мая 2020, 16:24
          +1
          Странно… думаю, что miniShop не заточен для такого использования.
          А что если: сделать запрос с json_response, получить информацию о заказе, а потом отправить серверу еще один запрос с №заказа, и уже так сказать, со второй попытки, отрендерить чанк.
            Артем
            26 мая 2020, 16:27
            +1
            2 варианта:
            1. Убрать оплату из заказа и вернуть json_response в конфиг, тогда exit не будет вызываться, а в ответе будет номер заказа.
            2. Брать номер заказа из сессии — он добавляется туда сразу после создания заказа.
              Константин Ильин
              26 мая 2020, 16:46
              0
              Спасибо Алексей и Артем!
              miniShop не заточен для такого использования
              Наверно конкретно в этой функии недочеты под такое.

              блин дошел до этой функции, но не изучил, развел тут целый топик.

              Т.к. это быстрый заказ по сути оплата не так важна. Можно получить id заказа и потом уже присвоить в этом же коде.Воспользовался этим решением, все работает :)

              joxi.ru/p27V9KytWXeRom
              Где-то давно видел почему не сохраняется корзина, полагаю что-то с сессией или еще что-то делать надо?
              $resp['tmpCart'] = $tmpCart = $miniShop2->cart->get();
              $miniShop2->order->clean();
              $miniShop2->cart->clean();
              ............
              $miniShop2->cart->set($tmpCart);
                Константин Ильин
                26 мая 2020, 17:24
                0
                А нет, все нормально, сам закосячил.

                Спасибо еще раз вам, Алексей и Артем!
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8