msOrder для услуги

Всем привет! Прошу совета

На странице услуги хочу сделать следующее:
3 input'а, стоимость и кнопка заказать. Заполнение формы и нажатие на кнопку сразу перебрасывает на платежный терминал (robokassa).

Думаю для данной связки использовать minishop2 потому что:
1) автоматическая отправка писем о получении заказа и ссылка на платеж, если тот не удался / был сброшен. Соответственно, отслеживание и изменение статусов в админке, догонка и пр.
2) интеграция с robokassa

Вопрос лишь в том, как вывести msOrder с передачей в него нужного товара. Т.е. чтобы на странице услуг сразу был msOrder с параметрами данной услуги. Может как-то можно в msCart при выводе сразу добавить конкретный товар? В документации прямого указания на это не нашел…
steve.kon
31 марта 2023, 13:28
modx.pro
1
564
0

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

Артур Шевченко
31 марта 2023, 15:47
0
Вот код, который создаёт заказ из конкретного товара.

public function createOrder()
    {
        $ms2 = $this->modx->getService('minishop2');
        $ms2->initialize('web');

        if (empty($ms2->cart->get())) {
            $this->logging->writeLog('Orderformhandler::createOrder', 'Не добавлен ни один курс.');
            return array('success' => false, 'message' => 'Не добавлен ни один курс');
        }

        $ms2->order->config['json_response'] = true;
        $ms2->order->add('receiver', $this->data['fullname']);
        $ms2->order->add('phone', $this->data['phone']);
        $ms2->order->add('delivery', $this->data['delivery']);
        $ms2->order->add('payment', $this->data['payment']);
        $ms2->order->add('region', $this->data['state']);
        $ms2->order->add('city', ($this->data['city'] ?: $this->data['state']));
        $ms2->order->add('index', $this->data['zip']);
        $response = $ms2->order->submit();

        $this->logging->writeLog('Orderformhandler::createOrder', 'Заказ успешно создан.', $response);

        if ($response['order_id']) {
            $newName = $this->base_path . $this->logdir . $response['order_id'] . '.txt';
            rename($this->logpath, $newName);
            unlink($this->logpath);
            $this->logging->logpath = $newName;
        }

        return $response;
    }
    steve.kon
    31 марта 2023, 16:43
    0
    К сожалению не знаю как это применить( Пробовал создать новый сниппет, но в 1ой строке ошибка. Знаний PHP не хватает…
      Артур Шевченко
      31 марта 2023, 16:57
      0
      Вы тогда в раздел «Работа» обратитесь, там помогут, не бесплатно, конечно.
        steve.kon
        31 марта 2023, 17:06
        0
        Да понятно… И обращался не раз, и с Вами работали в том числе)
        Думал, просто, удастся в данном случае как-то передать товар в стандартную конструкцию.
        Может через QuickView попробовать…
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4