package yoomoney import ( "context" "gitea.pena/PenaSide/treasurer/internal/errors" "gitea.pena/PenaSide/treasurer/internal/models" "gitea.pena/PenaSide/treasurer/internal/payment_provider" "github.com/go-resty/resty/v2" "github.com/gofiber/fiber/v2" "go.uber.org/zap" ) const ( ProviderName = "yoomoney" ) type Config struct { StoreID string `env:"YOOMONEY_STORE_ID"` SecretKey string `env:"YOOMONEY_SECRET_KEY"` WebhooksURL string `env:"YOOMONEY_WEBHOOKS_URL"` PaymentsURL string `env:"YOOMONEY_PAYMENTS_URL"` } type Provider struct { logger *zap.Logger config *Config httpClient *resty.Client repository PaymentRepository } type PaymentRepository interface { Insert(context.Context, *models.Payment) (*models.Payment, errors.Error) SetPaymentStatus(ctx context.Context, paymentID string, status models.PaymentStatus) (*models.Payment, errors.Error) SetPaymentComplete(ctx context.Context, paymentID string) (*models.Payment, errors.Error) } func New(logger *zap.Logger, config *Config, repository PaymentRepository) (*Provider, errors.Error) { return &Provider{ logger: logger, config: config, httpClient: resty.New(), repository: repository, }, nil } func (p *Provider) GetName() string { return ProviderName } func (p *Provider) GetSupportedPaymentMethods() []models.PaymentType { return []models.PaymentType{ models.PaymentTypeBankCard, models.PaymentTypeTinkoff, models.PaymentTypeSberPay, models.PaymentTypeYoomoney, models.PaymentTypeMobile, models.PaymentTypeSBP, models.PaymentTypeSberB2B, } } func (p *Provider) CreateInvoice(ctx context.Context, request *payment_provider.PaymentRequest) (*payment_provider.PaymentResponse, errors.Error) { return &payment_provider.PaymentResponse{}, nil } func (p *Provider) RegisterWebhookHandlers(router fiber.Router) { router.Post(p.config.WebhooksURL, p.handleWebhook) } func (p *Provider) handleWebhook(c *fiber.Ctx) error { return nil }