From d9bfa5ff7fcc402c2619e707c666406cc3a3c2ce Mon Sep 17 00:00:00 2001 From: jeezft Date: Thu, 8 Jan 2026 16:36:32 +0300 Subject: [PATCH] Added custom URL support (DM) --- api/client.go | 23 +++++++++++++++++------ api/fiscal.go | 2 +- api/requests.go | 1 + vchasno.go | 20 +++++++++++++++----- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/api/client.go b/api/client.go index 9959b56..9f0b598 100644 --- a/api/client.go +++ b/api/client.go @@ -3,15 +3,26 @@ package api import "resty.dev/v3" type Client struct { - token string - resty *resty.Client - apiBaseURL string + token string + resty *resty.Client + apiBaseURL string + fiscalEndpoint string } func NewClient(token string) *Client { return &Client{ - token: token, - resty: resty.New(), - apiBaseURL: "https://kasa.vchasno.ua/api/v3", + token: token, + resty: resty.New(), + apiBaseURL: "https://kasa.vchasno.ua/api/v3", + fiscalEndpoint: "/fiscal/execute", + } +} + +func NewDMClient(token string, dmURL string) *Client { + return &Client{ + token: token, + resty: resty.New(), + apiBaseURL: dmURL, + fiscalEndpoint: "/dm/fiscal", } } diff --git a/api/fiscal.go b/api/fiscal.go index da40412..a6aa6d1 100644 --- a/api/fiscal.go +++ b/api/fiscal.go @@ -18,7 +18,7 @@ func (c *Client) executeRequest(ctx context.Context, request FiscalRequest, resp SetContext(ctx). SetHeader("Authorization", c.token). SetBody(reqJson). - Post(c.apiBaseURL + "/fiscal/execute") + Post(c.apiBaseURL + c.fiscalEndpoint) if err != nil { return fmt.Errorf("request failed: %w", err) diff --git a/api/requests.go b/api/requests.go index 68c97ad..ab8276b 100644 --- a/api/requests.go +++ b/api/requests.go @@ -2,6 +2,7 @@ package api type FiscalRequest struct { Source string `json:"source"` + Device string `json:"device,omitempty"` Userinfo Userinfo `json:"userinfo,omitempty"` Fiscal Fiscal `json:"fiscal"` } diff --git a/vchasno.go b/vchasno.go index 9990c03..7364f72 100644 --- a/vchasno.go +++ b/vchasno.go @@ -25,11 +25,13 @@ type Client struct { defaults *DefaultParams } +// !! If you are using Device Manager, set the CustomURL to "http(s)://HOST/api/v3". type Config struct { - Token string - Cashier string - Source string - Defaults *DefaultParams + Token string + Cashier string + Source string + Defaults *DefaultParams + CustomURL string } type DefaultParams struct { @@ -65,8 +67,16 @@ func NewClient(config Config) *Client { defaults.DefaultTimeout = 30 * time.Second } + apicfg := &api.Client{} + + if config.CustomURL == "" { + apicfg = api.NewClient(config.Token) + } else { + apicfg = api.NewDMClient(config.Token, config.CustomURL) + } + return &Client{ - api: api.NewClient(config.Token), + api: apicfg, cashier: config.Cashier, source: config.Source, defaults: defaults,