Данный код создает платеж через API YooKassa, генерирует ссылку для оплаты и отслеживает статус платежа.
- Установите Go версии 1.19 или выше
- Проверьте установку:
go version
- Зарегистрируйтесь в YooKassa
- Получите
shopIdиsecretKeyв личном кабинете - Для тестирования используйте тестовый режим
go get github.com/stackload/yookassaСоздайте файл .env в корне проекта:
YOOKASSA_SHOP_ID=ваш_shop_id
YOOKASSA_SECRET_KEY=ваш_secret_key
YOOKASSA_URL=https://api.yookassa.ru/v3
YOOKASSA_RETURN_URL=https://example.com
import "github.com/stackload/yookassa"
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
service, err := yookassa.NewPaymentService()
if err != nil {
log.Fatalf("Failed to create payment service: %v", err)
}
}
// Базовый пример
metadata := map[string]interface{}{
"user_id": "123",
"order_id": "order_456",
"description": "Оплата заказа",
}
payment, err := service.SendInvoice(
ctx,
100.00, // сумма (в рублях)
"Оплата тестового заказа", // описание
metadata, // дополнительные данные
)
if payment.Confirmation != nil {
paymentURL := payment.Confirmation.ConfirmationURL
fmt.Printf("Ссылка для оплаты: %s\n", paymentURL)
// Можно отправить пользователю или открыть в браузере
}
// Получить информацию о платеже
paymentInfo, err := service.GetPayment(ctx, paymentID)
if err != nil {
log.Printf("Ошибка получения статуса: %v", err)
} else {
fmt.Printf("Статус платежа: %s\n", paymentInfo.Status)
}
// Ожидание платежа с таймаутом
err := service.CheckPayment(
ctx, // контекст
payment.ID, // ID платежа
300*time.Second, // время ожидания (5 минут)
)
if err != nil {
log.Printf("Ошибка ожидания платежа: %v", err)
} else {
fmt.Println("Платеж успешно завершен!")
}