Вызов Яндекс.Кассы при отправке формы Formit

Есть форма, при заполнении которой и нажатии Отправить нужно чтобы открывалась оплата через Яндекс.Кассу. Как я понял, модуль mspYaCassa вызывается при оформлении заказа. Как-то можно привязать его к рандомной кнопке?
Spirit_Ninja
20 апреля 2018, 07:43
modx.pro
1 429
0

Комментарии: 12

Олег
20 апреля 2018, 12:45
0
Без интерфейсов минишоп никак, кроме modstore.pro/packages/payment-system/yandexkassaclient
    Spirit_Ninja
    20 апреля 2018, 18:38
    0
    спасибо. Видел этот модуль, только не понял, как его использовать. Там в примере код, его нужно как сниппет вставить?
      Дмитрий
      20 апреля 2018, 20:05
      0
      Его можно использовать как хук для FormIt, передавая в него amount['value']. Почитайте, поищите примеры создания хуков для FormIt и попробуйте. На первый взгляд выглядит довольно просто
        Spirit_Ninja
        21 апреля 2018, 14:01
        0
        Буду пробовать, спасибо.
          Олег
          08 мая 2018, 16:43
          0
          Получилось что-то?
            Олег
            06 июня 2018, 13:24
            +1
            Удалось недавно самому поработать плотно с Я.Кассой, посредством данной библиотеки.
            По сути это просто обертка над официальным SDK.
            Если интересно, можете задавать вопрос, постараюсь ответить
              Антон
              19 июня 2018, 10:06
              0
              Добрый день, мне очень интересно! Сейчас делаю сайт с оплатой подписки и мне как раз надо, чтоб при выборе тарифа подписки пользователя отправляло на терминал яндекс-кассы с указанием нужной суммы, и после успешной оплаты менялись поля в профиле некоторые.
              Я так понимаю, что надо сделать форму, при отправке которой в хуке дёргается апи яндекса, так? Просто я не очень понимаю, как будет дальнейшее взаимодействие осуществляться? При срабатывании хука пользователя перекинет на страницу оплаты, а после успеха яндекс пошлёт пользователя на указанный урл с нужными мне параметрами, или как? Саму схему взаимодействия с апи не могу понять.
                Олег
                19 июня 2018, 11:04
                +1
                У яндекса немного другой принцип работы, вы отправляете запрос, с обратным редиректом, в тоже время у яндекса регистрируется скрипт capture, который занимается тем, что общается с яндексом и получает данные о платеже, соответственно логика вся строится в нем.

                У меня реализована оплата вопроса (тикета), первый тикет бесплатно, каждый остальной за денюжку, но как реализовать, вообще не имеет дела.

                Есть отдельная страница (formit я не использую). Соответственно у меня немного дописан тикетс, чтобы после первого тикета отправлял на страницу со снипетом ниже и постзапросом payfor. Сам тикет сохраняется в черновики, в дальнейшем нам это понадобится.
                <?php
                if (!$client = $modx->getService('yandexkassaclient', 'YandexKassaClient', 
                    MODX_CORE_PATH . 'components/yandexkassaclient/model/')) {
                    $modx->log(modX::LOG_LEVEL_ERROR, 'Could not load service YandexKassaClient');
                    return;
                }
                
                if (!isset($_REQUEST['payfor'])) {
                    //$modx->log(modX::LOG_LEVEL_ERROR, var_dump($_REQUEST));
                    return $modx->sendErrorPage();
                }
                try {
                    $ticket = (isset($_REQUEST['payfor'])) ? intval($_REQUEST['payfor']) : die();
                    //$modx->log(modX::LOG_LEVEL_ERROR, 'Создаю платежку');
                    $payment = $client->createPayment(
                        [
                            'amount' => [
                                'value' => 10.0,
                                'currency' => 'RUB'
                            ],
                            'confirmation' => [
                                'type' => 'redirect',
                                'return_url' => 'https://сайт/paysuccess?payfor='.$ticket,
                            ],
                            'metadata' => [
                                'ticketid' => $ticket,
                            ],
                        ],
                        uniqid('', true)
                    );
                    
                    header('Location: '.$payment->confirmation->confirmation_url,true,302);
                    
                } catch (Exception $e) {
                    $modx->log(modX::LOG_LEVEL_ERROR, $e->getMessage());
                    return;
                }
                В самой я.кассе указывается адрес к capture, у меня это внешний пхп файл (хотя также можно реализовать сниппетом), там подключается MODx API и скрипт ловит статус платежа, ticketid, если он оплачен — публикует тикет, изменяет дату, переносит в раздел.
                Если оплата не проходит, он не публикуется и когда пользователь возвращается по адресу:
                сайт/paysuccess?payfor='.$ticket в зависимости от того, опубликован или нет тикет — выводится сообщение об оплате.

                У вас задача даже еще проще. Если нужен мой скрипт внешний, могу предоставить, напишите на почту. Либо если еще будут желающие, напишу готовое решение, как сделать платные разделы тикетов.
                  Антон
                  19 июня 2018, 12:43
                  0
                  То есть, если мне надо, чтоб пользователь в личном кабинете оплатил подписку по нажатию на кнопку, то я делаю форму со скрытыми полями(например идентификатор тарифа), при отправке формы у меня вызывается в хуке якассаклиент, в него подставляются значения суммы и тот-же айдишник в метадату. Параллельно я в настройках яндекса прописываю урл, на который он будет отвечать о результатах оплаты, например mysite.ru/successpay по которому лежит сниппет, который ловит метадату, отправленную мной-же и на основе неё я уже обновляю профиль пользователя?
                  А вот ещё вопрос, есть какой-то способ настроить автоплатёж в якассе? Чтоб по истечению срока он автоматом списывал, если галочка стоит в профиле?
                    Олег
                    19 июня 2018, 12:53
                    +1
                    «которому лежит сниппет, который ловит метадату, отправленную мной-же и на основе неё я уже обновляю профиль пользователя?» — нет, в этом и отличие я.кассы, обработка платежа не при возврате на страницу, а во время оплаты, в отдельном скрипте.

                    Автоплатежи делаются практически также, только нужен еще скрипт в крон, который получает информацию о подписке и продлевает, также обязательно нужно продумать интерфейс отмены платежа.
                      Антон
                      19 июня 2018, 13:00
                      0
                      Ну тоесть вот пользователя отправило на страницу яндекса, как только он оплатил, яндекс невидимо дёргает скрипт, в который шлёт статус и всякое такое, и этот скрипт делает всю логику, а пользователя просто отправляет на какой-то урл, где говорится, что он молодец, и теперь у него есть подписка, так?

                      Для отмены автоплатежа у меня там галочка стоит специальная. Если её убрать, то крон просто не будет проводить платёж. А разве можно по крону самостоятельно, без участия пользователя, всяких там смсок делать оплату?
                        Олег
                        19 июня 2018, 13:09
                        +1
                        1) Все верно.
                        2) Наоборот немного, крон лишь для обновления данных о подписке на стороне сайта (обновления даты и прочей инфы), для отмены нужно инициализировать запрос. А продление автоматически на стороне яндекса, без вашего участия.

                        Если честно, что касается подписок, реализовал на робокассе, на яндексе только исходя из изученной документации.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    12