Сбор клиентских данных¶
Чтобы снизить риск недействительных и мошеннических операций, а также контролировать соответствие деятельности партнёра указанной им при заключении договора, сервису приёма платежей необходимо получать определённые клиентские данные из интерфейса партнёра. К таким данным относятся уникальный идентификатор браузера, URL страницы, идентификатор клиента и другая информация. Партнёр должен отправлять данные с каждой страницы, на которую клиент переходит в процессе оплаты.
Сбор и отправка данных выполняются через fingerprint API — сервис для сбора данных о клиенте.
Использование fingerprint API¶
-
Загрузите на страницу с платёжной формой вашего интернет-магазина скрипт, размещённый по ссылке
https://fp.qiwi.com/static/fp.js:Обратите внимание
Если в процессе оплаты на вашем сайте клиент проходит путь, состоящий из нескольких страниц, скрипт нужно загрузить на все такие страницы. Пример см. на схеме ниже.
flowchart TD ext("Внешний сайт") -- "Перенаправление клиента для оплаты заказа" --> site subgraph site [Сайт партнёра] Page1("Страница 1\nВыбор способа оплаты\nИнтеграция Fingerprint API") --> Page2("Страница 2\nВвод платёжных реквизитов\nИнтеграция Fingerprint API") Page2 --> Page3("Страница 3\nВвод дополнительной информации о заказе\nИнтеграция Fingerprint API") Page3 --> Page4("Финальная страница оплаты\nПодтверждение оплаты\nИнтеграция Fingerprint API") end -
После перенаправления клиента на платёжную форму партнёра или при выполнении запроса на создание платежа, вызовите функцию для отправки данных
window.initUserFingerprint():Где:
params— объект, в котором можно передать дополнительные параметры в сервис. Глубокие структуры со вложенными объектами не допускаются.callback— функция, которая вызывается после отправки данных. Здесь можно разместить логику с последующим переходом на страницу оплаты, так как переход должен происходить после того, как скрипт собрал и отправил данные.
Важная информация
Вызвать функцию window.initUserFingerprint() можно только после загрузки скрипта браузером, иначе вы получите ошибку initUserFingerprint is not defined.
Примеры вызова функции см. ниже.
Проверка успешности сбора данных¶
После отправки клиентских данных в сервис выполните запрос:
Возможные ответы сервиса:
- HTTP-статус
204— интеграция выполнена успешно. - HTTP-статус
400или иной — получена ошибка при интеграции.
Пример интеграции¶
Пример полной интеграции сервиса сбора данных на веб-страницу приведён ниже:
function loadUserFingerprintScript(host) {
return new Promise((resolve, reject) => {
let attempt = 0;
const maxAttempts = 3;
const timeout = 500;
const maxTimeout = 3000;
function loadScript() {
const script = document.createElement('script');
script.src = `${host}/static/fp.js`;
script.defer = true;
script.addEventListener('load', () => {
resolve();
})
// При ошибке скрипт сделает еще несколько попыток загрузиться.
script.addEventListener('error', () => {
if (attempt > maxAttempts) {
reject();
return;
}
let calculatedTimeout = timeout * 2**attempt;
const resultTimeout = calculatedTimeout > maxTimeout ? maxTimeout : calculatedTimeout
attempt += 1
setTimeout(() => {
loadScript()
}, resultTimeout)
})
document.body.appendChild(script)
return script;
}
loadScript()
})
}
// Вызов инициализации.
function initUserFingerprint() {
return window.initUserFingerprint()
}
loadUserFingerprintScript('https://fp.qiwi.com').then(initUserFingerprint)