'use server' import { YooCheckout, ICreatePayment } from '@a2seven/yoo-checkout'; import { getSessionData, deleteSession } from '@/app/actions/session'; import { API_BASE_URL } from '@/app/actions/definitions'; const checkout = new YooCheckout({ shopId: '1276731', secretKey: 'test_0Yns_0NHV5GJf6ypJ5HC4NSfnLO8SJkw-1PwrVWsDl4' }); export async function makePaymentOperation(email: string, tariffId: number, operationUuid: string, operationType: 'TARIFF' | 'TOKEN') { const formData = new FormData(); const token = await getSessionData('token'); formData.append('email', email); formData.append('tariffId', tariffId.toString()); formData.append('operationType', operationType); formData.append('operationUuid', operationUuid); try { const response = await fetch(`${API_BASE_URL}/api/payments/create`, { method: 'POST', body: formData, headers: { 'Authorization': `Bearer ${token}` } }); if (response.ok) { const parsed = await response.json(); if (parsed.paymentUuid) { return true } else { throw 'error' } } else { throw 'error' } } catch (error) { return null } } export async function yooKasaCreatePayment(amount: number, tariff: number, operationType: 'TARIFF' | 'TOKEN') { const userEmail = await getSessionData('email'); const timestamp = Date.now(); const random = Math.random().toString(36).substring(2, 10); const idempotenceKey = `${userEmail}-${timestamp}-${amount}-${tariff}-${random}`; if (!userEmail) { return null; } const createPayload: ICreatePayment = { amount: { value: amount.toLocaleString().replace(/[,\s.]/g, ''), currency: 'RUB' }, confirmation: { type: 'embedded', }, metadata: { userMail: userEmail, tariff: tariff }, merchant_customer_id: userEmail, capture: true, save_payment_method: operationType === 'TOKEN' ? false : true, /* ...(operationType === 'TOKEN' && { save_payment_method: false }) */ }; try { const payment = await checkout.createPayment(createPayload, idempotenceKey); const response = await makePaymentOperation(userEmail, tariff, payment.id, operationType); if (payment && response) { return payment?.confirmation.confirmation_token; } else { return null; } } catch (error) { return null; } } export async function fetchPaymentsHistory() { const email = await getSessionData('email'); const token = await getSessionData('token'); 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', 'Authorization': `Bearer ${token}` } }); 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 } }