Обработка Callback уведомлений в модуле Payment method SberbankModule

Автор pvmezencev, 22 ноября 2018, 20:06:19

« назад - далее »

pvmezencev

Добрый день!

Прошу помощи в реализации обработки уведомлений от Сбербанка со статусами операций по оплате.

Используется модуль Payment method Sberbank Module 1.1.3.

По документации из СБРФ нужно создать у себя на сайте маршрут, который будет принимать GET запрос от сервиса оплаты.

Предварительно зарегистрировав хук в функции установки модуля, маршрут задаю так

    public function hookModuleRoutes()
    {
        return array(
            'module-'.$this->name.'-callback' => array(
                'controller' => 'callback',
                'rule' =>  'callback/{-:mdOrder}{-:orderNumber}{-:operation}{-:checksum}{-:status}',
                'keywords' => array(
                    'mdOrder' => array('regexp' => '[\w]+', 'param' => 'mdOrder'),
                    'orderNumber' => array('regexp' => '[\w]+', 'param' => 'orderNumber'),
                    'operation' => array('regexp' => '(approved|deposited|reversed|refunded|declinedByTimeout)+', 'param' => 'operation'),
                    'checksum' => array('regexp' => '[\w]+', 'param' => 'checksum'),
                    'status' => array('regexp' => '(0|1)+', 'param' => 'status')
                ),
                'params' => array(
                    'fc' => 'module',
                    'module' => $this->name,
                )
            )
        );
    }


создал контроллер callback в модуле, для проверки работы такой


class SberbankpaymentCallbackModuleFrontController extends ModuleFrontController
{
    public function init()
    {
      header('Content-Type: application/json');
      echo json_encode($_GET);
    }
}


в итоге по ссылке callback/?mdOrder=6bc93e62313ba3ede9cbcf24f6a6c691&orderNumber=6&operation=deposited&status=0

получаю ответ

{
  "mdOrder": "6bc93e62313ba3ede9cbcf24f6a6c691",
  "orderNumber": "6",
  "operation": "deposited",
  "status": "0",
  "isolang": "ru",
  "id_lang": 2,
  "fc": "module",
  "module": "sberbankpayment",
  "controller": "callback"
}

Подскажите пожалуйста, как дальше на основе этих параметров изменить статус заказа, сохраняя историю?
Я новичек в PrestaShop, буду благодарен за любые подсказки.

Спасибо!

Adik

"status": "0",
Не знаю как в сбербанке со статучами, а в prestashop свори статусы, у каждого id, не 0/1.

pvmezencev

Цитата: Adik от 23 ноября 2018, 15:30:01
"status": "0",
в prestashop свои статусы, у каждого id, не 0/1.
именно их и я хочу менять, но не могу понять, какой хук или метод класса отвечает за 1 - смену статуса заказа, 2 - запись истории.
На основе того, какой ответ прилетел, буду выводить логику к этим двум целям, так сказать....

mAgency

Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

pvmezencev

Цитата: mAgency от 23 ноября 2018, 20:21:07
$order_status = new OrderState($id_order_state, $this->context->language->id);
Тут мы получим объект OrderState и что с ним сделать дальше?
я попытался сделать так:


        // Получить значение из запроса.
        $gate_order_id = Tools::getValue('orderNumber');
        // Выбрать оплату СБРФ по иду заказа.
        $payment = new SBRFPayment($gate_order_id);
        // Получить заказ.
        $order = new Order((int)$payment->id_order);
        $old_os = $order->getCurrentOrderState();
        if (!Validate::isLoadedObject($order)) {
            die($this->module->l('The order does not exist.', 'validation'));
        }
        // Инициализировать объект истории статусов заказа.
        $order_history = new OrderHistory();
        // Сменить статус заказа на заданный.
        $order_history->changeIdOrderState(2, $order->id);


мои статусы в базе во вложении.
позволяет поменять на любой статус, кроме 2. При 2 пишет "Фатальная ошибка", в логах ничего. Может быть можно применять 11 статус?

PrestaMan

Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

pvmezencev

#6
в итоге работает так



            $order_history->id_order = $order->id;
            $order_history->changeIdOrderState(11, $order->id);
            $order_history->add();


            $order_history->id_order = $order->id;
            $order_history->add(); - еще добавляет запись истории

вроде все работает теперь как нужно, спасибо всем участникам! Отличный форум, буду его посещать!
P.S. Не увидел, где "спасибо" отметить.