Libeetpp  1.00.0
eet.h
Zobrazit dokumentaci tohoto souboru.
1 /***************************************************************
2  * Name: eet.h
3  * Author: David Vachulka (archdvx@dxsolutions.org)
4  * Copyright: 2016
5  * License: LGPL3
6  **************************************************************/
7 
8 #ifndef EET_H
9 #define EET_H
10 
11 #include <string>
12 #include <vector>
13 #include <map>
14 #include <new>
15 #include <openssl/rsa.h>
16 
17 #ifdef __WIN32
18 # ifdef eetpp_EXPORTS
19 # define EETPP_EXPORT __declspec(dllexport)
20 # else
21 # define EETPP_EXPORT __declspec(dllimport)
22 #endif
23 #else
24 # define EETPP_EXPORT
25 #endif
26 
27 #define EETVERSION "1.00.0"
28 #define PGURL "https://pg.eet.cz:443/eet/services/EETServiceSOAP/v3"
29 #define PRODUKCNIURL "https://prod.eet.cz/eet/services/EETServiceSOAP/v3"
30 
31 typedef std::map<std::string,std::string> StringMap;
32 typedef std::pair<std::string,std::string> StringPair;
33 typedef std::map<std::string,std::string>::iterator StringIt;
34 
47 enum REZIM {
48  STANDARDNI = 0,
49  ZJEDNODUSENY
50 };
51 
57 enum OVERENI {
58  PRODUKCNI = 0,
59  OVEROVACI
60 };
61 
67 enum ZASLANI {
68  OPAKOVANE = 0,
69  PRVNI
70 };
71 
77 enum EETCODE {
78  EET_OK = 0,
83 };
84 
85 class EETPP_EXPORT EetData
86 {
87 public:
91  EetData();
113  EetData(const std::string &poradCis, double celkTrzba, double *zaklNepodlDph=NULL, double *zaklDan1=NULL, double *dan1=NULL, double *zaklDan2=NULL, double *dan2=NULL,
114  double *zaklDan3=NULL, double *dan3=NULL, const ZASLANI &prvniZaslani=PRVNI, time_t datOdesl=::time(NULL), time_t datTrzby=::time(NULL),
115  double *cestSluz=NULL, double *pouzitZboz1=NULL, double *pouzitZboz2=NULL, double *pouzitZboz3=NULL,
116  double *urcenoCerpZuct=NULL, double *cerpZuct=NULL);
117 
121  EETCODE checkData();
125  static std::string formatString(const char *fmt, ...);
126  //Getters & setters
130  std::string getChyba();
134  std::string getDatOdesl() const;
138  EETCODE setDatOdesl(const std::string &datOdesl);
142  EETCODE setDatOdesl(time_t datOdesl);
146  ZASLANI getPrvniZaslani() const;
150  EETCODE setPrvniZaslani(const ZASLANI &prvniZaslani);
154  std::string getPoradCis() const;
158  EETCODE setPoradCis(const std::string &poradCis);
162  std::string getDatTrzby() const;
166  EETCODE setDatTrzby(const std::string &datTrzby);
170  EETCODE setDatTrzby(time_t datTrzby);
174  std::string getCelkTrzba() const;
178  EETCODE setCelkTrzba(const std::string &celkTrzba);
182  EETCODE setCelkTrzba(double celkTrzba);
186  std::string getZaklNepodlDph() const;
190  EETCODE setZaklNepodlDph(const std::string &zaklNepodlDph);
194  EETCODE setZaklNepodlDph(double zaklNepodlDph);
198  std::string getZaklDan1() const;
202  EETCODE setZaklDan1(const std::string &zaklDan1);
206  EETCODE setZaklDan1(double zaklDan1);
210  std::string getDan1() const;
214  EETCODE setDan1(const std::string &dan1);
218  EETCODE setDan1(double dan1);
222  std::string getZaklDan2() const;
226  EETCODE setZaklDan2(const std::string &zaklDan2);
230  EETCODE setZaklDan2(double zaklDan2);
234  std::string getDan2() const;
238  EETCODE setDan2(const std::string &dan2);
242  EETCODE setDan2(double dan2);
246  std::string getZaklDan3() const;
250  EETCODE setZaklDan3(const std::string &zaklDan3);
254  EETCODE setZaklDan3(double zaklDan3);
258  std::string getDan3() const;
262  EETCODE setDan3(const std::string &dan3);
266  EETCODE setDan3(double dan3);
270  std::string getCestSluz() const;
274  EETCODE setCestSluz(const std::string &cestSluz);
278  EETCODE setCestSluz(double cestSluz);
282  std::string getPouzitZboz1() const;
286  EETCODE setPouzitZboz1(const std::string &pouzitZboz1);
290  EETCODE setPouzitZboz1(double pouzitZboz1);
294  std::string getPouzitZboz2() const;
298  EETCODE setPouzitZboz2(const std::string &pouzitZboz2);
302  EETCODE setPouzitZboz2(double pouzitZboz2);
306  std::string getPouzitZboz3() const;
310  EETCODE setPouzitZboz3(const std::string &pouzitZboz3);
314  EETCODE setPouzitZboz3(double pouzitZboz3);
318  std::string getUrcenoCerpZuct() const;
322  EETCODE setUrcenoCerpZuct(const std::string &urcenoCerpZuct);
326  EETCODE setUrcenoCerpZuct(double urcenoCerpZuct);
330  std::string getCerpZuct() const;
334  EETCODE setCerpZuct(const std::string &cerpZuct);
338  EETCODE setCerpZuct(double cerpZuct);
339 private:
340  //Hlavicka - start
341  std::string m_datOdesl;
342  ZASLANI m_prvniZaslani;
343  //Hlavicka - end
344  //Data - start
345  std::string m_poradCis;
346  std::string m_datTrzby;
347  std::string m_celkTrzba;
348  // Optional Data - start
349  std::string m_zaklNepodlDph;
350  std::string m_zaklDan1;
351  std::string m_dan1;
352  std::string m_zaklDan2;
353  std::string m_dan2;
354  std::string m_zaklDan3;
355  std::string m_dan3;
356  std::string m_cestSluz;
357  std::string m_pouzitZboz1;
358  std::string m_pouzitZboz2;
359  std::string m_pouzitZboz3;
360  std::string m_urcenoCerpZuct;
361  std::string m_cerpZuct;
362  // Optional Data - end
363  //Data - end
364  std::string m_chyba;
365 
369  std::string formatDouble(double val);
373  bool regexDouble(const std::string &text);
377  std::string formatTime(time_t time);
381  bool regexTime(const std::string &text);
385  bool regexString25(const std::string &text);
386 };
387 
388 class EETPP_EXPORT Eet
389 {
390 public:
394  Eet();
407  Eet(const std::string &dicPopl, int idProvoz, const std::string &cert, const std::string &pass, const std::string &idPokl="", const std::string &dicPoverujiciho="",
408  const OVERENI &overeni=PRODUKCNI, const REZIM &rezim=STANDARDNI, bool playground=false);
409 
415  EETCODE setCertPass(const std::string &cert, const std::string &pass);
420  EETCODE sendTrzba(const EetData &data);
426  EETCODE sendTrzba(const std::string &idPokl, const EetData &data);
432  EETCODE createPkpBkp(const std::string &idPokl, EetData data);
433  //Setters
437  EETCODE setRezim(const REZIM &rezim);
441  EETCODE setOvereni(const OVERENI &overeni);
445  EETCODE setDicPopl(const std::string &dicPopl);
449  EETCODE setDicPoverujiciho(const std::string &dicPoverujiciho);
453  EETCODE setIdProvoz(int idProvoz);
457  EETCODE setIdPokl(const std::string &idPokl);
461  void setPlayground(bool playground);
462  //Getters
466  std::string getPkp();
470  std::string getBkp();
474  std::string getFik();
478  std::string getChyba();
482  std::string getVarovani();
486  std::string getVersion();
490  std::string getOpensslVersion();
494  std::string getCurlVersion();
495 private:
496  //Hlavicka - start
497  OVERENI m_overeni;
498  //Hlavicka - end
499  //Data - start
500  std::string m_dicPopl;
501  std::string m_dicPoverujiciho;
502  int m_idProvoz;
503  std::string m_idPokl;
504  REZIM m_rezim;
505  //Data - end
506  //Kontrolni kody - start
507  //Generovany funkci createPkpBkp
508  std::vector<unsigned char> m_pkp;
509  std::vector<unsigned char> m_bkp;
510  //Kontrolni kody - end
511  std::string m_certPath;
512  std::string m_pass;
513  char *m_key;
514  char *m_cert;
515  StringMap m_values;
516  std::string m_fik;
517  std::string m_chyba;
518  std::string m_varovani;
519  bool m_playground;
520 
521  EETCODE sendTrzbaImpl(EetData data);
522  bool createKeyCert();
523  RSA *createRSA(bool pub);
524  void createPkpBkp(const std::string &plaintext);
525  bool createPkp(std::vector<unsigned char> data);
526  std::vector<unsigned char> createSignature(const std::string &plaintext);
527  std::vector<unsigned char> sha1(std::vector<unsigned char> data);
528  std::vector<unsigned char> sha256(const std::string &str);
529  void showDebug(const std::string &text);
530  std::string uuid4();
531  std::string base64Encode(std::vector<unsigned char> data);
532  std::string byte2Hex(std::vector<unsigned char> data);
533  std::string formatPkp();
534  std::string formatBkp();
535  std::string formatCertificate();
539  std::string formatBool(bool value);
540  std::string fillTemplate(const std::string &templ);
541  void parseResponse(const std::string &response, OVERENI overeni);
542  bool regexString20(const std::string &text);
543  bool regexDic(const std::string &text);
544 };
545 
546 #endif
Definition: eet.h:388
Definition: eet.h:81
Definition: eet.h:79
Definition: eet.h:85
Definition: eet.h:82
Definition: eet.h:78
ZASLANI
První zaslání údajů o tržbě
Definition: eet.h:67
EETCODE
Návratové kódy funkce sendTrzba.
Definition: eet.h:77
OVERENI
Příznak ověřovacího módu odesílání
Definition: eet.h:57
REZIM
Režim tržby.
Definition: eet.h:47
Definition: eet.h:80