go-ksef-client

command module
v0.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 19, 2023 License: Apache-2.0 Imports: 5 Imported by: 0

README

Sonarcloud Status Renovate enabled

GO KSeF API client library

Inspired by ksef-java-rest-client project, based on Resty, KSeF API client for Go.

Very early project status

Sample

Login by authorisation token with no additional encryption
package main

import (
	"fmt"
	log "github.com/sirupsen/logrus"
	"go-ksef/ksef/api"
	"go-ksef/ksef/model"
	"go-ksef/ksef/util"
)

func main() {
	client := api.New(api.Test)
	session := api.NewSessionService(client)

	sessionToken, err := session.LoginByToken(
		util.GetEnvOrFailed("KSEF_NIP"), 
		model.ONIP, 
		util.GetEnvOrFailed("KSEF_TOKEN"), 
		"data/mfkeys/test/publicKey.pem")

	if err != nil {
		re, ok := err.(*api.RequestError)
		if ok {
			log.Errorf("request error %d responce body %s", re.StatusCode, re.Body)
		}
		panic(err)
	}

	fmt.Printf("session token: %s\n", sessionToken.SessionToken.Token)
}
Login by authorisation token with additional AES encryption

The only difference is to create session object with NewSessionServiceWithEncryption and pass initialized AES cipher

        aes, err := cipher.AesWithRandomKey(32)
	if err != nil {
		panic("can't prepare AES Encryptor: " + err)
	}
	sessionEncrypted := NewSessionServiceWithEncryption(apiClient, aes)

Important: When session is open with encryption, all invoices have to be sent encrypted, and all incoming invoices will be encrypted with AES key given on init session call.

Send invoice with no encryption
package main

import (
	"fmt"
	log "github.com/sirupsen/logrus"
	"go-ksef/ksef/api"
	"go-ksef/ksef/model"
	"go-ksef/ksef/util"
	"os"
)

func main() {
	content, err := os.ReadFile("../../data/testing/faktura1.xml")
	if err != nil {
		panic(err)
	}

	client := api.New(api.Test)
	invoiceService := api.NewInvoiceService(client)

	sendInvoiceResp, err := invoiceService.SendInvoice(content, "_sessionToken_")
	if err != nil {
		panic(err)
	}

	fmt.Printf("Invoice responce: %#v", *sendInvoiceResp)
}
Send invoice with encryption
package main

import (
	"fmt"
	log "github.com/sirupsen/logrus"
	"go-ksef/ksef/api"
	"go-ksef/ksef/cipher"
	"go-ksef/ksef/model"
	"go-ksef/ksef/util"
	"os"
)

func main() {
	
	content, err := os.ReadFile("../../data/testing/faktura1.xml")
	if err != nil {
	    panic(err)
	}

	aes, err := cipher.AesWithRandomKey(32)

	client := api.New(api.Test)
	invoiceService := api.NewInvoiceService(client)
	
	sessionEncrypted := api.NewSessionServiceWithEncryption(client, aes)

	sessionToken, err := sessionEncrypted.LoginByToken(
		util.GetEnvOrFailed("KSEF_NIP"), 
		model.ONIP,
		util.GetEnvOrFailed("KSEF_TOKEN"),
		"../../data/mfkeys/test/publicKey.pem")

	if err != nil {
	    panic(err)	
	}

	fmt.Printf("session token: %s\n", sessionToken.SessionToken.Token)

	sendInvoiceResp, err := invoiceService.EncryptAndSend(content, aes, sessionToken.SessionToken.Token)
	if err != nil {
	    panic(err)
	}

	fmt.Printf("Invoice responce: %#v", *sendInvoiceResp)
}
Terminate current session and get UPO by session reference number
package main

import (
	"fmt"
	log "github.com/sirupsen/logrus"
	"go-ksef/ksef/api"
	"go-ksef/ksef/cipher"
	"go-ksef/ksef/model"
	"go-ksef/ksef/util"
	"os"
)

func main() {

	client := api.New(api.Test)
	invoiceService := api.NewInvoiceService(client)
	session := api.NewSessionService(client)

	status, err := session.Terminate("__session_token__")
	if err != nil {
		panic(err) 
	}
	
	fmt.Printf("%#v", *status)
	
	upo, err := invoiceService.GetUpo("__session_reference_number__")
	if err != nil {
		panic(err)
	}

	fmt.Printf("ReferenceNumber: %s, ProcessingCode: %d, ProcessingDescription: %s\n", upo.ReferenceNumber, upo.ProcessingCode, upo.ProcessingDescription)

	err = os.WriteFile("../../upo.xml", upo.Upo, 0644)
	if err != nil {
		panic(err)
	}
	
}

Authorisation Challenge
package main

import (
	"fmt"
	"go-ksef/ksef/api"
	"go-ksef/ksef/model"
	"go-ksef/ksef/util"
)

func main() {
	client := api.New(api.Test)
	session := api.NewSessionService(client)

	challenge, err := session.AuthorisationChallenge(util.GetEnvOrFailed("KSEF_NIP"), model.ONIP)
	if err != nil {
		panic(err)
	}

	fmt.Printf("res: %#v\n", challenge)
}

Debug info

To enable log debug just set KSEF_DEBUG=true environment variable. To enable http trace info, just set KSEF_HTTP_TRACE=true environment variable

Tests

Tests require some environment variables to run:

  • KSEF_NIP organization tax identifier
  • KSEF_TOKEN authorisation token to KSeF test environment

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
ksef
api
tpl

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL