Сбор клиентских данных¶
Чтобы снизить риск недействительных и мошеннических операций, а также контролировать соответствие деятельности партнёра указанной им при заключении договора, сервису приёма платежей необходимо получать определённые клиентские данные из интерфейса партнёра. К таким данным относятся уникальный идентификатор браузера, 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)