Трюки с виджетами

Передача доп.параметров в CloudPayments

Иногда не хватает стандартных возможностей Тильды и нам на помощь приходит HTML-блок
Очень редко, но возникает потребность передать дополнительные параметры в платежную систему, например в CloudPayments, но при этом чтобы работало все как с блоком ST02 (Платежная система)
Пишем свой обработчик для оплаты через CloudPayments
Для работы, нужно указать публичный ключ CloudPayments, тип валюты, язык виджета и дополнительные параметры, ради которых появилось желание написать свой обработчик оплаты, а не воспользоваться существующим блоком ST02.


<script type="text/javascript">
$(document).ready(function(){
    window.cp_lang = 'ru-RU';
    window.cp_currency = 'RUB';
    window.cp_publicId = '';
    window.cp_failurl = '';
    window.cp_successurl='';

    function user_sendPaymentEventToStatistics(product, price) {
        var virtPage = '/tilda/order/?product='+product+'&price='+price;
        var virtTtitle = 'Order: '+product+' = '+price;
        if(ga) {
            if (window.mainTracker != 'tilda') {
                ga('send', {'hitType':'pageview', 'page':virtPage,'title':virtTtitle});
            }
        }
        
        if (window.mainMetrika > '' && window[window.mainMetrika]) {
            window[window.mainMetrika].hit(virtPage, {title: virtTtitle,referer: window.location.href});
        }
    }
    
    
    function user_initCloudPayments() {
        
        if (typeof cp == "object" && typeof cp.CloudPayments == "function") {
            user_handleCloudPaymentsApiReady();
        } else {
            if(window.cloudpaymentsapiiscalled!==true){
                var script = document.createElement("script");
                script.type = "text/javascript";
                script.src = "https://widget.cloudpayments.ru/bundles/cloudpayments";
                document.body.appendChild(script);
                window.cloudpaymentsapiiscalled=true;
            }
            
            setTimeout(function(){
                user_initCloudPayments();
            }, 10);
        }
    
    }
    
    function user_handleCloudPaymentsApiReady() {
        
        $('[href^="#price"]').click(function(e){
            e.preventDefault();
    
            if(! window.cloudpaymentshandler) {
                window.cloudpaymentshandler = new cp.CloudPayments({language: window.cp_lang});
            }
    
            var userCPclick = $(this);
            var tmp = $(this).attr('href');
            // разбираем ссылку и вытаскиваем данные для вызова виджета оплаты: #price:Cost:Product name
            var arParam = tmp.split(':');
            var productprice = parseFloat(arParam[1].replace(/[^0-9\.]/g,''));
            var productname = arParam[2];
            if (! productname) {
                var tmp=$(this).closest('.r').find('.title');
                if (tmp.length > 0) {
                    productname = tmp.text();
                }
                productname = $(this).text();
            }
    
            /* Open Checkout with further options:*/
            window.cloudpaymentshandler.charge(
                {
                    publicId: window.cp_publicId, 
                    description: productname, 
                    amount: productprice,
                    currency: window.cp_currency, 
                    requireEmail: true,
                    data: {
                          myProp: 'myProp value'
                    }
                },
                function (options) { /* success*/
                    //действие при успешной оплате
                    user_sendPaymentEventToStatistics(productname, productprice);
                    if (window.cp_successurl > '') {
                        window.location.href = window.cp_successurl;
                    } else {
                        userCPclick.html('OK');
                    }
                    
                },
                function (reason, options) { // fail
                    if (window.cp_failurl > '') {
                        window.location.href = window.cp_failurl;
                    }
                }
            );
        });
    }

    user_initCloudPayments();
});
</script>
Свои данные нужно задать в блоке
data: {
myProp: "myProp value"
}

Вставляете указанный код в блок HTML, указываете в начале ключи, тип валюты, язык виджета и все.
Проверим, работает ли?
тест
Made on
Tilda