Документация для партнёров: ссылки и постбэки
Как партнёры ForestVPN делают ссылки, ставят таблицу цен или оплату на своих страницах, получают постбэки и читают выписки и выплаты.
На этой странице (10)
Эта страница — справочник по партнёрской программе: что делает каждый инструмент, как точно выглядит ссылка, код для вставки или постбэк и как продажа превращается в выплату. Что программа платит, смотрите на странице партнёрской программы. Юридический текст — в условиях для партнёров. Идеи о том, что строить с этими инструментами, — в руководстве для партнёров (только на английском).
Прежде чем начать
Войдите на partners.fvpn.net по электронной почте. Кабинет на английском языке. Его страницы:
- Overview: клики, регистрации и платежи за выбранный период.
- Conversions: все события, которые принесли ваши ссылки, со статусом и комиссией. Их можно скачать в CSV.
- Statements: то, что мы подготовили к выплате, по странице на каждую выписку.
- Links: конструктор ссылок. Он пишет ссылку и проверяет её до того, как вы ею поделитесь.
- Embeds: ключи для таблицы цен, QR-кода или оплаты на вашей странице.
- Postbacks: адреса, на которые приходит HTTPS-запрос, когда клиент регистрируется, платит или получает возврат.
- Profile: ваш партнёрский код и команда.
Ваш код — короткое имя в каждой ссылке, например acme. У участников команды одна из двух ролей: owner может менять адреса постбэков, viewer только читает.
Ссылки
Есть две формы, обе работают на любой странице сайта:
https://fvpn.net/<any page>?ref=<CODE>
https://fvpn.net/r/<CODE>Первая добавляет ref к адресу страницы. Вторая, /r/<CODE>, короткая и отправляет посетителя на главную страницу на его языке. В обоих случаях посетитель попадает на чистый адрес, а наш сайт запоминает ваш код на 30 дней.
Ведите на страницу цен или на оплату. Комиссия начисляется только за покупки через оплату на сайте, поэтому платит именно ссылка, которая приводит на страницу с ценой.
https://fvpn.net/en/pricing/?ref=<CODE>
https://fvpn.net/en/checkout/?ref=<CODE>&plan=annualСтраница Links в кабинете собирает такие ссылки на любом из 11 языков сайта и читает каждую обратно, показывая, куда она приведёт.
Ваши метки
К ссылке можно добавить метки двух видов, и обе возвращаются к вам в кабинете и в постбэках.
click_id: одно значение до 128 символов для вашего трекера. Допустимы буквы, цифры и._~-.sub1—sub5: пять меток до 64 символов каждая, с теми же допустимыми символами. Используйте их для канала, страницы, варианта.
https://fvpn.net/en/pricing/?ref=<CODE>&sub1=video&sub2=review-2026&sub3=aМетки учитываются только рядом с ref или в ссылке /r/. Значение с недопустимым символом отбрасывается, а клик всё равно засчитывается. В руководстве для партнёров есть схема названий, которая остаётся понятной и через год.
Ссылки, которые переживают обёртки
Некоторые места переписывают ссылки, которые вы публикуете. Обёртка вроде vk.com/away.php или предпросмотр в Telegram могут обрезать всё после знака вопроса, а с ним и ваш код. В ссылке, устойчивой к таким обёрткам, знака вопроса нет совсем: всё лежит в пути.
https://fvpn.net/r/<CODE>/<page>/<name>.<value>/После кода идут сегменты страницы (строчные буквы, цифры и дефисы), затем любое число пар name.value. Допустимые имена: plan (monthly или annual), m (рынок цен), click_id и sub1 — sub5. Заканчивайте ссылку косой чертой.
https://fvpn.net/r/<CODE>/en/pricing/
https://fvpn.net/r/<CODE>/en/checkout/plan.annual/
https://fvpn.net/r/<CODE>/en/pricing/sub1.telegram/sub2.post-12/Первая ведёт на страницу цен. Вторая открывает оплату годового тарифа. Третья — пост в Telegram-канале: метки telegram и post-12 дойдут, даже если ссылка пройдёт через обёртку. Страница Links собирает такие ссылки и проверяет каждую, читая её обратно.
Второй адрес
ru.fvpn.net отдаёт те же страницы и ту же оплату, что и fvpn.net. Все формы ссылок выше работают на обоих адресах. Выберите его, если fvpn.net медленно открывается у вашей аудитории; конструктор ссылок в кабинете предлагает оба.
Как засчитывается продажа
- Ваша ссылка ставит cookie, которое помнит посетителя 30 дней. Если посетитель нажимает ссылки нескольких партнёров, засчитывается последний клик.
- Клиент становится вашим, когда создаёт аккаунт при оплате на сайте. Более поздние клики этого не меняют.
- Последующие платежи аккаунта, который стал вашим, тоже засчитываются, в том числе продления, оплаченные через App Store или Google Play.
- Не засчитываются: приложение, установленное прямо из магазина, — оно не несёт вашу ссылку; страницы
/get/; предзагрузки и встроенные просмотры в приложениях, которые не шлют переход; и клики сверх 500 в день, которые доходят до сайта, но не считаются. Для нового партнёра предел — 500. Напишите нам, если нужно поднять. - При вводном предложении маленький первый платёж ничего не приносит; первый платёж по полной цене считается первым платежом.
- Возврат или оспаривание платежа отменяет его комиссию.
Ключи для вставки
Ключ для вставки позволяет вашей странице показывать ссылку, таблицу цен или оплату. Создайте его в Embeds: назовите, выберите свой код, перечислите страницы, где он может появляться, выберите тарифы, язык, рынок цен и цвета. Каждая страница пишется как https:// и её домен, без пути. В ключе может быть до 10 страниц. Ключ можно отозвать в любой момент; отозванный ключ перестаёт работать сразу.
Ключ публичен по замыслу, ведь он лежит в разметке вашей страницы. Защищает его список страниц, а не секретность. Вставки передают sub1 — sub5, но не click_id.
Ссылка и QR-код (V1)
Самая простая вставка — ссылка на нашу оплату и QR-код, который открывает тот же адрес. Кабинет показывает оба для каждого тарифа. В ссылке нет текста с ценой, поэтому она не устаревает.
<a href="https://fvpn.net/en/checkout/?k=<EMBED_KEY>&plan=annual" target="_blank" rel="noopener">Get ForestVPN Premium</a>Таблица цен (V4)
Таблица цен показывает на вашей странице наши актуальные тарифы и цены. Цены берутся у нас, поэтому вы их не вводите. Скопируйте код из кабинета: в нём текущий файл загрузчика и его хеш целостности. Общий вид:
<div
data-fvpn-embed="<EMBED_KEY>"
data-plan="annual"></div>
<script
src="https://fvpn.net/embed/v1.<hash>.js"
integrity="sha384-<hash>"
crossorigin="anonymous"
async></script>Посетитель нажимает кнопку и продолжает на нашей странице оплаты, в новой странице верхнего уровня. Комиссия начисляется так же, как за любую ссылку.
Оплата на вашей странице (V2, V3)
Оплата может открываться и на вашей странице, так что посетитель никуда не уходит. Есть две формы. V2 превращает ссылку в кнопку, которая открывает оплату в окне поверх вашей страницы. V3 вставляет оплату внутрь страницы.
<a
href="https://fvpn.net/en/checkout/?k=<EMBED_KEY>&plan=annual"
data-fvpn-open="<EMBED_KEY>"
data-plan="annual"
data-context="travel"
data-sub1="video">Get ForestVPN Premium</a>
<script
src="https://fvpn.net/embed/v1.<hash>.js"
integrity="sha384-<hash>"
crossorigin="anonymous"
async></script><div
data-fvpn-embed="<EMBED_KEY>"
data-mode="checkout"
data-plan="annual"
data-sub1="video"></div>
<script
src="https://fvpn.net/embed/v1.<hash>.js"
integrity="sha384-<hash>"
crossorigin="anonymous"
async></script>data-context выбирает заголовок из короткого списка: privacy, travel или devices. data-sub1 — data-sub5 несут ваши метки.
Оплата на вашей странице включается для каждого ключа нашими сотрудниками после проверки страницы. Мы смотрим на три вещи: страница работает по HTTPS и принадлежит вам, то, что на ней сказано о ForestVPN, могло бы быть сказано на нашем собственном сайте, и ваш аккаунт активен. Если добавить страницу в ключ, у которого оплата включена, она выключается до следующей проверки. Встроенная форма (V3) открывается после некоторого времени работы с формой в окне (V2). До этого ключ показывает ссылку и таблицу цен.
Постбэки
Постбэк — это HTTPS-запрос, который мы отправляем на ваш сервер, когда с клиентом, которого вы к нам привели, что-то происходит. Добавьте до пяти адресов на странице Postbacks. У каждого свой метод (GET или POST), адрес с макросами и нужные события. Шесть событий: registration, trial_start, first_payment, renewal, refund и chargeback.
Макросы ставятся в адрес: {click_id}, {sub1} — {sub5}, {event}, {event_id}, {conversion_id}, {amount}, {currency}, {commission}, {rail} и {ts}. POST отправляет те же значения ещё и в теле JSON. Суммы указаны в долларах США. Мы никогда не отправляем номер аккаунта, электронную почту, устройство, страну или IP-адрес.
Два примера тела POST. Первый — первый годовой платёж на 49.99, второй — продление того же тарифа. Комиссия зависит от тарифа в вашем кабинете.
{"v":1,"event_id":"6f1c0e2a9b7d4c3e8a5f0b1d2c3e4f50.2","event":"first_payment","conversion_id":"6f1c0e2a9b7d4c3e8a5f0b1d2c3e4f50","click_id":"abc123","sub1":"video","sub2":"","sub3":"","sub4":"","sub5":"","amount":"49.99","currency":"USD","commission":"19.42","rail":"web","ts":1767225000}{"v":1,"event_id":"6f1c0e2a9b7d4c3e8a5f0b1d2c3e4f50.3","event":"renewal","conversion_id":"6f1c0e2a9b7d4c3e8a5f0b1d2c3e4f50","click_id":"abc123","sub1":"video","sub2":"","sub3":"","sub4":"","sub5":"","amount":"49.99","currency":"USD","commission":"14.56","rail":"web","ts":1798761000}Каждый запрос несёт заголовок X-FVPN-Signature в виде t=<unix seconds>,v1=<hex>. Проверяйте его, прежде чем доверять запросу. Соберите строку из шести строк (v1, время, идентификатор события из X-FVPN-Event-Id, метод, полный адрес и SHA-256 тела), подпишите её HMAC-SHA256 секретом вашего адреса и сравните за постоянное время. Отклоняйте запрос старше 300 секунд. Убирайте повторы по event_id: запрос может прийти дважды.
import { createHash, createHmac, timingSafeEqual } from 'node:crypto';
// secret: the endpoint's secret, with its whsec_ prefix. body: the raw bytes received.
export function verify(secret, headers, method, url, body) {
const sig = Object.fromEntries(headers['x-fvpn-signature'].split(',').map((p) => p.split('=')));
if (Math.abs(Date.now() / 1000 - Number(sig.t)) > 300) return false;
const canonical = ['v1', sig.t, headers['x-fvpn-event-id'], method, url, createHash('sha256').update(body).digest('hex')].join('\n');
const want = createHmac('sha256', secret).update(canonical).digest();
const got = Buffer.from(sig.v1, 'hex');
return got.length === want.length && timingSafeEqual(got, want);
}Если ваш сервер не отвечает кодом успеха, мы повторяем отправку по расписанию, которое растягивается примерно на двое суток. Неудачную доставку можно отправить заново из кабинета. На странице адреса есть кнопка проверки, а журнал доставок хранит каждую попытку 90 дней.
Полное описание, с рабочими проверками подписи на девяти языках и тестовыми примерами, — в руководстве по постбэкам (только на английском). Тела в нём — тестовые примеры подписи, поэтому суммы там условные.
Конверсии, выписки и выплаты
Каждое событие — строка в Conversions с одним из четырёх статусов:
- Pending: комиссия ждёт окончания периода удержания.
- Approved: период удержания прошёл, строка входит в ваш баланс.
- Rejected: строка не будет выплачена, например из-за трафика, нарушающего условия.
- Paid: строка была в выписке, которую мы выплатили.
Новая комиссия удерживается 30 дней, чтобы возврат ещё мог её отменить. Возврат или оспаривание платежа выглядит как строка с минусом. Если он приходит после выплаты, его вычитают из вашей следующей выписки.
Когда подтверждённый баланс достигает $50, мы готовим выписку и выплачиваем её. Выписки делаются вручную, фиксированной даты пока нет. У каждой выписки своя страница в Statements со всеми строками и загрузкой CSV. Суммы указаны в долларах США по курсу дня платежа.
Платёжные реквизиты в кабинете изменить нельзя. Чтобы их задать, напишите на partners@fvpn.net с адреса, под которым вы входите, и пришлите реквизиты. Мы отвечаем, чтобы подтвердить их, прежде чем записать, и не платим в течение 14 дней после изменения. Первая выплата может подождать, пока не истекут сроки оспаривания платежей по картам (до 90 дней после платежа).
Ограничения и правила
- Засчитываемые клики: 500 в день для нового партнёра. Остальные всё равно попадают на сайт, но не считаются. Попросите нас поднять предел.
- Адреса постбэков: 5 на партнёра.
- Страниц в ключе: 10.
- Метки клика:
click_id128 символов,sub1—sub5по 64.
Правила о том, что можно говорить и где размещать ссылки, — в условиях для партнёров и, с примерами, в руководстве для партнёров.