Введение
<script>
(function (f, p, s, d, k) {
d = f.createElement(p);
k = f.getElementsByTagName(p)[0];
d.src = 'https://cdn.freedompay.kz/sdk/js-sdk-1.0.0.js';
k.parentNode.insertBefore(d, k);
})(document, 'script');
</script>
FreedomPaySDK.setup('mypublickey', 'mytoken');
const JSTokenizeOptionsBankCard = {
type: 'bank_card',
options: {
card_number: "11111111111111",
card_holder_name: "test",
card_exp_month: "01",
card_exp_year: "25"
}
};
try {
const JSTokenResponse = await FreedomPaySDK.tokenize(JSTokenizeOptionsBankCard);
} catch(JSErrorObject) {}
// Создание объекта платежа
const JSPaymentOptions = {
order_id: "my-order",
auto_clearing: 0,
amount: 20,
currency: "KZT",
description: "Описание заказа",
test: 0,
options: {
custom_params: {},
user: {
email: "string",
phone: "string"
}
},
};
// Оплата через заранее полученный токен
const JSTransactionOptionsBankCardToken = {
type: 'tokenized_card',
options: {
token: JSTokenResponse.token,
card_cvv: 123
}
};
// Создание платежа
try {
let JSPayResult = await FreedomPaySDK.charge(
JSPaymentOptions, JSTransactionOptionsBankCardToken
);
if (JSPayResult.payment_status === "need_confirm") {
// FreedomPay делает обработку 3ds проверки
JSPayResult = await FreedomPaySDK.confirmInIframe(JSPayResult, "3dsForm");
// или
// JSPayResult = await FreedomPaySDK.confirm3ds1(JSPayResult, JS3dsv1AcsOptions);
}
} catch(JSErrorObject) {}
// Оплата через карточные данные, без предварительной генерации токена
const JSTransactionOptionsBankCard = {
type: 'bank_card',
options: {
card_number: "11111111111111",
card_holder_name: "test",
card_exp_month: "09",
card_exp_year: "25",
card_cvv: 123
}
};
try {
let JSPayResult = await FreedomPaySDK.charge(
JSPaymentOptions, JSTransactionOptionsBankCard
);
if (JSPayResult.payment_status === "need_confirm") {
// FreedomPay делает обработку 3ds проверки
JSPayResult = await FreedomPaySDK.confirmInIframe(JSPayResult, "3dsForm");
// или
// JSPayResult = await FreedomPaySDK.confirm3ds1(JSPayResult, JS3dsv1AcsOptions);
}
} catch(JSErrorObject) {}
const JSPayResult = await FreedomPaySDK.confirmInIframe (
JSPayResult (из charge), "3dsForm"
);
<form name="3dsForm" action="JSPayResult['3ds'].acsurl" method="POST">
<input type="hidden" name="PaReq" value="JSPayResult['3ds'].pareq">
<input type="hidden" name="MD" value="JSPayResult['3ds'].md">
<input type="hidden" name="TermUrl" value="https://mysite.com/myTermUrl">
</form>
<script>
document.getElementById('3dsForm').submit();
</script>
try {
const JSPayResult = await FreedomPaySDK.confirm3dsv1(JSPayResult, JS3dsv1AcsOptions);
} catch(JSErrorObject) {}
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
(function (f, p, s, d, k) {
d = f.createElement(p);
k = f.getElementsByTagName(p)[0];
d.src = 'https://cdn.freedompay.kz/sdk/js-sdk-1.0.0.js';
k.parentNode.insertBefore(d, k);
})(document, 'script');
</script>
</head>
<body>
<div id="3dsForm"></div>
<button onclick="pay()">Оплатить</button>
<script>
window.onload = function () {
FreedomPaySDK.setup('mypublickey', 'mytoken');
}
async function pay() {
validateMyForm();
const JSPaymentOptions = {
order_id: "my-order", // должен быть уникальным на каждый запрос
auto_clearing: 0,
amount: 20,
currency: "KZT",
description: "Описание заказа",
test: 0,
options: {
custom_params: {},
user: {
email: "client@email.com",
phone: "+77777777777"
}
},
};
const JSTransactionOptionsBankCard = {
type: 'bank_card',
options: {
card_number: "11111111111111",
card_holder_name: "test",
card_exp_month: "09",
card_exp_year: "25",
card_cvv: 123
}
};
try {
setLoading(true);
let JSPayResult = await FreedomPaySDK.charge(
JSPaymentOptions, JSTransactionOptionsBankCard
);
if (JSPayResult.payment_status === "need_confirm") {
showPopup('3dsFormWrapper');
JSPayResult = await FreedomPaySDK.confirmInIframe(JSPayResult, "3dsForm");
}
// открыть страницу результата платежа и т д
// ...
console.log(JSPayResult);
} catch(JSErrorObject) {
// Обработать JSErrorObject.response
setLoading(false);
showError(JSErrorObject);
}
}
// необязательные функции, нужны как пример
function showPopup(id) {
// открытие всплывающего окна
}
function setLoading(status) {
// триггер для загрузки, перекрытие формы, блокировка кнопок
}
function showError(error) {
// показываем ошибку
}
function validateMyForm() {
// валидация данных введенных пользователем, к примеру данные карты
}
</script>
</body>
</html>