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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Plugin с использованием AJAX
« : 21.09.2016, 15:46:39 »
Пытаюсь писать.

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

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

Пишем плагин оплаты через СБ РФ для компонента. (Надо сказать, что банк предоставил плагин от VM, он не подходит но внутри все операции написаны, так что думаю дело за малым)

1.1. Надо зарегистрировать заказ на платежном шлюзе.
1.2. Получить идентификаторы и ссылку на платежную страницу для только что зарегинного заказа. Ну и показать ее клиенту для дальнейшего перехода.
1.3. Клиент уходит на страницу.
1.4. Возвращается и проверяется статус оплаты.
Это система взаимодействия. Кратко конечно.

Клиенту на это плевать. Естественно. И задача получить минимум переходов до страницы оплаты.

Думается мне следующее.
2.1. На страницы оформленного заказа в определенное место подгружаются плагины со способами оплаты. в том числе СБ РФ.
2.2. По ссылке на словах "Вы можете оплатить по средствам карты СБ" осуществляется AJAX запрос к этому же плагину и происходит пункт 1.1 с ответом от платежного шлюза
2.3. Вместо всего блока (блок удаляется) ставим "Перейти на страницу оплаты"
2.4. действия на стороне банка им возврат по моей ссылке назад на эту же страницу.
2.5. При определенных условиях проверка статуса оплаты через тотже AJAX запрос к плагину который вернет статус и выполнит действия с финансовой частью заказа в компоненте.
2.6. Клиент видит статус оплаченного заказа и условия получения услуги.

Собственно вопрос в том как плагин должен реализовать AJAX запросы к самому себе? Через com_ajax или все-таки что-то свое?



*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Plugin с использованием AJAX
« Ответ #1 : 21.09.2016, 15:52:02 »
Я бы сделал AJAX запрос в свой компонент и там бы вызывал нужный плагин.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #2 : 21.09.2016, 15:59:44 »
Я бы сделал AJAX запрос в свой компонент и там бы вызывал нужный плагин.

К сожалению не уловил мысли.

плагин оплаты делает запрос в компонент, там стоит контроллер который будет пользоваться файлами плагина и выполнять всю работу за широмой и возвращать плагину? Т.е. все процедуры хранятся в плагине, а в компоненте реализовать прием ajax-запросов и обработкой запросов функционалом плагина. Так или я не все понимаю?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Plugin с использованием AJAX
« Ответ #3 : 21.09.2016, 16:02:04 »
Ну да, как-то так. Но это моё личное мнение, плюс что-то подобное видел в других компонентах.
*

fsv

  • Живу я здесь
  • 2765
  • 402 / 2
Re: Plugin с использованием AJAX
« Ответ #4 : 21.09.2016, 19:44:33 »
Цитировать
1.1. Надо зарегистрировать заказ на платежном шлюзе.
1.2. Получить идентификаторы и ссылку на платежную страницу для только что зарегинного заказа. Ну и показать ее клиенту для дальнейшего перехода.
Не работал с СБ. Вы доки получили, и там так написано? А общую их схему взаимодействия можете описать? А то что-то новое и не понятное.
Зачем заказ регистрировать в банке/шлюзе до оплаты? Его могут и не оплатить. И что значит "зарегистрировать"?

Обычно все проще: форма со скрытыми полями и кнопкой. В полях - ваши рег.данные для банка (схема шифрования обычно в доках), параметры заказа, ссылка для возврата на ваш сайт. По клику на кнопку - переход на сайт банка для оплаты, после оплаты - возврат на вашу страницу, где и статус, и детали оплаченного заказа. Где тут AJAX?
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #5 : 21.09.2016, 22:28:17 »
Не работал с СБ. Вы доки получили, и там так написано? А общую их схему взаимодействия можете описать? А то что-то новое и не понятное.
Зачем заказ регистрировать в банке/шлюзе до оплаты? Его могут и не оплатить. И что значит "зарегистрировать"?

Обычно все проще: форма со скрытыми полями и кнопкой. В полях - ваши рег.данные для банка (схема шифрования обычно в доках), параметры заказа, ссылка для возврата на ваш сайт. По клику на кнопку - переход на сайт банка для оплаты, после оплаты - возврат на вашу страницу, где и статус, и детали оплаченного заказа. Где тут AJAX?

именно сначала надо зарегистрировать заказ на платежном шлюзе и получить в ответ индивидуальную страницу оплаты. вот тут нужен AJAX.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Plugin с использованием AJAX
« Ответ #6 : 21.09.2016, 22:52:45 »
Тоже ничего не понял.
Для каждого заказа нужно получить новый ID и ссылку?
Еще и показать ссылку клиенту? Чтобы он что сделал?
Почему сразу не перенаправить клиента на форму оплаты банка с токеном (или чем там еще), необходимыми деталями заказа и ссылками для возврата на сайт продавца (оплатил - сюда, не оплатил - сюда и т.д.)?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Re: Plugin с использованием AJAX
« Ответ #7 : 22.09.2016, 06:52:43 »
именно сначала надо зарегистрировать заказ на платежном шлюзе и получить в ответ индивидуальную страницу оплаты. вот тут нужен AJAX.
Обычно это делают с помощью cURL, на худой случай file_get_contents в php, потом выводят полученный HTML на страницу. Но все-же удобнее отправить клиента в банк со всеми данными и обратным URL.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Plugin с использованием AJAX
« Ответ #8 : 22.09.2016, 09:53:26 »
Зачем заказ регистрировать в банке/шлюзе до оплаты? Его могут и не оплатить. И что значит "зарегистрировать"?
несколько раз делал такие видимо особо "умные" платежные системы. или "умные" - это их разработчики... у каждого свои велосипеды :) на конкурента глянуть лень или не комильфо, вот и выдумывают каждый свое :)

Обычно это делают с помощью cURL, на худой случай file_get_contents в php, потом выводят полученный HTML на страницу
совершенно верно. если такая схема работы - то обычно банк предоставляет доступ к своему REST API, с помощью которого заказ и регистрируется в их системе. а в ответ получаете все необходимые для формирования HTML параметры, и показываете готовую страницу клиенту. AJAX тут не нужен вообще. более того - использование AJAX создаст дополнительные проблемы в плане безопасности.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #9 : 22.09.2016, 12:16:05 »
Т.е. предлагаете в момент просмотра заказа определить что его надо оплатить, самому подать заявку в платежный шлюз, получить ссылку на оплату для клиента и показать ему, но он возможно и не выберет этот вид оплаты... - нафига регистрировать тогда?

Регистрировать заказ на шлюзе - НАДО и только ПОСЛЕ генерируется страница оплаты.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Re: Plugin с использованием AJAX
« Ответ #10 : 22.09.2016, 12:18:33 »
Работать плагин должен только после того, как покупатель выбрал способ оплаты и нажал кнопку "Оплатить". Дальше - по предложенному алгоритму.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #11 : 22.09.2016, 12:40:20 »
Смотрите.
Сделал из плагина кнопку "Оплата через БАНК". На кнопке висит onClick который отправляет ajax-запрос в компонент (для которого плагин и пишется). Компонент должен подключить файлы плагина и получить переменные плагина. Исполнить ту часть функций которая отвечает за соединение с банком. Далее ответ от банка и компонент через первый ajax-запрос отдает ответ банка в приготовленном виде.

Вопросы:
1. Подскажите как подключить файлы плагина?
2. Как получить переменные плагина (пароль и логин) из компонента? Пароль и логин передаваться в AJAX не буду.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Re: Plugin с использованием AJAX
« Ответ #12 : 22.09.2016, 12:52:35 »
Вопросы:
1. Подскажите как подключить файлы плагина?
2. Как получить переменные плагина (пароль и логин) из компонента? Пароль и логин передаваться в AJAX не буду.

Код
$dispatcher = JEventDispatcher::getInstance();
JPluginHelper::importPlugin('Группа плагинов');
$dispatcher->trigger('Событие', array ('Переменные которые передаются в событие'));

зачем получать переменные плагина не совсем понятно
да и обработку лучше делать наверное в плагинах, а не компоненте, так же как и хранить данные для соединения пи прочего в параметрах плагина
а то получается при добавлении нового плагина опять придется лезть в компонент и чего-то там делать
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #13 : 22.09.2016, 13:36:02 »
зачем получать переменные плагина не совсем понятно
да и обработку лучше делать наверное в плагинах, а не компоненте, так же как и хранить данные для соединения пи прочего в параметрах плагина
а то получается при добавлении нового плагина опять придется лезть в компонент и чего-то там делать

Спасибо!
Поясню что я пытаюсь сказать.

1. Компонент выводит все плагины оплаты на страницу заказа.
2. Запускаются функции из каждого плагина для вывода на страницу заказа. А именно HTML с содержимым "Оплатить при помощи Банка" или "Оплатить другим способом".
В частности для банка нужна та операция из-за которой все это придумывается. Точнее нужен дополнительный 1 шаг системы прежде чем выдать клиенту его личную страницу оплаты.
3. При нажатии на "Оплатить при помощи БАНКА" отправляется ajax-запрос в компонент со след данными: данные о заказе, обратный URL, ИМЯ ПЛАГИНА.
4. Компонент же понимсает что к нему обращается именно ПЛАГИН с параметром ИМЯПЛАГИНА и начинает вызывать функцию из конкретного плагина, но нужны еще параметры плагина, т.к. там храняться настройки для соединения с банком (в частности).
5. Уже функция плагина (вызванная компонентом) делает все обработки со СВОИМИ данными а в ответ отдает подготовленный HTML.
Всё. Чувствую некоторые ответе форумчан немного в разные пункты моей задачи направлены. Да с банком общаться будет cURL. А AJAX-нужен чтоб страницу не перегружать пока фоново отдам команду на регистрацию заказа. Данные из плагина, повторюсь, в частности, логин и пароль, который должен браться лишь в момент взаимодействия с банком (cUrl), а не в AJAX.
Добавление нового плагина должно лишь соблюсти туже структуру (оправка имени плагина в запросе AJAX, обращение компонентом к тойже функции) Тогда новые плагины не будут требовать доработки на стороне компонента.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #14 : 22.09.2016, 13:37:47 »
Код
$dispatcher = JEventDispatcher::getInstance();
JPluginHelper::importPlugin('Группа плагинов');
$dispatcher->trigger('Событие', array ('Переменные которые передаются в событие'));

Ну и не просмотрел код сразу... Это не то что я спрашиваю. Мне надо не подключить все включенные в группу плагины, а обратить к функции конкретного плагина.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #15 : 22.09.2016, 13:41:46 »
importPlugin может обратиться к одному плагину?
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #16 : 22.09.2016, 13:53:34 »
Код: php
$dispatcher = JEventDispatcher::getInstance();
JPluginHelper::importPlugin('Группа плагинов', 'имя плагина');
$dispatcher->trigger('функция', array ('данные'));
вот так можно получить то что я спрашивал.

Остался вопрос как получить параметры конкретного плагина
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Plugin с использованием AJAX
« Ответ #17 : 22.09.2016, 13:56:00 »
Мне надо не подключить все включенные в группу плагины, а обратить к функции конкретного плагина.
да это вообще неверный подход. вы нарушаете принцип модульности. компонент понятия не имеет, какие есть плагины. вы не должны идти по этому пути, он ошибочный.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Plugin с использованием AJAX
« Ответ #18 : 22.09.2016, 14:34:11 »
Остался вопрос как получить параметры конкретного плагина
Запрос в базу...
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #19 : 22.09.2016, 14:35:42 »
Так вот в начале ветке и спрашивал как заставить плагин через AJAX обращаться к себе же. Мне сказали лучший способ через компонент.

Но и вас я не понию, где тут принцип модульности нарушается? Тем что в компоненте появляется некая функция которой плевать какой плагин ей пользуется и которой плевать что назад выкидывать? Все что функция в компоненте делает так это отправляет на след шаг в плагине.

Скажите как можно при помощи AJAX запроса из плагина вызвать этот же плагин?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Plugin с использованием AJAX
« Ответ #20 : 22.09.2016, 15:37:46 »
Цитировать
Но и вас я не понию, где тут принцип модульности нарушается? Тем что в компоненте появляется некая функция которой плевать какой плагин ей пользуется и которой плевать что назад выкидывать?
в том то и дело, что увас получается, что не плевать. вы пытаетесь вызвать конкретный плагин. получить его параметры, и в компоненте их обработать. а это неверно. компонент ничего не должен знать о плагинах, ничего не должен знать об их параметрах, и тем более ничего не должен знать, как именно их обрабатывать. это дело самого плагина. компонент должен только получить от плагина уже готовый ответ

Цитировать
Скажите как можно при помощи AJAX запроса из плагина вызвать этот же плагин?
как вам уже и сказали - через компонент. подключайте группу, вызывайте метод например так
Код
$dispatcher->trigger(onPreparePaymentForm, array ($paymentMethod, $result));
в плагине проверяйте $paymentMethod - если совпадает, то плагин отрабатывает и в $result что то пишет.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Re: Plugin с использованием AJAX
« Ответ #21 : 22.09.2016, 15:37:53 »
Но и вас я не понию, где тут принцип модульности нарушается?
нарушается потому что вызывается конкретный плагин, а не группа
если завтра понадобиться еще один способ оплаты или чего-то там добавить, опять надо будет лезть в этот плагин и писать там отдельный метод для этого или что?
а так просто поставил еще доп. плагин и все, если надо его можно отключить
а что конкретно делать, т.е. какой плагин надо вызвать, то это можно определить вот тут
Цитировать
$dispatcher->trigger('Событие', array ('Переменные которые передаются в событие'));
передать нужную переменную
на примере тех же стандартных плагинов группы content это переменная $context

*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Plugin с использованием AJAX
« Ответ #22 : 22.09.2016, 15:46:53 »
а вообще имхо вам не нужны в данном случае плагины Joomla. у них принцип работы немного не подходит под задачу, как по мне. я бы сказал, что вам нужен собственный расширяемый класс.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #23 : 22.09.2016, 16:04:33 »
Я может что-то не понимаю, но логика с плагинами вот.
1.Каждую новую оплату делаю в виде плагина.
2.В каждом плагине есть начальная функция, которая презентует оплату на странице заказа и может (если надо) воспользоваться ajax-переходом на второй шаг процесса оплаты. Этот шаг сделан через компонент для которого эта оплата пишется.
Сделано так:
в компонент передается имя плагина (Плагин сам знает как его лично зовут) и аргументы.
функция в компоненте вызывает плагин и передает ему параметры.
плагин все что угодно делает с ними и возвращает HTML/JSON/TEXT
функция компонента отдает HTML/JSON/TEXT
js плагина знает как работать с данными которые он запросил.

Масштабируемость должна выйти. Ну у меня пока вышло, а время покажет.

*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #24 : 22.09.2016, 16:07:54 »
Запрос в базу...

Оказалось проще. После вызова функции плагина, она может напрямую обращаться к параметрам.
Код: php-brief
$dispatcher = JEventDispatcher::getInstance();
JPluginHelper::importPlugin('turismpayment', $plugName);
$answer = $dispatcher->trigger('turismPaymentConfirmOrder', array('orderId'=>$orderId, 'orderSumm'=>$orderSumm, 'orderReturnUrl'=>$orderReturnUrl));

Код: php-brief
$params = $this->params;
$login = $params->get('merchant', '');
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Plugin с использованием AJAX
« Ответ #25 : 22.09.2016, 16:41:53 »
ну так то оно так, только вы изначально говорили о другом. ну или по крайней мере я понял другое.

Код
$this->params->get('merchant', '');
это делать в самом плагине. а вы спрашивали в компоненте. ну или как я уже сказал - по крайней мере я так понял, что в компоненте.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Plugin с использованием AJAX
« Ответ #26 : 22.09.2016, 17:09:45 »
Код
$this->params->get('merchant', '');
это делать в самом плагине. а вы спрашивали в компоненте. ну или как я уже сказал - по крайней мере я так понял, что в компоненте.

компонент вызывает функцию плагина, а вот там уже это
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Plugin с использованием AJAX
« Ответ #27 : 23.09.2016, 01:31:20 »
Компонент не обязателен.
Из своего плагина делаете AJAX запрос к скрипту (пусть он лежит в той же папке плагина)

Код: javascript
$.ajax({
            type: 'POST',
                url: "/modules/mod_2call/ajax.php",

а там подключаем стандартные вещи (это для 2.5)
Код: php
	if ( file_exists( __DIR__ . '/defines.php' ) ) {
    include_once __DIR__ . '/defines.php';
}
if ( !defined( '_JDEFINES' ) ) {
    define( 'JPATH_BASE', __DIR__ . '/../../' );
    require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';

И после пляшем с стандартным API движка. Я так не один модуль писал
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Re: Plugin с использованием AJAX
« Ответ #28 : 23.09.2016, 07:06:29 »
Сейчас в Joomla есть com_ajax, не нужно обходить логику, надо действовать в соответствии с логикой Joomla, сделать плагин группы AJAX и к нему через com_ajax обращаться. Если конечно нет своего компонента, если он есть, то обращаться к плагину лучше через него.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Plugin с использованием AJAX
« Ответ #29 : 23.09.2016, 09:00:52 »
Сейчас в Joomla есть com_ajax, не нужно обходить логику, надо действовать в соответствии с логикой Joomla, сделать плагин группы AJAX и к нему через com_ajax обращаться. Если конечно нет своего компонента, если он есть, то обращаться к плагину лучше через него.
+1
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отправка файлов через ajax в модуль Joomla

Автор hemicide

Ответов: 19
Просмотров: 1053
Последний ответ 11.04.2022, 08:44:33
от sivers
Применение ajax (Аякс) в модуле Joomla

Автор tm2010

Ответов: 34
Просмотров: 3947
Последний ответ 26.09.2020, 09:38:35
от b2z
ajax проверку на вход. В стандартном модуле входа?

Автор Dolphin4ik_1

Ответов: 4
Просмотров: 468
Последний ответ 23.07.2020, 15:03:57
от sivers
Обработка AJAX в компоненте Joomla!3

Автор balancer

Ответов: 33
Просмотров: 10315
Последний ответ 23.07.2020, 07:45:53
от Dolphin4ik_1
Модуль обратной связи. Как использовать свойство context в ajax запросе

Автор ushangi

Ответов: 0
Просмотров: 480
Последний ответ 15.02.2020, 22:08:12
от ushangi