# JS адаптер

Это JavaScript код, предназначенный для работы с параметрами URL, cookie и элементами трекера на страницах лендинга. Скрипт совместим с Локальными, Внешними (Redirect), KClient PHP лендингами. Код позволяет выполнять следующие действия:

# Установка JS кода

Откройте лендинг в Редакторе кода. Для каждой страницы сделайте следующее:

  1. Найдите теги <head> .... </head>.
  2. Скопируйте и вставьте код до закрывающего тега </head>:
<!-- JS adapter start -->
<script type="application/javascript">
function getCookie (name) {
    var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)')
    var value = v ? v[2] : null
    return value && value !== 'undefined' ? value : null
}

function setCookie (name, value, days) {
    var d = new Date()
    d.setTime(d.getTime() + 24 * 60 * 60 * 1000 * days)
    document.cookie = name + '=' + value + ';path=/;expires=' + d.toUTCString()
}

function getSubId () {
    var params = new URLSearchParams(window.location.search)
    var clientSubid = '<?php echo isset($client) ? $client->getSubid() : "" ?>'
    if (clientSubid && !/>/.test(clientSubid)) {
        return clientSubid
    }
    return params.get('subid') || params.get('_subid') || getCookie('subid') || getCookie('_subid') || null
}

function getToken () {
    var params = new URLSearchParams(window.location.search)
    var clientToken = '<?php echo isset($client) ? $client->getToken() : "" ?>'
    if (clientToken && !/>/.test(clientToken)) {
        return clientToken
    }
    return params.get('token') || params.get('_token') || getCookie('token') || null
}

function getPixel () {
    var params = new URLSearchParams(window.location.search)
    return params.get('pixel') || getCookie('pixel') || null
}

function sendPostback (element, event, status, payout = 0, tid = '', sub_id_1 = '', sub_id_2 = '') {
    var subId = getSubId() || ''
    var postbackUrl = 'POSTBACK_URL/postback?subid=' + subId + '&status=' + status + '&payout=' + payout + '&tid=' + tid + '&sub_id_1=' + sub_id_1 + '&sub_id_2=' + sub_id_2
    var redirectUrl = element.getAttribute('href')
    event.preventDefault()
    fetch(postbackUrl)
            .then(response => {
                if (response.ok) {
                    console.log('Postback отправлен успешно')
                } else {
                    console.error('Ошибка при отправке postback')
                }
                if (redirectUrl) {
                    window.location.href = redirectUrl
                }
            })
            .catch(error => {
                console.error('Ошибка при отправке запроса:', error)
                if (redirectUrl) {
                    window.location.href = redirectUrl
                }
            })
}

document.addEventListener('DOMContentLoaded', function () {
    var params = new URLSearchParams(window.location.search)
    var subid = getSubId()
    var token = getToken()
    var pixel = getPixel()
    params.set('_token', token)
    setCookie('pixel', pixel)
    setCookie('token', token)
    setCookie('subid', subid)
    document.querySelectorAll('a').forEach(function (link) {
        try {
            var url = new URL(link.href)
            params.forEach(function (v, k) {
                url.searchParams.append(k, v)
            })
            link.href = url.toString()
        } catch (e) {
            console.error(`[Exception] Bad params: unexpected link '${link.href}' for new Url()`)
        }
    })
    var subIdRegExp = new RegExp(`\{subid\}`, 'g')
    var tokenRegExp = new RegExp(`\{token\}`, 'g')
    var pixelRegExp = new RegExp(`\{pixel\}`, 'g')
    document
            .querySelectorAll('input[type="hidden"]')
            .forEach(function (input) {
                if (subIdRegExp.test(input.value)) {
                    input.value = input.value.replaceAll(subIdRegExp, subid)
                }
                if (tokenRegExp.test(input.value)) {
                    input.value = input.value.replaceAll(tokenRegExp, token)
                }
                if (pixelRegExp.test(input.value)) {
                    input.value = input.value.replaceAll(pixelRegExp, pixel)
                }
            })
    document.querySelectorAll('form').forEach(function (form) {
        params.forEach(function (v, k) {
            var input = document.createElement('input')
            input.type = 'hidden'
            input.name = k
            input.value = v
            form.append(input)
        })
    })
})
</script>
<!-- JS adapter end -->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  1. Cохраните изменения.

# Создание ссылки оффера

  1. Установите код JS адаптер на всех страницах лендинга, где хотите фиксировать переход на оффер.

  2. Настройте ссылку оффера, используя конструкции:

# Отправка postback

  1. Установите код JS адаптер на index.html или index.php вашего лендинга.

  2. Установите код отправки postback на страницу благодарности (или на обработчик вашего лендинга), используя конструкции:

  1. Postback URL замените на URL вашего трекера. Смотрите в Обслуживании - Postback URL. Важно: для корректной отправки postback IP-адрес в ссылке замените на любой домен, добавленный в трекер напрямую (без проксирования Cloudflare).
  • Для получения postback с внешнего оффера (редирект), в параметрах оффера необходимо передавать subid={subid}.

# Отправка postback по кнопке на странице

# Отправка postback с кнопки перехода на оффер

  1. Установите код JS адаптер на index.html или index.php вашего лендинга.

  2. Добавьте код для отправки postback и перехода на оффер в потоке кампании:

<a href="{offer}" onclick="sendPostback(this, event, 'replace', 2);">Click me</a>
1

Где replace замените на статус конверсии, 2 — на необходимый доход конверсии.

  1. Postback URL в коде JS адаптер замените на URL вашего трекера. Смотрите в Обслуживании - Postback URL. Важно: для корректной отправки postback IP-адрес в ссылке замените на любой домен, добавленный в трекер напрямую (без проксирования Cloudflare).

# Отправка postback с любой кнопки

  1. Установите код JS адаптер на index.html или index.php вашего лендинга.

  2. Добавьте код для отправки postback:

<button onclick="sendPostback(this, event, 'replace', 2, Date.now());">Add to cart</button>
1

Где replace замените на статус конверсии, 2 — на необходимый доход конверсии.

  1. Postback URL в коде JS адаптер замените на URL вашего трекера. Смотрите в Обслуживании - Postback URL. Важно: для корректной отправки postback IP-адрес в ссылке замените на любой домен, добавленный в трекер напрямую (без проксирования Cloudflare).

WARNING

Обратите внимание, что передача в postback параметров sub_id_1='', sub_id_2='' перезапишет данные от источника, вписанные в параметры трекера sub_id_1 и sub_id_2. Необходимо заменить параметры в postback на любые свободные в вашей кампании sub_id_1-sub_id_30, либо убрать из postback.

# FB Pixel

  1. Установите код JS адаптер на всех страницах лендинга, где хотите фиксировать пиксель.
  2. Добавьте код пикселя на нужные страницы. Используйте функцию getPixel():
<!-- Facebook Pixel Code -->
<script>
(function () {
    let match = document.cookie.match(/pixel=([^;]+)/);
    let pixel = match ? match[1] : null;

    if (!pixel) return;

    const img = document.createElement('img')
    img.setAttribute('height', '1')
    img.setAttribute('width', '1')
    img.setAttribute('src', 'https://www.facebook.com/tr?id=' + pixel + '&ev=Lead&noscript=1')
    if (document.body) {
        document.body.appendChild(img);
    } else {
        window.onload = () => document.body.appendChild(img);
    }
})();
</script>
<!-- End Facebook Pixel Code -->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Пиксель работает на главной и на внутренней страницах лендинга.

Возможно использовать решение со страницы FB Pixel или комбинировать. Оба решения совместимы друг с другом.