Ошибка при запросе из ПС в платежный метод (плагин).

делаю вызов по тому адресу, что стоит в настройках робокассы:
http://shop-script.local/payments.php/robokassa/?transaction_result=success&app_id=shop
Что не правильно? Как обработать запрос из ПС?


Empty module and/or action after parsing the URL "/payments.php/robokassa/?transaction_result=success&app_id=shop" (payments/).
Not found classes: webasystPaymentsController, webasystPaymentsActions, webasystPaymentsActions

Error with code 404 in 'F:\OpenServer\domains\dev_shop_script\wa-system\controller\waFrontController.class.php' around line 172:

167 return $this->execute($plugin, $module);
168 }
169 $class_names[] = $class_name;
170
171 // Too bad. 404.
>>172 throw new waException(sprintf('Empty module and/or action after parsing the URL "%s" (%s/%s).
Not found classes: %s', $this->system->getConfig()->getCurrentUrl(), $module, $action,implode(', ',$class_names)), 404);
173 }
174 }
175
176 // EOF
Call stack

#0 F:\OpenServer\domains\dev_shop_script\wa-system\waSystem.class.php(394): waFrontController->execute(NULL, 'payments', NULL, true)
#1 F:\OpenServer\domains\dev_shop_script\index.php(7): waSystem->dispatch()
#2 {main}
Request

array (
'transaction_result' => 'success',
'app_id' => 'shop',
'shop_cart' => 'cc3adb48c3725d63a77cb8fa4bf650fa',
'PHPSESSID' => 'ltcvu82r98tba8pvojokr3als7',
'auth_token' => '9da14a4c68ba29414c7cc53602a8fc7',
'remember' => '1',
'_csrf' => '526952f02aaed4.52558984',
'last_page' => '1^^^/admin/shop/?action=settings',
)
Params

array (
'module_id' => 'robokassa',
)

2 ответа

  • 1
    Михаил Ушенин Webasyst 25 октября 2013 01:31 #
    Вы обращаетесь именно к плагину "Робокасса"? Или реальный URL содержит id вашего платёжного плагина вместо "robokassa"?
    Откуда попытка обращения к классам webasystPaymentsController, webasystPaymentsActions, webasystPaymentsActions?
  • 0
    Это из настроек плагина Рабокасса по умолчанию. Shop-script скачан из репозитория git. Обращаюсь по адресу
    http://shop-script.local/payments.php/robokassa/?transaction_result=success&app_id=shop
    Стек трейс есть выше:

    #0 F:\OpenServer\domains\dev_shop_script\wa-system\waSystem.class.php(394): waFrontController->execute(NULL, 'payments', NULL, true)
    #1 F:\OpenServer\domains\dev_shop_script\index.php(7): waSystem->dispatch()
    • 0
      Леонид Вакуленко Леонид Вакуленко Webasyst 25 октября 2013 09:25 #
      У вас не последняя версия фреймворка. Обновитесь, пожалуйста, если это возможно. Помочь это сразу скорее всего не поможет, но дебагинг упростит.

      Судя по трейсу, фреймворк всё пытается делать правильно, но до плагина дело не доходит даже близко. Не найден класс webasystPaymentsAction ( wa-system/webasyst/lib/actions/payments/webasystPayments.action.php ). Есть ли такой файл?

      Возможно, что-то случилось с автолоадом и он не находит класс. Включён ли debug mode? Если нет, что в кеше wa-cache/apps/webasyst/config/autoload.php? Если да, что выведет wa_dump(waAutoload::getInstance()->getClasses()), если вызвать его в том месте, где бросается exception?
      • 0
        1. Т.к. Установлена версия для разработчика - инсталлера нет. Наверно и обновиться не удастся (я не нашел в меню и где-то читал что обновления нет для версии для разработчика)
        2. Устанавливал неделю назад скачанное из репозитория - это считается устаревшим?
        3. В wa-system/webasyst/lib/actions/ нет папки payments вообще - соответственно и /webasystPayments.action.php
        3. 'debug' => true
    • 0
      Леонид Вакуленко Леонид Вакуленко Webasyst 25 октября 2013 10:30 #
      Обнаружили у себя мега косяк. Файл webasystPayments.action.php исторически заигнорен в гите (было время, когда платёжные модули не были публично выложены). На гит-установках не работают платёжные модули. Пардон :)
      Обновитесь, пожалуйста.
      • 0
        Я устанавливал вроде бы последнюю версию с gitHub. Можете дать ссылку на ту версию, где есть webasystPayments.action.php и есть все платежные методы?
        Или расскажите, пожалуйста, как обновить или "прокачать" мою версию? (может просто достаточно добавить файл webasystPayments.action.php?)
      • 0
        Откуда взять новую версию для разработчика?
        Тут https://github.com/webasyst/webasyst-framework тоже нет папки wa-system/webasyst/lib/actions/ и соответственно /webasystPayments.action.php
        Есть только в папке wa-system/payment/waPayment.class.php.
        Что делать?
        • 0
          Леонид Вакуленко Леонид Вакуленко Webasyst 26 октября 2013 02:47 #
          Так есть же. https://github.com/webasyst/webasyst-framework/tree/master/wa-system/webasyst/lib/actions/payments
          • 0
            Да, странно, что у меня этой папки нет. Мне ее отдельно скачать и вставить или заново разворачивать систему, устанавливать shop скрипт и т.д.?
            Я так понимаю, что этот файл был добавлен в репозиторий вчера?
          • 0
            Леонид, круто, все сработало! Спасибо вам огромное!!!
            Жалко только что убил на это 4 дня...
            Последний коммит был alexmuz authored 2 days ago. И не видно кто удалил его из репозитория...
            • 0
              Леонид Вакуленко Леонид Вакуленко Webasyst 27 октября 2013 04:28 #
              Его никто не удалял, его когда-то давным-давно забыли убрать из игнора git. В архивы инсталлера он попадал, а при выгрузке на гит - нет.
              • 0
                Леонид, может еще подскажете? Надо получить заказ в callBack по order_id и проверить, что его еще можно оплачивать.
                Есть метод waOrder::factory в который передается массив для инициирования заказа. При передаче только order_id - все остальные поля остаются незаполненными. Как его правильно инициировать?
                Есть ли метод для проверки, что заказ еще доступен для оплаты?
                • 0
                  Владислав Горлов Владислав Горлов Webasyst 28 октября 2013 04:57 #
                  waOrder::factory используется в контексте метода payment (на самом деле на вход уже приходит объект waOrder) и он содержит данные, переданные из приложения (магазина в частности)
                  Для проверки заказа вызывать метод в адаптере приложения waPayment::CALLBACK_CONFIRMATION.
                  • 0
                    Владислав, я имею ввиду другое. То, что в методе payment у меня есть данные заказа, доставки и данные клиента - понятно. При вызове из ПС и хотел бы инициализировать объект, зная только order_id. Чтобы получить из него статус (а вдруг товар кончился и администратор отменил заказ, пока клиент пытался его купить) и сравнить сумму.
                    Такое возможно в callbcackHandler?
                    • 0
                      Владислав Горлов Владислав Горлов Webasyst 28 октября 2013 05:54 #
                      Сам платежный плагин о заказе ничего не знает - это знает адаптер приложения (лишь в частном случае это магазин).
                      Например, в плагине оплаты через яндекс деньги платежный шлюз проверяет актуальность и корректность счета и только после этого позволяет оплатить (в течении небольшого промежутка времени).
                      Ну и что делать в случае оплаты заказа, который уже удален/отменен/неактуален - это логика приложения должна решать.
                      • 0
                        Хорошо, как, проверить актуальность заказа зная только его order_id?
                        В любой CMS есть метод, который по id вытаскивает заказ и можно посмотреть все данные заказа. Не передавать же в ссылке (от ПС) все параметры заказа?
              • 0
                И каким образом можно изменить статус у заказа?
                • 0
                  Владислав Горлов Владислав Горлов Webasyst 28 октября 2013 05:00 #
                  Примерно так:
                  $transaction_data['state'] = waPayment::STATE_CAPTURED;
                  $callback_method = waPayment::CALLBACK_PAYMENT;
                  $this->execAppCallback($callback_method, $transaction_data);
                  (набор данных не полный - примеры смотрите в других плагинах оплаты)

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите