72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
|
package yoomoney
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"gitea.pena/PenaSide/treasurer/internal/errors"
|
||
|
"gitea.pena/PenaSide/treasurer/internal/models"
|
||
|
"github.com/go-resty/resty/v2"
|
||
|
"github.com/labstack/echo/v4"
|
||
|
"go.uber.org/zap"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
ProviderName = "yoomoney"
|
||
|
)
|
||
|
|
||
|
type Config struct {
|
||
|
StoreID string `env:"YOOMONEY_STORE_ID,required"`
|
||
|
SecretKey string `env:"YOOMONEY_SECRET_KEY,required"`
|
||
|
WebhooksURL string `env:"YOOMONEY_WEBHOOKS_URL,required"`
|
||
|
PaymentsURL string `env:"YOOMONEY_PAYMENTS_URL,required"`
|
||
|
}
|
||
|
|
||
|
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 *models.PaymentRequest) (*models.PaymentResponse, errors.Error) {
|
||
|
return &models.PaymentResponse{}, nil
|
||
|
}
|
||
|
|
||
|
func (p *Provider) RegisterWebhookHandlers(router *echo.Group) {
|
||
|
router.POST(p.config.WebhooksURL, p.handleWebhook)
|
||
|
}
|
||
|
|
||
|
func (p *Provider) handleWebhook(c echo.Context) error {
|
||
|
return nil
|
||
|
}
|