Новости Joomla

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

0 Пользователей и 1 Гость просматривают эту тему.
  • 25 Ответов
  • 3378 Просмотров
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Всем доброе утро, господа подскажите пожалуйста как правельно отправить доп. данные при оплате через форму в робокассу.
Суть в том что нужно отправить и потом получить с формы данные которые вводит пользователь перед оплатой в форму в поля input

Вод форма отправки данных га оплату с полем для почты пользователя

Но при вставке в поле чего либо получаю ошибку о не правельной

Пытаюсь отправить доп информацию в текстовом поле

<input type=text name=Shp_mail value="<?=$shp_mail?>">

Получаю постоянно сообщение (
Неверное значение "cef1a59879a1145fcd00d6e937904eaf" для параметра "SignatureValue". Правильное значение - 36d5f386f0f140f0ec4449d1513bf765. Кодировка: windows-1251.)

Код
<?php



// кодировка
// encoding
$encoding = "utf-8";

// формирование подписи
// generate signature

$crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item:Shp_mail=$shp_mail");
?>


<form action='http://test.robokassa.ru/Index.aspx' method=POST>


       <input type=hidden name=MrchLogin value="<?php echo $mrh_login; ?>"/>
     <input type=hidden name=OutSum value="<?php echo $out_summ; ?>"/>
      <input type=hidden name=InvId value="<?php echo $inv_id; ?>"/>
      <input type=hidden name=Desc value="<?php echo $inv_desc; ?>"/>
      <input type=hidden name=SignatureValue value="<?php echo $crc; ?>"/>
      <input type=hidden name=Shp_item value="<?php echo $shp_item; ?>"/>
     <input type=text name=Shp_mail value="<?=$shp_mail?>">
<input type=hidden name=IncCurrLabel value="<?php $in_curr; ?>"/>
      <input type=hidden name=Culture value="<?php $culture = "ru"; ?>"/>
     </br>
    <input type="submit"  class="btn" value="<?php echo $submit_text; ?>" />
    
    
</form>

Делаю как описано на робокассе  _http://www.robokassa.ru/ru/Doc/Ru/Interface.aspx

Всегда начинаться с: Shp_; SHP_; shp_
Выглядеть они могут так:
Shp_1=1; Shp_1=2 и т.д.
Shp_oplata=1; Shp_oplata=2 и т.д.
Shp_login=Vasya; Shp_name=Вася
Дальше - всё зависит от Вашей фантазии!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Перед тем, как задавать вопросы, почитайте инструкцию:
Цитировать
Но, каждый из этих параметров ОБЯЗАТЕЛЬНО! должен быть включён в подсчёт контрольной сумы (sSignatureValue). Как при старте операции, так и при её завершении. И они должны быть отсортированы в алфавитном порядке.
$mrh_login:$out_summ:$inv_id:$mrh_pass1[:пользовательские параметры]
Еще: вопрос совсем не относится к Joomla и его следовало бы задавать robokassa.ru.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Перед тем, как задавать вопросы, почитайте инструкцию:Еще: вопрос совсем не относится к Joomla и его следовало бы задавать robokassa.ru.

Относится имено к Joomla так как эта форма выводится в модуле. Инструкцию умник читал много раз, почитаете сами.И вообще зачем засорять тему такими без полезными ответами. вам что делать нечего.Не знаете луче держите высказывания при себе.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
И сообщения тоже не умеете читать? Или с мозгами туго?
Еще раз:
Цитировать
Но, каждый из этих параметров ОБЯЗАТЕЛЬНО! должен быть включён в подсчёт контрольной сумы (sSignatureValue). Как при старте операции, так и при её завершении. И они должны быть отсортированы в алфавитном порядке.
$mrh_login:$out_summ:$inv_id:$mrh_pass1[:пользовательские параметры]

P.S. Жаль, что не могу выругаться здесь. Лучше не лезьте туда без минимальной подготовки.

P.P.S.
Цитировать
Не груби Вася
Нужно быть порядочным, Игорь. (Не Вася)
« Последнее редактирование: 27.12.2014, 12:32:45 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Уважаемый смозгами все в порядке не непохоже что у вас с ними все ок. Я уже перерыл кучу мануалов и примеров.И то что вы мне тут хотите тыкнуть вы сами то это пробовали делать или просто ответить захотелось в теме...
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Вы сначала попробуете так свормировать а потом расказывайте, получится у вас я думаю врядле

[:пользовательские параметры]
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Относится имено к Joomla так как эта форма выводится в модуле. Инструкцию умник читал много раз, почитаете сами.И вообще зачем засорять тему такими без полезными ответами. вам что делать нечего.Не знаете луче держите высказывания при себе.
Вопрос ни разу не относится к Joomla!
1. Все равно что вы будете ехать на велосипеде на работу, мимо вас пронесется велогонка и вы будете всем рассказывать что участвовали в велогонке..
2. Перестаньте грубить всем подряд (особенно администрации)! Будут продолжать в том же духе вас либо забанят, либо не будут отвечать! Тут такое долго не терпят!

По вопросу: проверяйте! Основная ошибка при работе с робокассой в том что неправильно генерируете SignatureValue ! О чем вам и написано!

Подозреваю что проблема тут:
Код: php
$crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item:Shp_mail=$shp_mail");
В документации нет что в хеш можно пихать Shp_mail! Это кастомное поле! Скорее всего из-за этого и неправильный хеш! Сократить до:
Код: php
$crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item");
« Последнее редактирование: 27.12.2014, 12:56:24 от Istaan »
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Вот брал за примеры формирования запроса на оплату

_http://www.sql.ru/forum/1100010/pomogite-poluchit-dannye
_http://www.cyberforum.ru/php/thread1274443.html

Укорачивание до не помогает
Код
$crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item");
Все та же проблема. Отправляются нормаль если только данные с параметров модуля вывожу. Но если только пытаюсь в текстовое поле что то заполнить то уже

Неверное значение "ae6999c26279f138ad52182cdd8da44f" для параметра "SignatureValue". Правильное значение - 36d5f386f0f140f0ec4449d1513bf765. Кодировка: windows-1251.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
сделать echo "$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item";

и echo каждого параметра! Проверить или все совпадает с тем что передается в скрытых полях, вплоть до регистра символов!
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Все поля нормально, проверил только что.  и это поле если не заполненое то отправляется нормально.

<input type=hidden name=Shp_mail value="<?=$shp_mail?>">

Но только стот ввести что то в текстовое поле сразу ошибка




а если заполнить с текстого поля то все выдает ошибку.мистика.
« Последнее редактирование: 27.12.2014, 14:20:30 от jservice »
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Если мыло с параметров модуля вывожу тоже отправляется,

 $shp_mail = $params->get('mail_to');


*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Вы как вычисляете контрольную сумму?
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Если честно не как ее не вычесляю... Не подскажите как ее вычеслять?
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Я ее не вычеслял не как просто вставлял переменные и все сейчас попробую.Но дело в том а что оно даст если тут заметил проблема именно в воде в текстовое поле а не в чем то другом.Так как проходит оплата если мыло вывожу в переменную через параметры самого модуля.

Нашел как вычеслять, но что оно даст мне.

В полученной ссылке отсутствует только последнее значение SignatureValue. И его нам необходимо вычислить.
Строка данных, из которой мы будем его считать:
$mrh_login:$out_summ:$inv_id:$mrh_pass1
Подставляем в неё соответствующие значения:
demo:11:0:password_1
password_1 – Это пароль, придуманный Вами при заполнении раздела Технические настройки. Здесь умышлено не показан реальный пароль.
Для вычисления Контрольной суммы SignatureValue по алгоритму MD5 можно использовать один из on-line калькуляторов. Например, эти:
http://sgeneri.ru/
http://nekitbelov.wen.ru/online/md5.html
http://md5info.ru/demo
и т.п.
Теперь берём строку с данными demo:11:0:password_1 и вычисляем по ней Контрольную сумму. (Не забудьте указать правильный пароль!)
Результат для нашего примера: 56f978e24d1b51fa7b5ace90a4f4ba53
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Согласно документации, там все просто и понятно написано.
Код
            $SignatureValue = md5(
                'Идентификатор_магазина'
                . ':' . 'Сумма'
                . ':' . 'Номер заказа'
                . ':' . 'Пароль 1'
            );
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Это хорошо но не пойму что оно дает.Если не чего не добавляеш не каких доп полей то проблем не каких не. Все из за того что толи с input не верно даные передаются что не совпадает сумма.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Во первых научитесь брать значения в кавычки. Может поможет избежать ваших проблем. и короткие теги php никогда не применяйте.
Код
<input type=text name=Shp_mail value="<?=$shp_mail?>">
правильно писать
Код
<input type="text" name="Shp_mail" value="<?php echo $shp_mail; ?>">
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Во первых научитесь брать значения в кавычки. Может поможет избежать ваших проблем. и короткие теги php никогда не применяйте.
Код
<input type=text name=Shp_mail value="<?=$shp_mail?>">
правильно писать
Код
<input type="text" name="Shp_mail" value="<?php echo $shp_mail; ?>">


Если бы в этом проблема была, но я уже третий день ковыряю эту отправку и уже как только не пробовал не помогает не как ... все ровно выдает

Неверное значение "cef1a59879a1145fcd00d6e937904eaf" для параметра "SignatureValue". Правильное значение - 36d5f386f0f140f0ec4449d1513bf765. Кодировка: windows-1251.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Я не знаю чем вам еще помочь, я уже для трех платформ робокассу делал, подобных проблем не возникало никогда.
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Просто наверное не отправляли доп поля, если не отправлять доп поля то проблем не каких нет, только если с ними.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Просто наверное не отправляли доп поля, если не отправлять доп поля то проблем не каких нет, только если с ними.
Делал с пользовательским полем. Его значение участвует в вычислении контрольной суммы. Поэтому при клике "отправить" отправляете данные не в Робокассу, а себе на сервер, аяксом. Там с учетом его значения вычисляете, отправляете, на фронте обновляете форму - "спасибо".
Веб-разработка: заказ. Только новая разработка.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Вот из рабочего плагина робокассы, все работает.
Код
$vars = new stdClass();
            $vars->url = $this->getURL();
            $vars->MrchLogin = $this->getParam('merchant');
            $vars->InvId = $order->order_id;
            $vars->OutSum = $amout;
            $vars->Desc = "Счет №" . $order->order_number;
            $vars->Culture = $lang;
                $vars->SignatureValue = md5(
                    $this->getParam('merchant')
                    . ':' . $amout
                    . ':' . $order->order_id
                    . ':' . $this->getParam('pass1')
                );
            $vars->Email = $this->user->user_email;

            $this->vars = $vars;
Код
<form id="robokassa_form" name="robokassa_form" action="<?php echo $this->vars->url ?>" method="post">
    <input type="hidden" name="MrchLogin" value="<?php echo $this->vars->MrchLogin ?>" />
    <input type="hidden" name="InvId" value="<?php echo $this->vars->InvId ?>" />
    <input type="hidden" name="OutSum" value="<?php echo $this->vars->OutSum ?>" />
    <input type="hidden" name="Desc" value="<?php echo $this->vars->Desc ?>" />
    <input type="hidden" name="Culture" value="<?php echo $this->vars->Culture ?>" />
    <input type="hidden" name="SignatureValue" value="<?php echo $this->vars->SignatureValue ?>" />
    <input type="hidden" name="Email" value="<?php echo $this->vars->Email ?>" />
<input
        id="hikashop_robokassa_button"
        type="submit"
        class="btn btn-primary"
        value="<?php echo JText::_('PAY_NOW');?>"
        name=""
        alt="<?php echo JText::_('PAY_NOW');?>"
        />
</form>
А отправлять свои поля, не нужные робокассе, смысла нет совсем, назад она их не вернет.
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
А отправлять свои поля, не нужные робокассе, смысла нет совсем, назад она их не вернет.
Почему нет смысла? Например, комментарии клиента к платежу + URL страницы, с которой произведен платеж (модуль может быть установлен на многих страницах). Все приходит от Робокассы в письме получателю платежа. Это один пример, а вообще фантазии заказчиков в подобных ситуациях безграничны, и иногда удивляют. Но главное, что пользовательские поля работают, только чуть извратиться надо.
Веб-разработка: заказ. Только новая разработка.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Почему нет смысла? Например, комментарии клиента к платежу + URL страницы, с которой произведен платеж (модуль может быть установлен на многих страницах). Все приходит от Робокассы в письме получателю платежа. Это один пример, а вообще фантазии заказчиков в подобных ситуациях безграничны, и иногда удивляют. Но главное, что пользовательские поля работают, только чуть извратиться надо.
Зачем если все это можно сохранить  в базе, а потом отправить в робокассу только нужное?!
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Зачем если все это можно сохранить  в базе, а потом отправить в робокассу только нужное?!
Это был пример модуля Робокассы. Это всего лишь модуль, не более (в моем случае). Если надо что-то более существенное (что?), компонентом, тогда можно и в базу.
Веб-разработка: заказ. Только новая разработка.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отправка файла на email

Автор Charlottas

Ответов: 5
Просмотров: 1291
Последний ответ 30.11.2014, 13:14:41
от Charlottas
Отправка данных из разных форм на одной странице

Автор ShutTap

Ответов: 8
Просмотров: 2137
Последний ответ 26.08.2014, 13:48:17
от zomby6888
Отправка почты

Автор Riddik

Ответов: 9
Просмотров: 6195
Последний ответ 17.12.2013, 18:57:34
от Riddik
Отправка запроса POST и получение ответа? Joomla 3.1.5

Автор infoehra

Ответов: 8
Просмотров: 2336
Последний ответ 11.11.2013, 10:33:03
от infoehra
Отправка формы методом GET на URL с параметрами

Автор Виталик

Ответов: 0
Просмотров: 2072
Последний ответ 09.07.2012, 01:28:21
от Виталик