Electronic cash terminal

Have you ever thought "How can i integrate such cool cash terminals like every bigger company has in my own application?"
Well ... if not, i did that for you. ;-)


First of all you really need a functional test cash terminal, you can either use/write a simulator or use a real device, but then it's really important that it is a test terminal because i don't think you want your money getting transfered to other bank accounts ;-)

To get a cash terminal you need to contact a service bank which can provide you with that, in my case it was card complete but i think they only operate in austria so you need to find a local bank.

Once you have all that stuff and carefully read all the manuals (yes i did that because i really wanted to read into it to not make any kind of 'master mistake', it's all about money everyone is very sensible about that) you know exactly as much as before. The really important things like connection settings, capabilities, payment procedure and so on are not described at all because there is no developer manual. There only is a user manual which describes how to plug one cable into another.

Fortunately i got my contact person at the service bank, i'm sure i can ask him when there are tricky parts to do.


So i read through the protocol description that was provided by my contact person. After some time i realized that this was done by an association of cash terminal vendors which was good news, because that means that the protocol is not device dependent. I thought that some other guys (like me ;) ) already implemented that in a usable way and gave google his chance. But....nothing, very strange. After some more research i discovered a company which provides a ready to use library for various of cash terminals but one developer license for 500 € and every terminal license for 200€. That sounds quite much to me. That was the point where i decided to write my own library, maybe invest more time than when using the library.

The protocol is called ZVT-Protocol and as far as i can say it's mainly used in europe (because only EUR are supported, for whatever reason ;) ). you can have a look at it here

You will see that all the available commands are heavily documented, but use scenarious are missing, so you need some time to understand their naming. This was where my contact person comes into the game, i thought 'this guy must have seen tens of implementations' so i confronted him with my problem that the terminal does not accept my payment request. But he just told me that he can just look at outgoing requests to the bank and verify them. Thats a real problem, when there is noone who helps you. So i did the best you can do in such a situation, i dissociated myself a few days from my cache terminals and got it running in a few hours afterwards :-)

So no i have a extensible framework (well not yet completed but already usable) for for ZVT compatible cash terminals. By the way, i could also be extended to use other protocols.

I want to make this framework available for everyone under GPL because i don't think that someone should pay on a per terminal basis for such a functionality. If you want to help me in completing/extending this framework please get an account at bitbucket and contact me. If you just want to submit a bugreport or a small patch you can also send me an email.

The Framework

I really don't know if there is a need for such a framework, so if you find it useful, please leave me a comment or contact me.

It should work for Windows and Linux (mono) but i have not tested it yet, but there is no reason to not work
The sources are located at: http://github.com/deveck/libecterm

You can do a git clone with:
git clone http://github.com/deveck/libecterm.git

If you are not familiar with git have a look at http://help.github.com/

Current status

If the framework is integrated in the cash software i wrote it for i have to certify the framework by the service bank. I will let you know the status of this certification and the status of the framework here


  • First release of the framework, some features are not yet completed


  • Integration is done, framework is working, different transports are working, just waiting to get certified.
    This will be done when the first customer receives such a card terminal.
  • Look at the payment screen: Card Selection, Begin of payment procedure, Waiting for card insertion and so on.
  • The integrated part (not the library itself) also supports terminals that are connected to other computer, even if they use serial transport.
    So there is one more abstraction layer which abstracts the card terminals as device which is located somewhere, maybe on the network, maybe on the local computer. The cash register software only knows that this device accepts payments.....really some nice code ;-)


  • Moved the repository to github