Задать вопрос

Как правильно прописать вызов функции на событие, например, нажатие кнопки «Оплатить»?

Здравствуйте! Недавно подключил на сайт платежную форму от CloudPayments. В их документации показан такой скрипт платежной формы:

var payments = new cp.CloudPayments({
    language: "ru-RU",
    email: "",
    applePaySupport: false,
    googlePaySupport: true,
    yandexPaySupport: true,
    tinkoffInstallmentSupport: true,
});

payments.pay("charge", {
    publicId: "ВАШ_ID",
    description: "Тестовая оплата",
    amount: 100,
    currency: "RUB",
    invoiceId: "",
    accountId: "",
    email: "",
    skin: "classic",
    requireEmail: true,
}).then(function(widgetResult) {
    console.log('result', widgetResult);
}).catch(function(error) {
    console.log('error', error);
});


Я добавил этот код, прямо перед закрывающимся body. Но форма оплаты почему-то вызывается, как только заходишь на сайт. А нужно, чтобы вызывалась при клике на кнопку.

В их документации также указано:

И прописать вызов функции на событие, например, нажатие кнопки «Оплатить»:

$('#checkout').click(pay);

Но, как бы я не пытался - форма оплаты все равно показывается при открытии страницы сразу. Подскажите, что я делаю не так. Заранее спасибо!
  • Вопрос задан
  • 336 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
@StiflerProger
ну потому-что тебе в html нужно просто добавить
var payments = new cp.CloudPayments({
    language: "ru-RU",
    email: "",
    applePaySupport: false,
    googlePaySupport: true,
    yandexPaySupport: true,
    tinkoffInstallmentSupport: true,
});


а второй участок кода, уже запихнуть в функцию, и вызывать её по клику.
А сейчас у тебя как только загружается страница выполняется метод payments.pay(...> который открывает форму оплаты

upd:
--<a href = "#pay" class="btn btn-success d-block btn-lg ajax-modal"><?php echo html_svg_icon('solid', 'shopping-cart'); ?> Купить</a>
++<a href = "#pay" onclick="checkout" class="btn btn-success d-block btn-lg ajax-modal"><?php echo html_svg_icon('solid', 'shopping-cart'); ?> Купить</a>


в после body добавить это
<script>
var payments = new cp.CloudPayments({
    language: "ru-RU",
    email: "",
    applePaySupport: false,
    googlePaySupport: true,
    yandexPaySupport: true,
    tinkoffInstallmentSupport: true,
});

function checkout() {
  payments.pay("charge", {
    publicId: "ВАШ_ID",
    description: "Тестовая оплата",
    amount: 100,
    currency: "RUB",
    invoiceId: "",
    accountId: "",
    email: "",
    skin: "classic",
    requireEmail: true,
  });
}
</script>
Ответ написан
Zagir-vip
@Zagir-vip
Web dev, Game dev, app dev, Разработчик на Python!
Для того чтобы вызвать функцию pay() при нажатии на кнопку «Оплатить», нужно прописать следующий код:

$('#checkout').click(function() {
    payments.pay("charge", {
        publicId: "ВАШ_ID",
        description: "Тестовая оплата",
        amount: 100,
        currency: "RUB",
        invoiceId: "",
        accountId: "",
        email: "",
        skin: "classic",
        requireEmail: true,
    }).then(function(widgetResult) {
        console.log('result', widgetResult);
    }).catch(function(error) {
        console.log('error', error);
    });
});


В этом коде мы используем метод click() объекта jQuery для привязки функции к событию клика на кнопке с id checkout. Внутри этой функции вызываем функцию payments.pay(), которая откроет форму оплаты. Теперь форма будет вызываться только при клике на кнопку «Оплатить»
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Kardanchik
На данный момент при генерации виджета изменился нейминг параметра tinkoffInstallmentSupport -> tinkoffPaySupport
Пример использования функции new cp.CloudPayments() со всеми возможными кнопками (актуальный на момент написания комментария):
var payments = new cp.CloudPayments({
    language: "ru-RU",
    applePaySupport: true,
    googlePaySupport: true,
    yandexPaySupport: true,
    tinkoffPaySupport: true,
    mirPaySupport: true,
    sbpSupport: true
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы