minishop2 вызов оплаты

Добрый день, возникла очень серьезная проблема, мне нужно вызвать оплату уже у сформированного заказа в minishop2, т.е. пользователь пишет номер заказа и если он не оплачен, то должны отображаться способы оплаты и сама кнопка оплатить. Потратил на это несколько дней, просто не могу понять даже в какую сторону копать, мог бы кто пожалуйста подсказать?
Евгений
12 июня 2020, 12:43
modx.pro
485
0

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

Максим
13 июня 2020, 14:30
+1
Для нормального ответа не хватает некоторой информации, например: Где это должно происходить? На фронте личном кабинете или в админке?
Если в общих чертах, то:
1) При получении id заказа (кстати а откуда мы его получаем) проверяем его статус. Если статус «Оплачен», то выходим. Иначе идем дальше.
2) Получаем и выводим доступные методы оплаты. Примеры корректного получения можно посмотреть в исходниках минишоп (не забываем, что они связаны со способами доставки).
3) Для запуска метода оплаты смотрим сюда и реализовываем.
Вродь как алгоритм есть!)
    Евгений
    13 июня 2020, 16:59
    0
    да, кажется я не совсем точно вопрос задал, но спасибо за ответ, в следующий раз буду точнее формулировать). У меня все получилось вот таким вот образом, пришлось убрать редирект потому что надо открывать страницу оплаты при нажатии на кнопку «Оплатить», т.е. я отправляю массив, и уже при помощи js подставляю ссылку на кнопку. Надеюсь кому поможет, только исключения под свои нужды.
    <?php
    if ($modx->event->name == 'OnLoadWebDocument')
       if (isset($_POST['order_status_check']))
          if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    
    
    
             $status = $modx->lexicon('popup_status_order_message_error');
    
             if (preg_match('/[\d]*\/[\d]*/', $_POST['order_status_check'])) {
    
    
                $order = $modx->getObject('msOrder', array('num' => $_POST['order_status_check']));
                if ($payment = $modx->getObject(
                   'msPayment',
                   array('id' => $order->get('payment'), 'active' => 1)
                )) {
                   $response = $payment->send($order);
                   if ($this->config['json_response']) {
                      @session_write_close();
                      exit(is_array($response) ? json_encode($response) : $response);
                   } else {
                      if (!empty($response['data']['redirect'])) {
                         //тут отправляю массив в котором ссылка на оплату
                         print_r($response);
                         exit;
                      } elseif (!empty($response['data']['msorder'])) {
                      } else {
                         // $modx->sendRedirect($modx->context->makeUrl($modx->resource->id));
                      }
    
                      return $this->success();
                   }
                }
             }
    
             exit;
          }
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2