Введение
<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) {}
Название | Тип | Описание | |
---|---|---|---|
type | string | Тип криптуемых данных. bank_card - банковская карта | |
options.card_number | string | Номер карты. Поле для ввода номера карты должно поддерживать ввод от 13 до 19 цифр | |
options.card_holder_name | string | Имя держателя карты | |
options.card_exp_month | string | Месяц истечения карты | |
options.card_exp_year | string | Год истечения карты |
// Создание объекта платежа
const JSPaymentOptions = {
order_id: "my-order",
auto_clearing: 0,
amount: 20,
currency: "KZT",
description: "Описание заказа",
test: 0,
options: {
custom_params: {},
user: {
email: "string",
phone: "string"
}
},
};
Название | Тип | Описание | |
---|---|---|---|
order_id | string | Уникальный идентификатор в системе магазина | |
auto_clearing | int | 1 - если требуется провести клиринг автоматически, 0 - если мерчант сам вызовет метод клиринга | |
amount | float | Сумма платежа | |
currency | string | Валюта платежа | |
description | string | Описание платежа | |
test | int | 1 - если тестовый режим платежа, 0 - если боевой | |
options.custom_params | object | Дополнительные параметры. Будут высланы обратно мерчанту на ResultURL после проведения платежа. | |
options.user.email | string | Email клиента | |
options.user.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) {}
Название | Тип | Описание | |
---|---|---|---|
type | string | Тип передаваемых данных. tokenized_card - передача токена карты | |
options.token | string | Ранее полученный токен карты | |
options.card_cvv | int | CVC/CVV карты, для которой был сделан токен |
Название | Тип | Описание | |
---|---|---|---|
pares | string | Параметр, который приходит на termUrl | |
md | string | Параметр, который приходит на termUrl |
// Оплата через карточные данные, без предварительной генерации токена
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) {}
Название | Тип | Описание | |
---|---|---|---|
type | string | Тип передаваемых данных. bank_card - передача открытых данных карты | |
options.card_number | string | Номер карты. Поле для ввода номера карты должно поддерживать ввод от 13 до 19 цифр | |
options.card_holder_name | string | Имя держателя карты | |
options.card_exp_month | string | Месяц истечения карты | |
options.card_exp_year | string | Год истечения карты | |
options.card_cvv | int | CVC/CVV карты |
Название | Тип | Описание | |
---|---|---|---|
payment_id | integer | Номер платежа | |
order_id | string | Уникальный идентификатор в системе продавца | |
payment_status | string | Статус платежа. Возможные значения: success, error, need_confirm | |
3ds | object | Данные для 3ds, приходит при payment_status = need_confirm | |
3ds.version | string | Версия 3ds | |
3ds.acsurl | string | Url Банка эмитента карты для проверки 3ds | |
3ds.md | string | Параметр для запроса 3ds | |
3ds.pareq | string | Параметр для запроса 3ds | |
3ds.frame_url | string | Параметр, который используется для проведения 3ds на стороне FreedomPay, мерчант никак не взамодействует с данным параметром. |
Название | Тип | Описание | |
---|---|---|---|
token | integer | Токен для дальнейшей оплаты |
Название | Тип | Описание | |
---|---|---|---|
response.error_code | string | Код ошибки | |
response.error_message | string | Описание ошибки |
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>
Поле | Описание | |
---|---|---|
PaReq | Параметр pareq из ответа | |
MD | Параметр md из ответа | |
TermUrl | Url, на который будет переведен клиент после прохождения 3DS |
Поле | Описание | |
---|---|---|
PaRes | Параметр необходим для запроса paymentAcs | |
MD | Параметр необходим для запроса paymentAcs |
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>