Итак — в эфире очередной обзорчик реализованной мной сегодня задачи, а конкретно:
Есть определенный сайт продающий информационный пакет (файлик).
Приём оплаты и рассылка файла была в ручном режиме:
ПОКУПАТЕЛЬ:
1. Заходим на сайт, читаем о способах оплаты, выбираем — вбиваем реквизиты, оплачиваем.
2. Даём знать о проведённой оплаты, ждём на мыло файл.
ПРОДАВЕЦ:
1. Получаем заявку — заходим в платежную систему, ищем оплату
2. Отправляем файлик на мыло оплатившего
3. При обновлении файла скидываем новую версию всем уже купившим.
При количестве купивших переваливших за 1000 уников процедура уже начала «напрягать»… и заказчик обратился ко мне с вопросом автоматизации процесса
1. Делаю автоматизацию на стороне сайта (загоняем скриптом оплативших пользователей в отдельную группу, которым даём возможность скачивать последнюю версию файла (с учётом кол-ва скачиваний))
2. Прикручиваем РОБОКАССУ для принятия платежей.
Платформа системы управления была БИТРИКС, но штатный интернет магазин я использовать не стал т.к. не позволила редакция продукта.
Соответственно, выбрал вариант прикручивания системы к любому движку на PHP.
Скачал демку, почитал документацию, настроил админку в панели робокассы
Далее всё предельно ясно и понятно:
Код в demo1.php формирует кнопку «оплатить» (этот код я перенёс «как есть») — далее всё на стороне робокассы.
По факту оплаты прилетает запрос на result.php куда я и запихал присвоение юзеру нужной группы
CUser::SetUserGroup($shp_item, array_merge(CUser::GetUserGroup($shp_item), array(9)));
В success.php поставил редирект на страничку где появляется ссылка на скачивание файла.
А теперь о подводном камне движка Битрик, с которым я немного поломал голову:
Сначала для проверки принадлежности использовал CSite::InGroup и всё вроде работало, пока не прикрутил Робокассу, которая меняет группу в онлайн режиме …
И тут-то оказалось, что данные хранятся в сессии поэтому необходим релогин на сайте, чтобы получить измененные данные! что меня в корне не устраивало
это как оказалось касается и всех методов получения группы глобального объекта $USER
Решение — запрос группы с передачей ID пользователя $arGroups = CUser::GetUserGroup($USER->GetID()) и проверка вхождения в массив нужной группы array_search($grpID, $arGroups)
Остальное прошло без запинок
Один комментарий на «“Прием платежей на сайте. Робокасса плюс Битрикс … и другие”»
Сайт жив и это очень хорошо…