Skip to content

Java client library for the BZST - DIP (Bundeszentralamt für Steuern - Digitaler Posteingang)

License

Notifications You must be signed in to change notification settings

xdev-software/bzst-dip-java-client

Repository files navigation

Latest version Build Quality Gate Status

XDEV BZST-DIP-Java-Client Logo

bzst-dip-java-client

Client for using the Mass data transmission DIP (mass data interface).

The BZSt (Bundeszentralamt für Steuern / Federal Central Tax Office) provides the Digital Inbox (DIP) as a service for payment service providers to transmit financial data.

This library uses a generated client from an openapi.yml using OpenAPI Generator.

Clients need to register / login at BZSt online.portal through Elster, BundID or BZSt Online-Portal (BOP).

See the BZSt Information for more information.

Note

BZSt Online-Portal (deprecated) is different from BZSt online.portal.

Important

We are currently on version 2.0.0. Since testing with the BZSt is quite difficult, we could not test this version fully.

If you don't want to take any risk using our client, you can still use the stable and tested version 1.0.3 of this library.

If you are willing to test v2.0.0, we would very much appreciate your feedback!

Rationale

We created this client to make it as easy as possible for the developer to use the BZSt DIP. Through usage of the builder pattern (see Configuration below), DTOs and a typesafe data model we ensure high usability and readability.

The BZSt provides XSD that define the expected XML structure and make it possible to generate java classes (BZSt Docs).
Our library validates each request through these XSD find errors before they are sent to the DIP.

Installation

Installation guide for the latest release

Usage

See the examples in the demo package.

Create certificate

For authentification at the BZST you have to create a public- and private-key.

First you have to create a PEM file as described on the BZST Website (see 1.7).

OpenSSL can be downloaded from the website.

openssl req -newkey rsa-pss -new -nodes -x509 -days 3650 -pkeyopt rsa_keygen_bits:4096 -sigopt rsa_pss_saltlen:32 -keyout key.pem -out cert.pem

You also have to set the public key in the BZST online.portal. Exporting the public key with OpenSSL is easy:

openssl rsa -in key.pem -pubout > publicKey.pub

Now you can already use these two files to sign your requests. See the example with PEM signing.

Create Java KeyStore (JKS)

If you want to go one step further you can use the Java KeyStore. Then you have to convert the cert.pem file to a * PKCS12* file.

openssl pkcs12 -export -in cert.pem -inkey key.pem -out certificate.p12 -name "certificate"

The keytool is contained in your JDK installation.

keytool -importkeystore -srckeystore certificate.p12 -srcstoretype pkcs12 -destkeystore cert.jks

The password you insert here, along with the file itself must be set in the client configuration. See example at app.properties:

certificate.keystore.password=SECRET_PASSWORD
certificate.keystore.file=cert.jks

Client ID

It's also important to use the client id provided by BZST online.portal in the client configuration. See example at app.properties:

client.id=abcd1234-ab12-ab12-ab12-abcdef123456

Configuration

The client can be configured through a properties file ( see app.properties and ApplicationWithConfigurationFromProperties.java) or by creating a configuration object ( see ApplicationWithDac7.java).

public static BzstDipConfiguration createConfiguration()
{
	return new BzstDipConfigurationBuilder()
		.setApplicationCode(BzstDipConfiguration.SupportedApplicationCode.DAC7)
		.setClientId("abcd1234-ab12-ab12-ab12-abcdef123456")
		.setTaxID("86095742719")
		.setTaxNumber("123")
		.setSigningProvider(new SigningProviderByJks("DemoKeystore.jks", "test123"))
		.setRealmEnvironmentBaseUrl(BzstDipConfiguration.ENDPOINT_URL_TEST)
		.setMessageTypeIndic(BzstDipDpiMessageType.DPI_401)
		.setReportingPeriod(LocalDate.now())
		.setDocTypeIndic(BzstDipOecdDocType.OECD_1)
		.setPlatformOperatorOrganizationName("TestOrg")
		.setPlatformOperatorPlatformName("TestApp")
		.setPlatformOperatorAddress(new BzstDipAddressFix("TestCity"))
		.buildAndValidate();
}

Messages are sent with DAC7 (ApplicationWithDac7.java) or the CESOP (ApplicationWithCesop.java) Format.

Support

If you need support as soon as possible, and you can't wait for any pull request, feel free to use our support.

Contributing

See the contributing guide for detailed instructions on how to get started with our project.

Dependencies and Licenses

View the license of the current project or the summary including all dependencies