получение настроек платёжной системы Есть решение

Добрый день,

как я, из метода callbackHandler(), могу получить значения полей настроек платёжной системы, которой этот метод принадлежит?

3 ответа

  • 2
    Михаил Ушенин Webasyst 11 августа 2015 04:45 # Решение

    $this->settings_field_name

    Смотрите примеры и комментарии в коде бесплатного плагина webmoney.

  • 1
    Рыбалкин Александр - 11 августа 2015 10:47 #

    можно ли самому задать $this->merchant_id в настройках модуля?

    • +1
      Рыбалкин Александр - Рыбалкин Александр - 11 августа 2015 12:58 #

      нашёл решение, может кому пригодится:

      можно получить $this->merchant_id зная значение поля настроек

      $model = new waModel();

      $s=$model->query("SELECT `id` FROM `shop_plugin_settings` WHERE name LIKE 'settings_field_name' AND value LIKE 'settings_field_value'");

      $this->merchant_id = $s->fetchField('id');

      • 0
        Владислав Горлов Владислав Горлов Webasyst 11 августа 2015 13:56 #

        Это не решение. Это страшный костыль который аукнется. В общем случае плагин оплаты ничего не знает о приложениях, а тем более том, как устроено хранение данных.

        $random = 7; // ближайший аналог вашего кода.

        • 0
          Рыбалкин Александр - Рыбалкин Александр - 12 августа 2015 04:27 #

          Ну, Евгений Ваганович, как говорится, критикуя предлагай.. и критика должна быть как минимум конструктивной, чем аукнется, как аукнется.. хоть один пример... кроме естественно того что разработчики в рамках одной версии продукта могут настолько изменить структуру хранения данных что моё решение не сработает.. мне казалось тут форум для решения вопросов.. зачем этот флэйм, к тому же со стороны саппорта?

          • +1
            Владислав Горлов Владислав Горлов Webasyst 13 августа 2015 07:44 #

            реализовать метод callbackInit корректно в соответствии с документацией. Т.е. параметры запроса должны содержать такие поля/значения по которым однозначно удается определить приложение которое хранит и обрабатывает данные и идентификатор конкретного экземпляра с его настройками и т.п.

            Ваш код не будет работать корректно, если в магазине будет два экземпляра с одинаковыми значениями поля по которому вы ищете.

            Для корректного получения данных для плагинов оплаты у каждого приложения, поддерживающего оплату, есть класс, унаследованный от waAppPayment, который и отдает данные правильно. И именно его интерфейсы достаточно документированы для однородного использования в рамках семейства продуктов. А вот реализация остается на усмотрение разработчика конкретного приложения: БД, файлы и т.п. И такие приложения пишутся не только нами, поэтому повторюсь еще раз, что использовать напрямую таблицу приложения shop некорректно.


            • +1
              Рыбалкин Александр - Рыбалкин Александр - 13 августа 2015 08:04 #

              два экземпляра с одинаковыми значениями поля маловероятны, хотя конечно возможны, тут вопрос в правильном, уникальном наименовании

              в моём случае так как это id магазина зарегестрированный в платёжной системе, который передаётся от платёжной системы, и единственный нешифрованный параметр, по которому и нужно получить значение ключа из настроек системы для дешифровки запроса

              так как вы говорите можно без данного "костыля" решить данный вопрос в работе вашей системы?

              в документации не нашёл способа указания merchant_id не при установке, не в настройках системы

              • +1
                Владислав Горлов Владислав Горлов Webasyst 13 августа 2015 08:17 #

                Пример: 3 экземпляра Qiwi с одинаковыми параметрами, но отличаются описаниями. Сегодня включен тот, для которого описание упоминает доп бонусы за оплату через Qiwi.

                При поступлении callback вызова метод callbackInit должен инициировать переменные $this->app_id и $this->merchant_id.

                Это позволит далее коду обратиться к конкретному приложению ($this-app_id) и через его адаптер %app%Payments запросить настройки для экземпляра $this->merchant_id. И уже в методе callbackHandler настройки уже будут доступны.

                Возможно, вас смущает название переменной, но это внутренняя переменная, не имеющая отношения к настройке платежного шлюза (у ряда систем тоже упоминается термин merchant).

                Примеры указания урлов для callback вызовов:

                1. Файл guide.php, формирующий описание ссылок, показываемых на экране настроек плагина (документация - guide.php).
                2. Передача урлов платежному шлюзу в запросе (пример)


                • +1
                  Рыбалкин Александр - Рыбалкин Александр - 13 августа 2015 08:32 #

                  ещё раз уточняю:

                  в моём случае платёжная систем возвращает только 1 нешифрованный параметр, он задан в платёжной системе и является уникальным для каждого магазина, чтобы получить остальные данные нужно получить значения настроек способа оплаты

                  но чтобы получить значения настроек в вашем движке нужно знать $this->merchant_id

                  предложенное мной решение по нахождению $this->merchant_id видится мне верным, при условии правильно наименовании поля, например "this_is_my_setting_field_for_payment_system", маловероятно что разработчики других приложений могут случайно назвать поле также

                  так есть ли способ задать $this->merchant_id самому? чтобы ваш двиг не нуждался в данном "костыле"?

                  • +1
                    Владислав Горлов Владислав Горлов Webasyst 13 августа 2015 08:45 #

                    Еще раз: читайте документацию. Что мешает указать урл для платежного шлюза %RELAY_URL%?app_id=%APP_ID%&merchant_id=%MERCHANT_ID% в файле guide.php? А на экране настроек это уже примет осмысленный вид. Кроме того платежные шлюзы зачастую в обратном запросе передают все переменные, которые были и в запросе на оплату.

                    • +1
                      Рыбалкин Александр - Рыбалкин Александр - 13 августа 2015 09:08 #

                      спасибо за ответ

                      но в данном случае платёжный шлюз будет генерить запрос %RELAY_URL%?app_id=%APP_ID%&merchant_id=%MERCHANT_ID%?%payment_data%, а не %RELAY_URL%?app_id=%APP_ID%&merchant_id=%MERCHANT_ID%&%payment_data%


                      • +1
                        Владислав Горлов Владислав Горлов Webasyst 13 августа 2015 09:46 #

                        Обычно платежные шлюзы передают данные в POST (либо имеют возможность выбора GET или POST), во вторых шлюз должен уметь добавлять свои параметры к уже указанным, иначе это баг самого платежного шлюза.


                        • +1
                          Рыбалкин Александр - Рыбалкин Александр - 13 августа 2015 10:20 #

                          мне как программисту режут ухо такие слова как "обычно" или "должен уметь" или "возможно" или.. список можно продолжать.

                          я привык работать с существующем кодом и тем что описано в тз, возможно в документации

                          имхо допускать что то это как то неправильно в нашей работе

                          но спасибо за ответы, они помогут в подобных ситуациях

  • 1
    Владислав Горлов Webasyst 13 августа 2015 10:25 #

    30 плагинов сторонних разработчиков "обычно" работают, а вашему нужны особые условия. Ссылку на документацию шлюза в студию.

    • +1
      Максим Степанов Максим Степанов 17 августа 2018 03:16 #

      Мать перемать, Владислав. Не знаю, не спились ли вы еще там, но вы сотварили херню и еще оправдываетесь. Ни у одной нормально цмс нет такого говна, что бы получить экземпляр настроек надо знак айди плагина в системе. Ну не звездец ли? Форменный звездец.

      • +1
        Владислав Горлов Владислав Горлов Webasyst 17 августа 2018 13:45 #

        Можно получить все экземпляры настроек плагина во всех приложениях, взаимодействующих с ним. Или вам привычнее, когда автомобиль может быть любого цвета, если этот цвет черный?.

        • +1
          Максим Степанов Максим Степанов 17 августа 2018 17:14 #

          Да мне не нужно думать о ваших экземплярах и приложениях. На тысячу вряд ли найдется хоть один дурак, которому два одинаковых плагина понадобятся. А если понадобятся, то диференцировать нужно по пути. Это уже косяк, что по одному пути у вас несколько плагинов доступно. 

          • +1
            Владислав Горлов Владислав Горлов Webasyst 17 августа 2018 17:18 #

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

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

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