Files
no-copy-frontend/src/app/actions/yooKassa.ts
T

136 lines
3.3 KiB
TypeScript
Raw Normal View History

2026-02-16 20:11:59 +07:00
'use server'
import { YooCheckout, ICreatePayment } from '@a2seven/yoo-checkout';
2026-02-21 15:07:37 +07:00
import { getSessionData, deleteSession } from '@/app/actions/session';
import { API_BASE_URL } from '@/app/actions/definitions';
2026-03-03 18:48:09 +07:00
import { id } from 'zod/v4/locales';
2026-02-16 20:11:59 +07:00
const checkout = new YooCheckout({ shopId: '1276731', secretKey: 'test_0Yns_0NHV5GJf6ypJ5HC4NSfnLO8SJkw-1PwrVWsDl4' });
2026-02-19 17:45:40 +07:00
export async function makePaymentOperation(email: string, tariffId: number, operationUuid: string, operationType: 'TARIFF' | 'TOKEN') {
const formData = new FormData();
formData.append('email', email);
formData.append('tariffId', tariffId.toString());
2026-02-19 17:45:40 +07:00
formData.append('operationType', operationType);
formData.append('operationUuid', operationUuid);
try {
const response = await fetch(`${API_BASE_URL}/api/payments/create`, {
method: 'POST',
body: formData
});
if (response.ok) {
2026-02-19 17:23:52 +07:00
const parsed = await response.json();
if (parsed.paymentUuid) {
return true
} else {
throw 'error'
}
} else {
2026-02-19 17:23:52 +07:00
throw 'error'
}
} catch (error) {
return null
}
}
2026-02-19 17:45:40 +07:00
export async function yooKasaCreatePayment(amount: number, tariff: number, operationType: 'TARIFF' | 'TOKEN') {
2026-03-03 18:48:09 +07:00
console.log('yooKasaCreatePayment');
2026-02-16 20:11:59 +07:00
const userEmail = await getSessionData('email');
2026-02-19 17:23:52 +07:00
const timestamp = Date.now();
const random = Math.random().toString(36).substring(2, 10);
const idempotenceKey = `${userEmail}-${timestamp}-${amount}-${tariff}-${random}`;
2026-02-16 20:11:59 +07:00
if (!userEmail) {
return null;
}
2026-02-16 20:11:59 +07:00
const createPayload: ICreatePayment = {
amount: {
2026-02-19 11:20:47 +07:00
value: amount.toLocaleString().replace(/\s/g, ''),
2026-02-16 20:11:59 +07:00
currency: 'RUB'
},
2026-03-03 18:48:09 +07:00
/* payment_method_data: {
2026-02-16 20:11:59 +07:00
type: 'bank_card'
2026-03-03 18:48:09 +07:00
}, */
/* payment_method_id: "3138d708-000f-5001-9000-19865cfcca68", */
2026-02-16 20:11:59 +07:00
confirmation: {
2026-03-03 18:48:09 +07:00
type: 'embedded',
/* type: 'redirect',
return_url: 'test' */
2026-02-16 20:11:59 +07:00
},
metadata: {
2026-02-18 14:21:57 +07:00
userMail: userEmail,
2026-02-16 20:11:59 +07:00
tariff: tariff
2026-02-19 17:45:40 +07:00
},
2026-03-03 18:48:09 +07:00
merchant_customer_id: userEmail,
2026-02-19 17:45:40 +07:00
capture: true
2026-02-16 20:11:59 +07:00
};
try {
2026-03-03 18:48:09 +07:00
const payment = await checkout.createPayment(createPayload, idempotenceKey);
const response = await makePaymentOperation(userEmail, tariff, payment.id, operationType);
console.log(payment);
if (payment && response) {
return payment?.confirmation.confirmation_token;
} else {
return null
}
} catch (error) {
return null
}
/* try {
2026-02-19 17:23:52 +07:00
const payment = await checkout.createPayment(createPayload, idempotenceKey);
2026-02-19 17:45:40 +07:00
const response = await makePaymentOperation(userEmail, tariff, payment.id, operationType);
2026-02-19 17:23:52 +07:00
if (response && payment) {
return payment?.confirmation.confirmation_url;
} else {
return null
}
2026-02-16 20:11:59 +07:00
} catch (error) {
return null
2026-03-03 18:48:09 +07:00
} */
2026-02-16 20:11:59 +07:00
}
2026-02-21 15:07:37 +07:00
export async function fetchPaymentsHistory() {
const email = await getSessionData('email');
try {
const response = await fetch(`${API_BASE_URL}/api/v1/data`, {
method: 'POST',
body: JSON.stringify({
version: 1,
msg_id: 30005,
message_body: {
action: 'user_payments',
email: email
}
}),
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
if (response.ok) {
const parsed = await response.json();
if (parsed.message_code === 0) {
return {
payments: parsed.message_body.payments,
error: null
};
} else {
throw parsed.message_code;
}
} else {
return null
}
} catch (error) {
return null
}
}