Forum » Programiranje » UJP Eracuni - B2B
UJP Eracuni - B2B
Strato5 ::
Pozdravljeni,
končno sem si uspel urediti vse potrebno, da bi lahko začel programirati sistem za pošiljanje Eračunov direktno na UJP preko njihovega B2B servisa (da ne gre preko spletne banke ampak direktno na UJP). trenutno imam opravljeno registracijo na betaeracuni portalu ki je testno okolje za te zadeve.
Od UJP sem prejel tehnično dokumentacijo in ko sem začel kodirat (delam v PHP) sem uspešno vzpostavil povezavo (getFunctions() mi vrne seznam funkcij ok), Login metoda tudi dela, Logout tudi (ti dve metodi imata argumente tipa string kar je lepo, jasno, nedvoumno napisano). Zatakne se mi pa recimo pri metodi sendInvoice, ker ima argument tipa Invoice ... tega tipa PHP sam po sebi nima, in tudi v dokumentaciji je zadeva zapisana tako, da bi lahko bila XML dokument, class z subclasi, asociativni array ali kakšna od kombinacij... Ko sem na UJP pisal mail in jih klical z vprašanjem kaj je ta tip "Invoice" noben, ki sem ga dobil na telefon sploh ni razumel kaj jih sploh sprašujem...
Zato me zanima ali je slučajno kdo tukaj, ki pozna zadevo ali je kdaj uspešno to implementiral in bi me bil sposoben/pripravljen obrniti v pravo smer :)
Spodaj prilagam izrezek iz dokumentacije za metodo sendInvoice (če bi kdo želel celotno datoteko naj mi javi pa pošljem cel pdf.
končno sem si uspel urediti vse potrebno, da bi lahko začel programirati sistem za pošiljanje Eračunov direktno na UJP preko njihovega B2B servisa (da ne gre preko spletne banke ampak direktno na UJP). trenutno imam opravljeno registracijo na betaeracuni portalu ki je testno okolje za te zadeve.
Od UJP sem prejel tehnično dokumentacijo in ko sem začel kodirat (delam v PHP) sem uspešno vzpostavil povezavo (getFunctions() mi vrne seznam funkcij ok), Login metoda tudi dela, Logout tudi (ti dve metodi imata argumente tipa string kar je lepo, jasno, nedvoumno napisano). Zatakne se mi pa recimo pri metodi sendInvoice, ker ima argument tipa Invoice ... tega tipa PHP sam po sebi nima, in tudi v dokumentaciji je zadeva zapisana tako, da bi lahko bila XML dokument, class z subclasi, asociativni array ali kakšna od kombinacij... Ko sem na UJP pisal mail in jih klical z vprašanjem kaj je ta tip "Invoice" noben, ki sem ga dobil na telefon sploh ni razumel kaj jih sploh sprašujem...
Zato me zanima ali je slučajno kdo tukaj, ki pozna zadevo ali je kdaj uspešno to implementiral in bi me bil sposoben/pripravljen obrniti v pravo smer :)
Spodaj prilagam izrezek iz dokumentacije za metodo sendInvoice (če bi kdo želel celotno datoteko naj mi javi pa pošljem cel pdf.
Metoda: InvoiceStatus SendInvoice (Invoice invoice) Opis: Posiljanje e-racuna v sistem UJPeracun. E-racun mora biti sestavljen iz ovojnice (format definira zbirni center ICL; Bankart) in prilog. Prva priloga je vedno podpisan e-racun v formatu e-SLOG 1.5 ali 1.6. Ostale priloge so lahko poljubne datoteke (primer: PDF datoteka za vizualizacijo e-racuna). V primeru sistemske napake, napake v strukturi podatkov ali nezadostnih pravic, storitev vrne Exception. V ostalih primerih pa storitev vrne sporocilo InvoiceStatus (vec o tem v nadaljevanju). Vhodni parametri: Invoice... sporocilo, ki vsebuje podatke o poslanem e-racunu. Struktura: o Header...glavasporočila,kivsebuje: SessionId (niz do 50 znakov, obvezen)... enolicni identifikator seje pridobljen ob klicu metode Login. SenderId (niz do 50 znakov, obvezen)... identifikator posiljatelja. Trenutno ni v uporabi. ReceiverId (niz do 50 znakov, obvezen)... identifikator prejemnika. Trenutno ni v uporabi. o Body...telosporocila,kivsebuje: Envelope (ovojnica, obvezno)... ovojnica se shrani v strukturo tipa Attachment, ki vsebuje: Content (base64Binary, obvezno)... vsebina ovojnice FileName (niz dolžine 50 znakov, obvezno)... ime datoteke Attachments (seznam prilog, obvezna vsaj ena priloga). Vsaka priloga se shrani v strukturo tipa Attachment, ki vsebuje: Content (base64Binary, obvezno)... vsebina priloge FileName (niz dolzine 50 znakov, obvezno)... ime datoteke
- spremenilo: Strato5 ()
d-mon ::
B2B je WebService in zanj imas WSDL.
Glede na to da si na PHP, ti bo singleWsdl bolj prirocen. https://ujpnet.gov.si/B2B/Service.svc?s...
http://stackoverflow.com/questions/8989...
Pojma nimam kako se ostalo naredi v PHP, ampak v .Net generiras iz WSDL class, ki ga potem uporabljas v kodi.
Elektronski podpis in podobne zadeve v PHP so verjetno science fiction, tako da ti iskreno priporocam .net ali javo, ce hoces priti cez.
Navodila si verjetno nasel: http://www.ujp.gov.si/DocDir/e-racuni/V...
Drugace pa poklici na Mojdenar IT d.o.o.
Glede na to da si na PHP, ti bo singleWsdl bolj prirocen. https://ujpnet.gov.si/B2B/Service.svc?s...
http://stackoverflow.com/questions/8989...
Pojma nimam kako se ostalo naredi v PHP, ampak v .Net generiras iz WSDL class, ki ga potem uporabljas v kodi.
Elektronski podpis in podobne zadeve v PHP so verjetno science fiction, tako da ti iskreno priporocam .net ali javo, ce hoces priti cez.
Navodila si verjetno nasel: http://www.ujp.gov.si/DocDir/e-racuni/V...
Drugace pa poklici na Mojdenar IT d.o.o.
[D-mon]
Strato5 ::
Elektronski podpis in podobne zadeve v PHP so verjetno science fiction, tako da ti iskreno priporocam .net ali javo, ce hoces priti cez.
Navodila si verjetno nasel: http://www.ujp.gov.si/DocDir/e-racuni/V...
Drugace pa poklici na Mojdenar IT d.o.o.
Elektronski podpis ni noben science fiction. Ne bom rekel da nevem kako obvladam, ampak s podpisovanjem sem se pa zadnje čase veliko ukvarjal in sem za podpisovanje s PHP že kar spreten :-)
tako da imam to že narejeno in dela (vsaj za račune, i jih uvažam preko spletne banke, kadar jih banka sama ne podpiše pri uvozu)
Navodila sem našel ampak se mi zdijo malo glupo napisana... sicer pa sem zdaj že precej dlje :-) - ni še fertik vse ampak se je pa malo premaknilo naprej.
hvala za namig o Mojdenar IT podpori.
Strato5 ::
Ok zadevo sem spravil tako daleč, da pride sporočilo gor in da dobim odgovor...
To pomeni, da se lahko začnem ukvarjat z vsebino poslanega sporočila. Odgovor, ki ga dobim je "Ne najdem priloge RACN_00303_2015.xml znotraj ZIP datoteke!"
Racun je navadna xml datoteka, preberem jo z file_get_contents in jo z base64_encode() zakodiram, preden jo pripnem requestu.
Se komu sanja kje bi lahko bil problem? poskusil sem že dodati gzencode() in gzcompress() preden jo base64-encodam ampak je error bil še vedno isti... zdaj sem pa malo brez idej.
Ima kdo drug kakšno?
To pomeni, da se lahko začnem ukvarjat z vsebino poslanega sporočila. Odgovor, ki ga dobim je "Ne najdem priloge RACN_00303_2015.xml znotraj ZIP datoteke!"
Racun je navadna xml datoteka, preberem jo z file_get_contents in jo z base64_encode() zakodiram, preden jo pripnem requestu.
Se komu sanja kje bi lahko bil problem? poskusil sem že dodati gzencode() in gzcompress() preden jo base64-encodam ampak je error bil še vedno isti... zdaj sem pa malo brez idej.
Ima kdo drug kakšno?
Strato5 ::
Sem razrešil... v bistvu ni bil problem v zipanju ampak sem eno pripono mel napačno pri eni od datotek.
Zdaj laufa :) hvala za pomoč
Zdaj laufa :) hvala za pomoč
mmar1234 ::
Pozdravljeni,
Nujno rabim vašo informacijo/podatek.. Glede UJP E-računa.
1. Je imel že kdo vas izkušnjo s tem, da si je zablokiral račun na UJP-u ? Možen je 5x vnos gesla, da ti ga zablokirajo. Zanima me, če je to obnavljajoče se obdobje za 5x narobno vnešeno geslo? Namreč, po odblokaciji sem si ga ponovono aktivirala- tako da sem klicala na Javno upravo, dala vlogo itd,... sedaj pa sem nekajkrat ponovno vpisala narobno geslo(ne še 5x)in me skrbi, ali je to mišljeno 5x nasploh v celotnem odbodju ko ima e račun? Ali 5x v 1 dnevu, tako kot je to na bankomatu recimo.. :)
2. JE IMEL ŽE KDO IZKUŠNJO, ko si je zablokiral zadevo in so mu kasneje to aktivirali nazaj in uredili, da so kasneje to dokumentacijo poslali še po pošti?? Kako je s tem? Ali je to samo to, ko pošlješ po mailu, ti uredijo,.. nič ne pošiljajo po pošti da si kaj koli spreminjal? to me namreč zanima.
RES NAPROŠAM ZA POMOČ!
Hvala že vnaprej..
Nujno rabim vašo informacijo/podatek.. Glede UJP E-računa.
1. Je imel že kdo vas izkušnjo s tem, da si je zablokiral račun na UJP-u ? Možen je 5x vnos gesla, da ti ga zablokirajo. Zanima me, če je to obnavljajoče se obdobje za 5x narobno vnešeno geslo? Namreč, po odblokaciji sem si ga ponovono aktivirala- tako da sem klicala na Javno upravo, dala vlogo itd,... sedaj pa sem nekajkrat ponovno vpisala narobno geslo(ne še 5x)in me skrbi, ali je to mišljeno 5x nasploh v celotnem odbodju ko ima e račun? Ali 5x v 1 dnevu, tako kot je to na bankomatu recimo.. :)
2. JE IMEL ŽE KDO IZKUŠNJO, ko si je zablokiral zadevo in so mu kasneje to aktivirali nazaj in uredili, da so kasneje to dokumentacijo poslali še po pošti?? Kako je s tem? Ali je to samo to, ko pošlješ po mailu, ti uredijo,.. nič ne pošiljajo po pošti da si kaj koli spreminjal? to me namreč zanima.
RES NAPROŠAM ZA POMOČ!
Hvala že vnaprej..
matmul ::
Pozdravljeni,
Pravkar poskušam integrirati enak B2B vmesnik za ponudnika e-poti.
Imam težave, kako se s SoapClient($singleWsdlUri) povezati na betaeracuni.ujp.
Svoj osebni certifikat s katerim se lahko prijavim (Lokalna prijava) v UJP portal imam v oblikah P12 in PFX.
Našel sem kako pretvoriti ves PFX certifikat v private in public key na naslednji način:
Tukaj output kopiram in ustvarim novo datoteko
V test.php najprej nastavim osnovne vrednosti:
Potem se poskušam povezati na različne načine:
1.
2.
3.
4.
5.
6.
Brez izjeme mi vsi vrnejo enak Fatal Error:
Predvsem se obračam na @Strato5, ampak je dobrodošla pomoč od vsakogar, ki ima idejo, kako pomagati.
Hvala.
Pravkar poskušam integrirati enak B2B vmesnik za ponudnika e-poti.
Imam težave, kako se s SoapClient($singleWsdlUri) povezati na betaeracuni.ujp.
Svoj osebni certifikat s katerim se lahko prijavim (Lokalna prijava) v UJP portal imam v oblikah P12 in PFX.
Našel sem kako pretvoriti ves PFX certifikat v private in public key na naslednji način:
$ openssl pkcs12 -in matmul.pfx -nocerts -nodes -out matmul.key $ openssl rsa -in matmul.key -out matmul_private.key $ openssl rsa -in matmul.key -pubout -out matmul_public.key $ openssl pkcs8 -topk8 -inform PEM -in matmul_private.key -outform PEM -nocrypt
Tukaj output kopiram in ustvarim novo datoteko
matmul_private_pkcs8.keyv katero to prilepim in jo shranim.
V test.php najprej nastavim osnovne vrednosti:
$serviceUri = "https://betaeracuni.ujp.gov.si/b2b/service.svc"; $singleWsdl = "{$serviceUri}?singlewsdl"; $localCert = "matmul_public.key"; $localKey = "matmul_private_pkcs8.key";
Potem se poskušam povezati na različne načine:
1.
$soapClient = new \SoapClient($singleWsdl);
2.
$soapClient = new \SoapClient($singleWsdl, [ 'local_cert' => $localCert, 'passphrase' => '', ]);
3.
$context = stream_context_create([ "ssl" => [ "local_cert" => $localCert, "local_pk" => $localKey, ] ]); $soapClient = new \SoapClient($singleWsdl, ["context" => $context]);
4.
$opts = [ 'ssl' => [ 'ciphers' => 'RC4-SHA', 'verify_peer' => false, 'verify_peer_name' => false, ] ]; // SOAP 1.2 client $params = [ 'encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_1, 'trace' => 1, 'exceptions' => 1, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts), 'local_cert' => $localCert, 'passphrase' => '', ]; $soapClient = new \SoapClient($singleWsdl, $params);
5.
$soapClient = new \SoapClient($singleWsdl, [ 'soap_version' => 'SOAP_1_2', 'location' => $serviceUri, 'local_cert' => $localCert, ]);
6.
$contextOptions = [ 'ssl' => [ 'local_cert' => $localCert, 'local_pk' => $localKey, 'SNI_enabled' => true, 'peer_name' => $wsdl, ] ]; $options = [ "soap_version" => SOAP_1_2, "features" => SOAP_SINGLE_ELEMENT_ARRAYS, "stream_context" => stream_context_create($contextOptions), ]; $soapClient = new \SoapClient($singleWsdl, $options);
Brez izjeme mi vsi vrnejo enak Fatal Error:
SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://betaeracuni.ujp.gov.si/b2b/service.svc?singlewsdl' : failed to load external entity "https://betaeracuni.ujp.gov.si/b2b/service.svc?singlewsdl" in C:\laragon\www\ujp\private\test.php:27 Stack trace: #0 C:\laragon\www\ujp\private\test.php(27): SoapClient->__construct('https://betaera...') #1 {main}
Predvsem se obračam na @Strato5, ampak je dobrodošla pomoč od vsakogar, ki ima idejo, kako pomagati.
Hvala.
matmul ::
Vprašanje dodano tudi na SO: /65844882/how-to-create-certificate-to-connect-with-soap-client-with-php
Spura ::
Zakaj imas za SSL sifro nastavljeno RC4-SHA? To je anticno sifriranje ki ga zlomi vsak kdor hoce in verjetno UJP ne pusti takega cipher suita.
matmul ::
Zakaj imas za SSL sifro nastavljeno RC4-SHA? To je anticno sifriranje ki ga zlomi vsak kdor hoce in verjetno UJP ne pusti takega cipher suita.
Ker sem kopiral mnogo različnih načinov zbranih po internetu. Ta RC4-SHA kodiranje se uporabi samo v enem od šestih primerov. Katero kodiranje bi moral izbrati, da bi potem vsaj ta primer delal?
Spura ::
Jst tega ne vem na pamet, povez se na endpoint s kakim openssl pa poglej katere so dovoljene sifre. Kakor vem imajo zdej da mora bit protokol minimalno TLS v1.2. Ce se jst povezem pa mu pustim da izbere cipher, potem je ECDHE-RSA-AES256-SHA384
matmul ::
Mi je le uspelo pa si bom sam odgovoril, da prihranim čas še komu...
GitBash (ali CMD, ...)
PHP
GitBash (ali CMD, ...)
$ cd certificate/folder $ openssl pkcs12 -in osebno_potrdilo.pfx -out javni_kljuc.pem -clcerts
PHP
<?php $serviceUri = "https://betaeracuni.ujp.gov.si/b2b/service.svc"; $singleWsdl = "{$serviceUri}?singlewsdl"; /* Certificate creation: openssl pkcs12 -in osebno_potrdilo.pfx -out javni_kljuc.pem -clcerts here you have to type your password once, and then the new password twice (set+confirm) make sure the new password is different than your password, since everybody with access to code will see it. */ $params = [ 'local_cert' => 'javni_kljuc.pem', 'passphrase' => "new_password", // change accordingly 'trace' => 1, 'exceptions' => 0 ]; $soapClient = new \SoapClient("https://betaeracuni.ujp.gov.si/b2b/service.svc?singlewsdl", $params); var_dump($soapClient->__getFunctions());
Zgodovina sprememb…
- spremenilo: matmul ()
matmul ::
Argh! Problem številka 2.
Ponovno najbolj upam, da boš @Strato5 pogledal tole :)
Kot sem zgoraj napisal sem s certifikatom prišel skozi in se s SoapClient povezal na singleWsdl. Spremenil sem le options parameter ` 'exceptions' => true `, da ne rabim za vsak response preverjat ` if (get_class($response) === 'SoapFault') throw Exception($response); `. Brez težav dobim tudi $soapClient->__getFunctions(); in $soapClient->__getTypes();
Prva funkcija (metoda), ki jo moram uporabit je seveda ` $soapClient->Login(string password); `. Ampak kako?
Najprej sem seveda probal tako:
Po neuspešnem poskusu ugotovim, da obstaja \SoapParam, in sem probal še:
V obeh primerih se v brskalniku izpiše Fatal error:
Kako pravilno podati parametre?
Rubber duck :)
Ponovno najbolj upam, da boš @Strato5 pogledal tole :)
Kot sem zgoraj napisal sem s certifikatom prišel skozi in se s SoapClient povezal na singleWsdl. Spremenil sem le options parameter ` 'exceptions' => true `, da ne rabim za vsak response preverjat ` if (get_class($response) === 'SoapFault') throw Exception($response); `. Brez težav dobim tudi $soapClient->__getFunctions(); in $soapClient->__getTypes();
Prva funkcija (metoda), ki jo moram uporabit je seveda ` $soapClient->Login(string password); `. Ampak kako?
Najprej sem seveda probal tako:
$soapClient->Login('moje-ujp-geslo');
Po neuspešnem poskusu ugotovim, da obstaja \SoapParam, in sem probal še:
$soapClient->Login(new \SoapParam('moje-ujp-geslo', 'password'));
V obeh primerih se v brskalniku izpiše Fatal error:
Fatal error: Uncaught SoapFault exception: [s:Client] Atribut <password> je obvezen. in C:\laragon\www\ujp\private\test.php:63 Stack trace: #0 C:\laragon\www\ujp\private\test.php(63): SoapClient->__call('Login', Array) #1 {main} thrown in C:\laragon\www\ujp\private\test.php on line 63
Kako pravilno podati parametre?
Rubber duck :)
$soapClient->Login([ 'password' => 'moje-ujp-geslo', ]);
Zgodovina sprememb…
- spremenilo: matmul ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Davčne blagajne (strani: 1 2 3 4 … 24 25 26 27 )Oddelek: Programiranje | 333563 (73566) | Macketina |
» | php login s pomočjo soap-aOddelek: Programiranje | 1601 (541) | matmul |
» | E-računOddelek: Programiranje | 7507 (4270) | ivanhoe5x |
» | SMS iz linuxaOddelek: Pomoč in nasveti | 4743 (2299) | Apple |
» | [php] soap - web serviceOddelek: Programiranje | 1683 (1592) | jure1825 |