Форум русской поддержки Joomla!® CMS
05.12.2016, 04:32:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

[Скачать] Оплата через WebPay.by

 (Прочитано 1253 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« : 02.04.2015, 12:56:29 »

Всем доброго времени суток.
Вот и у мня появилась нужда в таком методе оплаты https://webpay.by/.

Расковырял pm_paypal и парочку, давно купленных на http://nevigen.com/ru/, pm_2checkout и pm_liqpay  
Вот чего получилось :
1 - переходит на сайт платёжной системы.
2 - после совершения платежа в систем и нажатии на кнопку завершить получаем новый заказ в админке JoomShopping со статусом "Оплачен".
3 - сохраняет № Transaction (кнопка "Transaction" в списке заказов).
4 - к имени товара добавлены код_товара+атрибуты
5 - учитывает сумму скидки
UP-1.0.1
6 - учитывает установленную в настройках "цену" комиссии платежной системы Но при этом выдаёт ошибку, так как в API не учитывается наш параметр "Стоимость оплаты".

Так выглядит в админке:
Показать текстовый блок
Что ещё нужно:
1 - научить плагин изменять статус заказа, в системе WebPay.by, на завершен. Пока только руками а админке биллинга.
По заявлению тех.поддержки -
Цитировать
У  всех  успешных  платежей  статус  автоматом  становится Authorized.
Completed у платежа будет установлен автоматически через 24 часа после
установки статуса Authorized.
2 - проверить в рабочем режиме. У меня пока нет возможности перейти в рабочий режим.
3 - На варианты ошибок - Отказался от оплаты, Не нажал кнопку "Завершить". Вроде всё работает
3 - Проверить корректность работы при использовании "Купонов на скидки". Также похоже работает нормально.
4 - желательно проверить совместимость с SSL

P.S. Уважаемый dmitry_stas прошу сильно не не гневаться за копипаст ваших решений.
Документация по API: https://yadi.sk/i/CJ3aTK1efjtSf получена от тех.поддержки WebPay.by - 2.04.2015


* jshopping_payment_webpayby_v1.0.1(STABILE).zip (10.2 Кб - загружено 19 раз.)
« Последнее редактирование: 01.07.2016, 09:41:03 от ViktorMah » Записан
dmitry_stas
Профи
********

Репутация: +795/-4
Offline Offline

Сообщений: 7743



« Ответ #1 : 02.04.2015, 13:35:02 »

та какие обиды? во-первых эти плагины под gpl, а во-вторых создание нового - это не ломание старого Azn так что никаких обид.

по проблеме - вы передаете order_number, а в ответе пытаетесь получить его как order_id. а они не всегда совпадают.
Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #2 : 02.04.2015, 19:59:32 »

Двигаемся семимильными шагами, даже не ожидал от себя такого. Хотя это Ваша заслуга dmitry_stas = понятный код пишите. Спасибо.

Теперь к делам насущным)))) Переиграл код function checkTransaction . Теперь заказ уже в админку падает, но как отмененный.

Показать текстовый блок

Цитировать
Для проверки платежа при возврате на страницу Интернет-ресурса, указанному в  поле  wsb_return_url,  необходимо  выполнить  API  команду  биллинга «get_transaction».

Нужно прикрутить этот код:
Показать текстовый блок


и ещё, лог платежа
Показать текстовый блок
« Последнее редактирование: 07.04.2015, 08:41:40 от ViktorMah » Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #3 : 03.04.2015, 13:01:23 »

К началу вторых суток Google таки дал толковую ссылку на тему "Как передать XML через POST" => http://joomlaforum.ru/index.php/topic,260826.0.html
В итоге вставил форму таким видом:
Показать текстовый блок
« Последнее редактирование: 03.04.2015, 13:07:23 от ViktorMah » Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #4 : 03.04.2015, 14:44:58 »

Только что обратил внимание - возврат со страницы оплаты sandbox.webpay.by, по нажатию "Завершить", происходит на страницу Step5 вместо Step7.
Подскажите где я мог накосячить.

Показать текстовый блок
Записан
dmitry_stas
Профи
********

Репутация: +795/-4
Offline Offline

Сообщений: 7743



« Ответ #5 : 03.04.2015, 15:19:32 »

правильнее будет сказать с шага 7 переходит на шаг 5
Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #6 : 03.04.2015, 15:34:49 »

правильнее будет сказать с шага 7 переходит на шаг 5
Да, да. Вы абсолютно правы.
Но почему так происходит?

Ведь в таком случае я просто физически не могу выполнить проверку оплаты. И следующие действия тоже. Sad
Записан
dmitry_stas
Профи
********

Репутация: +795/-4
Offline Offline

Сообщений: 7743



« Ответ #7 : 03.04.2015, 16:31:39 »

проверка уже была. редирект происходит после нее

Цитата: \components\com_jshopping\controllers\checkout.php
       if (in_array($rescode, array(0,3,4))){
            JError::raiseWarning(500, $restext);
            if (!$wmiframe){
                $this->setRedirect(SEFLink('index.php?option=com_jshopping&controller=checkout&task=step5',0,1,$jshopConfig->use_ssl));
            }else{
                $this->iframeRedirect(SEFLink('index.php?option=com_jshopping&controller=checkout&task=step5',0,1,$jshopConfig->use_ssl));
            }
Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #8 : 03.04.2015, 22:02:55 »

Продолжаю отчёт о данном творении.
Ещё раз спасибо Вам Дмитрий.
Удалось получить "Заказ завершен" со статусом "Оплачен".
Показать текстовый блок
В принципе всё отлично.
Однако отправки XML запроса с авторизацией на сервисе не происходит. И следовательно для "Платежной системы" заказ становится notify.
И это сыплет в лог извещения с данными заказов.

Получается отправку той формы нужно увязать с уходом со страницы ФИНИШ или с событием "Изменить статус заказа = Проверен/Завершен " .
И снова данные размышлизмы приводят к вопросу - КАК это реализовать?


П.С.  
Как Вы считаете, может стоит выложить данный метод оплаты в паблик?  Roll Eyes
Уже  Wink

« Последнее редактирование: 04.04.2015, 13:02:12 от ViktorMah » Записан
dmitry_stas
Профи
********

Репутация: +795/-4
Offline Offline

Сообщений: 7743



« Ответ #9 : 03.04.2015, 23:41:02 »

Получается отправку той формы нужно увязать с уходом со страницы ФИНИШ или с событием "Изменить статус заказа = Проверен/Завершен " .

надо читать документацию, что надо отдать при notify-запросе платежной системы. обычно это ответ что то типа 200 ОК. как правило отдается в функции nofityFinish платежного плагина.

Как Вы считаете, может стоит выложить данный метод оплаты в паблик?

вопрос адресован мне или всем? если мне - то зря. это ваше творение, как считаете, так и поступайте. если интересует именно мое мнение, то я думаю, что если вы не планируете его поддерживать в будущем - то проще выложить в паблик. будет лучше всем, и вам в том числе, потому что если когда нибудь понадобится версия для более нового ЖШ, то вполне вероятно, что общими усилиями уже будет найдено, что нужно изменить.
Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #10 : 03.04.2015, 23:51:17 »

надо читать документацию, что надо отдать при notify-запросе платежной системы. обычно это ответ что то типа 200 ОК. как правило отдается в функции nofityFinish платежного плагина.
Да ответ 200 ОК
Цитировать
После  совершения  удачного  платежа,  система  Webpay  будет  отсылать специально  сформированный  POST-запрос  по  адресу,  указанному  в  поле wsb_notify_url  Интернет-ресурса.  В  этом  запросе  содержится  информация  по платежу.  Полученную  информацию  Интернет-ресурс  должен  проверить  в соответствии с требованиями выполнения заказа и ответить на запрос кодом: "HTTP/1.0 200 OK".

Отдельное спасибо за  - в функции nofityFinish платежного плагина.

« Последнее редактирование: 04.04.2015, 13:00:44 от ViktorMah » Записан
dmitry_stas
Профи
********

Репутация: +795/-4
Offline Offline

Сообщений: 7743



« Ответ #11 : 04.04.2015, 10:47:27 »

ну т.е. все? победа? Azn
Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #12 : 04.04.2015, 11:25:59 »

Доброго дня.
ну т.е. все? победа? Azn
Пока не совсем. Жду ответа от тех.поддержки - "Какой командой отправлять в систему  изменение статуса заказа = Завершен"

Уважаемый  nevigen. прошу перенести тему в раздел "Плагины оплаты"
Записан
dmitry_stas
Профи
********

Репутация: +795/-4
Offline Offline

Сообщений: 7743



« Ответ #13 : 04.04.2015, 11:42:42 »

Жду ответа от тех.поддержки - "Какой командой отправлять в систему  изменение статуса заказа = Завершен"

так я ж вроде сказал какой, и вы даже вроде подтвердили

ответ что то типа 200 ОК. как правило отдается в функции nofityFinish платежного плагина
Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #14 : 04.04.2015, 12:09:21 »

да, но я пока этого не делал.
не уверен что правильно сделал:
Показать текстовый блок
вроде в логи больше не спамит  Roll Eyes. Только 1 пакет данных заказа приходит, а за вчерашний день до 70Кб файл paymentdata.log раздуло
Однако в системе статус остался Authorized а не Completed.
Разумеется загнать менеджера в адмику билинга разок другой в день = "Это святое"  Grin



« Последнее редактирование: 04.04.2015, 15:34:59 от ViktorMah » Записан
umnik.pk
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 55



« Ответ #15 : 04.04.2015, 15:58:00 »

Спасибо!
очень кстати Вы затеяли работу, так как встала потребность уже автоматизировать оплату на сайте...
Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #16 : 04.04.2015, 20:12:32 »

Смоделировал ситуацию - оплатил - кнопку Завершить не нажал - закрыл страницу биллинга.
Контора денежку сняла, а заказ не появился, но уведомление на $notify_url пришло.
Отсюда напрашивается вывод :
предстоит еще в nofityFinish сделать условие проверки по id заказов
и если нет такого id в базе отправлять - отменен

Но реализация откладывается до следующей недели.
Подозреваю, что тех.поддержка и завтра не ответит - какие команды для изменения статусов в биллинге можно применять.
« Последнее редактирование: 04.04.2015, 20:30:02 от ViktorMah » Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #17 : 05.04.2015, 12:21:19 »

Доброго времени суток.
Обновил до v1.0.2(BETA). Добавлено:
Цитировать
3 - сохраняет № Transaction (кнопка "Transaction" в списке заказов).

dmitry_stas у меня к Вам теоретический вопрос.
Код
function nofityFinish($pmconfigs) {
............
 
  return $params;
}
 
для чего предназначен return ....;  - для сохранения инфы в JS, или он может быть использован для отправки ответа на сервер платёжной системы?
Записан
dmitry_stas
Профи
********

Репутация: +795/-4
Offline Offline

Сообщений: 7743



« Ответ #18 : 05.04.2015, 12:44:46 »

вы неверно понимаете назначение nofityFinish. этот метод нужен исключительно для ответа платежной системе при $act = "notify". никаких return и прочего в нем смысла делать нет. максимум - это проверка на то, какой именно ответ должен быть, да и то, поскольку такая проверка (читай - проверка платежа) делается в checkTransaction, то обычно в nofityFinish нет смысла делать ее повторно, а можно просто использовать результат проверки из checkTransaction.
Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #19 : 07.04.2015, 09:49:39 »

Вроде всё получилось в рамках когда покупатель при оплате нажимает на кнопку "Завершить платёж".

Однако чего делать в ситуацией когда покупатель не смог или не захотел нажать "Завершить платёж"? => Заказ в магазине не создался, но деньги с покупателя сняли => и на index.php?option=com_jshopping&controller=checkout&task=step7&act=notify&js_paymentclass=pm_webpayby  пришло уведомление =>
Показать текстовый блок
=> В обычном режиме магазина, а не в "Разработчик" , менеджер даже и не узнает о поступлении такого платежа. В результате потеря клиента, денег и падение репутации магазина.

Как известить менеджера о таком "Не завершенном заказе"? Чтобы менеджер в биллинге поднял историю платежей/счетов и руками, в админке магазина, создал заказ.
« Последнее редактирование: 07.04.2015, 09:58:34 от ViktorMah » Записан
nevigen
Moderator
*****

Репутация: +734/-16
Offline Offline

Пол: Мужской
Сообщений: 8803


http://n*****n.com


« Ответ #20 : 07.04.2015, 10:19:39 »

http://prntscr.com/6qlrxh
а вот как манагеру узнать что оплачен а не брошен... тут ХЗ.
только в панели плат.сервиса
Записан
dmitry_stas
Профи
********

Репутация: +795/-4
Offline Offline

Сообщений: 7743



« Ответ #21 : 07.04.2015, 10:27:05 »

Цитировать
покупатель не смог или не захотел нажать "Завершить платёж"? => Заказ в магазине не создался

почему не создался?
Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #22 : 07.04.2015, 10:55:31 »

почему не создался?
Хотел бы я знать ответ на данный вопрос.
Записан
nevigen
Moderator
*****

Репутация: +734/-16
Offline Offline

Пол: Мужской
Сообщений: 8803


http://n*****n.com


« Ответ #23 : 07.04.2015, 11:19:42 »

не создался или незакончен ?
его физическинет даже в базе ?
« Последнее редактирование: 07.04.2015, 11:31:12 от nevigen » Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #24 : 07.04.2015, 12:04:57 »

Да его нет физически.

Выдержки из мануала API
Показать текстовый блок

Получается - нужно на index.php?option=com_jshopping&controller=checkout&task=step7&act=notify&js_paymentclass=pm_webpayby в момент прихода такого извещения произвести сверку site_order_id с id существующих заказов и если такого ID нет отправлять письмо менеджеру с данными = " поступила оплата = transaction_id, № счета в платёжной системе = order_id, для не созданного заказа = site_order_id  СОРОЧНО ПРИМИТЕ МЕРЫ"
« Последнее редактирование: 07.04.2015, 12:18:15 от ViktorMah » Записан
dmitry_stas
Профи
********

Репутация: +795/-4
Offline Offline

Сообщений: 7743



« Ответ #25 : 07.04.2015, 12:12:19 »

Да его нет физически.

вы что то путаете. заказ есть
Записан
ViktorMah
Давно я тут
****

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #26 : 07.04.2015, 12:22:37 »

вы что то путаете. заказ есть
Минут через 20 выложу лог файл + скрины

или могу дать доступ к сайту на котором всё енто тестирую


Извиняюсь действительно есть.
Моя ошибка = просто не нажал на кнопку поиска(лупу) после выбора режима "Показывать не законченные" .
ожидал автоматического изменения отображения страницы "Списка заказов"

 drink

« Последнее редактирование: 07.04.2015, 12:30:11 от ViktorMah » Записан
dmitry_stas
Профи
********

Репутация: +795/-4
Offline Offline

Сообщений: 7743



« Ответ #27 : 07.04.2015, 13:42:58 »

Извиняюсь действительно есть

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

Репутация: +26/-0
Offline Offline

Сообщений: 252


« Ответ #28 : 22.06.2016, 20:02:53 »

Ввиду грядущей деноминации BYR произвёл
обновление аддона до v-1.0.1

- исправлена ошибка в расчёте скидки.
- в отправляемые суммы включены десятичные доли с округлением до сотых.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet