Что-то не то с формированием заказа через API
Доброе утро!
Вчера весь вечер провозился и так и не понял что не так: есть сниппет, который по стандартной Безумкинской схеме отрабатывает аякс-запросы, один из экшенов принимает данные о товарах, программно формирует заказ и создаёт его, но проблема в том, что не смотря на параметр json_response=true,во время выполнения
Сам заказ формируется и сохраняется нормально, если что.
Вчера весь вечер провозился и так и не понял что не так: есть сниппет, который по стандартной Безумкинской схеме отрабатывает аякс-запросы, один из экшенов принимает данные о товарах, программно формирует заказ и создаёт его, но проблема в том, что не смотря на параметр json_response=true,во время выполнения
$miniShop2->order->submit() ответ не отдаётся вообще и код после этого вызова не выполняется, а по аяксу пользователю отправляется простыня с хтмл-текстом страницы, вместо json с ответом. Вот кусок кода с этим функционалом:case 'submit':
try {
$data = $_POST['data'];
$profile = $modx->user->getOne('Profile');
$scriptProperties = array(
'json_response' => true, // возвращать ответы в JSON
);
$miniShop2 = $modx->getService('miniShop2');
$miniShop2->initialize($modx->context->key,$scriptProperties);
$miniShop2->order->clean();
$miniShop2->order->add('user_id', $modx->user->id);
$miniShop2->order->add('delivery', 10);
$miniShop2->order->add('payment', 20);
$miniShop2->order->add('email', $profile->get('email'));
$miniShop2->order->add('phone', $profile->get('phone'));
$miniShop2->order->add('receiver', $profile->get('fullname'));
$miniShop2->order->add('comment', $data['comment']);
$oldcart = $miniShop2->cart->get();
$miniShop2->cart->clean();
foreach($data['items'] as $item) {
$miniShop2->cart->add($item['id'],$item['count']);
}
$res = $miniShop2->order->submit(); //в $res ничего не попадает, и код после этой строки не выполняется
//вместо этого по аяксу пользователю улетает хтмл текущей страницы.
$miniShop2->cart->set($oldcart);
} catch (Exception $e) {
$res = 'error! ' . print_r($e);
}
break;В чём косяк может быть? Вроде судя по докам так всё должно работать. Может именно из-за аякса что-то не то?Сам заказ формируется и сохраняется нормально, если что.
Комментарии: 19
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Пример рабочего процессора:
Лично мне так удобнее, не знаю как остальным, но решение рабочее.
Мы просто используем методы минишоповского класса создания заказа, и будет все точно так же как и при стандартном оформлении, даже сообщение пользователю придет.
И всё равно хочется разобраться, почему не работает json_response. Призываю богов минишопа! @Василий Наумкин, @Володя, почему стандартный отдаёт хтмл вместо json, как описано в топике?
Удалось кому-то решить?
Вот пример:
и по идее, вывод должен быть таким только с наполненной data[]:
а выведет при включенном json_response вот так:
Причем в html формате.
Никак не могу решить данную проблему
Повторил ваше получение заказа и все равно тот же вывод в виде html с игнорированием вообще каких-либо конструкций вывода информации. Что само по себе очень странно.
Даже нет ошибки из-за отсутствия такого чанка как у вас (специально решил не менять, чтобы вызвать ошибку)
там еще $pdo->… выше получаю:
$pdo = $modx->getService('pdoTools');
Смотреть в Журнале ошибок в самом модх.
Начните с самого простого в самом начале функции post()
если у вас журнале вообще ничего не выводит и ошибки тоже(и ошибки в серверном логе тоже нет), то скорее всего ваш класс вообще не запускается и с ним не работает modx или вы его вообще не вызываете и т.п.
Данный контроллер используется в api для построения фронта отдельно от modx
так же в вашем коде два раза вызывается $miniShop2->order->submit()
Так же вы не поменяли $modx на $this->modx
Адаптируйте мой код под ваш самостоятельно
Спасибо вам больше за помощь!
Использовал свой код + ваши подсказки и код в другом контроллере от zoomx и все сработало.
Хотя до этого и там не работало.