В Юкасса, ты можешь создать тестовые платежи без регистрации по ИП.
Вот пример через библиотеку
@a2seven/yoo-checkout, на javascript
в этом примере(создание оплаты в телеграмм боте) будет:
1)база данных UserModel от Mongodb
2)функция создания платежа createPayment yoo-checkout
3)функция проверки платежа getPayment yoo-checkout
4)ctx - Telegraf
const YOO_KASSA_CONFIG = {
shopId: 'id в аккаунте Юкасса' ,
secretKey: 'ключ в аккаунте Юкасса',
isTest: true, // Установите в false, чтобы использовать реальную среду
};
const yooKassa = new YooCheckout(YOO_KASSA_CONFIG);
bot.command('pay', async (ctx) => {
const userId = String(ctx.message.from.id)
const user = await UserModel.findOne({ userId: userId });
try {
const orderId = Math.floor(Math.random() * (10000)) + Date.now();//уникальный Id заказа
const orderAmount = 100; // Сумма платежа в копейках (например, 100 рублей = 10000 копеек)
const description = userId + 'совершил успешный платеж'; // Описание платежа
const createPayload = {
amount: {
value: orderAmount,
currency: 'RUB',
},
payment_method_data: {
type: 'bank_card',
},
confirmation: {
type: 'redirect',
return_url: 'https://qna.habr.com/q/1264078', // URL для перенаправления пользователя после успешной оплаты
},
capture:true,// моментальное потверждение заказа, без ручного принятия на стороне Юкасса
description:description, // описание в Юкасса о этом платеже
};
// Создание платежа в Юkassa
const payment = await yooKassa.createPayment(createPayload, orderId);
// Сохраните информацию о платеже или заказе, чтобы затем проверить его статус
//что бы не создавать второе поле в моей базе данных я записал id в statusPay
user.statusPay=payment.id
user.save()
// Получение URL для оплаты из объекта платежа
const paymentUrl = payment.confirmation.confirmation_url;
// Отправка пользователю ссылки для оплаты
ctx.reply(`Чтобы оплатить заказ №${orderId}, перейдите по ссылке: ${paymentUrl}`);
} catch (error) {
// Обработка ошибок
console.error('Error creating payment:', error);
ctx.reply('Произошла ошибка при создании платежа. Попробуйте позже.');
}
});
bot.command('status', async (ctx) => {
const userId = String(ctx.message.from.id)
const username= await (ctx.message.chat.username)
const user = await UserModel.findOne({ userId: userId });
try {
// Здесь получите paymentId из базы данных или памяти вашего приложения.
const paymentId = user.statusPay;
// Получение информации о платеже из Юkassa
const paymentInfo = await yooKassa.getPayment(paymentId);
// Обработка информации о статусе платежа
if(paymentInfo.status==='succeeded'){
ctx.reply(`${paymentInfo.status}, ${username ?? 'друг'} спасибо за оплату нашего бота!`)
user.statusPay=paymentInfo.status
user.save()
} else{
ctx.reply(`Статус платежа №${paymentId}: ${paymentInfo.status}`);
user.statusPay=paymentInfo.status
user.save()
}
} catch (e) {
console.log(`ошибка в функции статуса платежа`, e);
ctx.reply('Создайте платеж!');
}
});
Код не совершенен и есть пару ошибок, но общий принцип из него можно взять.
Надеюсь чем то помог.