» »

eTurizem in PHP

eTurizem in PHP

MUC ::

Ne gre mi testna vzpostavitev povezave PHPja z eTurizmom. Prenesel sem testen cert in naredil en testen XML za oddajo gosta:

<?xml version="1.0" encoding="UTF-8"?>
<knjigaGostov>
  <row idNO="0" zst="14" ime="Grace" pri="Fraser" sp="F" dtRoj="1985-11-26" drzava="SE" vrstaDok="H" idStDok="132F20F6-73E" casPrihoda="2018-02-18T08:05:00" casOdhoda="2018-02-22T23:26:00" ttObracun="12" ttVisina="0.246" status="1"/>
</knjigaGostov>


Tukaj imam testno PHP skriptico:

$wsdl = "https://wwwt.ajpes.si/rno/rnoApi/eTurizem/wsETurizemPorocanje.asmx?WSDL";
$init = array(
			"local_cert" => p12ToPem(__DIR__ . '/eTurizem_test.p12'),
			"trace" => true, 
			"exception" => true,
			"cache_wsdl" => WSDL_CACHE_NONE
		);

try {
    $soapClient = new SoapClient($wsdl, $init);

	$file = __DIR__ . '/knjigaGostov.xml';
	$xml = file_get_contents($file);

    $parameters = array(
    	"uName" => $ajpes_username,
    	"pwd" => $ajpes_password,
    	"data" => $xml,
    	"format" => 1
    );

    $result = $soapClient->__soapCall("oddajPorocilo", array("parameters" => $parameters));

    var_dump($result);

} catch(Exception $e) {
    var_dump($e);
}


V skripti oddam XML kot string (kar ni čisto po navodilih, kjer hočejo XML - navodila) in dobim odgovor AJPESA:
<data packageGuid="-1" time=18.2.2018 19:35:36 success="0" failure="-1" failureRows="-1" source="Invalid XML root" />


Če pa nekoliko spremenim skripto in XML spremenim v DOM oziroma objekt, pa dobim exception: SOAP-ERROR: Encoding: object has no 'any' property"

Tukaj spodaj pastam C# kodo, ki jo navajajo kot primer. Kakšna ideja v čem je težava? Hvala

using System;
using System.Security.Cryptography.X509Certificates;
using System.Xml;

namespace apiTest
{
    public partial class index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string rsp = "";
            try
            {
                //pridobi KDP (certifikat) 
                String path = Server.MapPath("test.p12");
                X509Certificate Cert = new X509Certificate();
                //import KDP
                Cert.Import(path);
                string userName = "apiTest"; //vaše uporabniško ime (enako kot za AJPES portal)
                string pwd = "Test123!"; // vaše geslo (enako kot za AJPES portal)
                //pridobi XML dokument s podatki (dnevnega ali mesečnega poročila)
                XmlDocument doc = new XmlDocument();
                path = Server.MapPath("testniPodatki_knjigaGostov.xml");
                doc.Load(path);
                int format = 1; //format poročila o prenosu podatkov (1 = XML, 2 ? JSON)
                //create SOAP client using VSDL imported via Web References and add your certificate
                var client = new apiTest.serviceTest.rno();
                client.ClientCertificates.Add(Cert);
         
                //servis lahko vrne tudi šifrante ...
                //seznam držav
                //doc.LoadXml("<sifDrzave/>");
				 //časovne omejitve za mesečno poročanje
                //doc.LoadXml("<mrLimits/>");
                //turistične takse
                //doc.LoadXml("<sifTT/>");
                //vrste dokumentov
                //doc.LoadXml("<sifDokId/>");
                //seznam napak
                //doc.LoadXml("<sifNapake/>");
                //status mesečnega poročanja
                //doc.LoadXml("<statusPor/>");
                //validacijska shema za poročanje iz knjige gostov
                //doc.LoadXml("<knjigaGostovSchema/>");
                //validacijska shema za mesečno poročanje
                //doc.LoadXml("<knjigaGostovMesecnoPorociloSchema/>");
                //poročilo za že posredovane podatke
                //doc.LoadXml("<packageGuid>RequiredPackageGuid</packageGuid>");
                //stringG = "yourPackegeGuid"
                //rsp = client.oddajPorocilo(userName, pwd, doc, stringG, format);       
                //pošlji podatke in prevzami poročilo o prenosu
                rsp = client.oddajPorocilo( userName, pwd, doc, format);
            }
            catch (Exception ex)
            {
                rsp = ex.Message.ToString();
            }
            txtXml.Text = rsp.Replace("<", Environment.NewLine + "<");
        }
    }
}

tadejkan ::

Tudi sam sem imel precej težav, ampak v Javi, zato ti s točno kodo ne morem pomagati :/

Težava je, da oni hočejo XML v podatkih, kar je malo čudno (ok, celoten SOAP je itak čuden), hkrati pa so precej občutljivi na to, kaj dobijo.
Najboljše je, da si s pomočjo http://php.net/manual/en/soapclient.get... izpišeš kaj točno si poslal tja.
Da zadeva deluje, mora request izgledati takole:
<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:oddajPorocilo xmlns:ns2="http://www.ajpes.si/eturizem/"><ns2:uName>apiTest</ns2:uName><ns2:pwd>Test123!</ns2:pwd><ns2:data><knjigaGostov><row idNO="0" zst="14" ime="Grace" pri="Fraser" sp="F" dtRoj="1985-11-26" drzava="SE" vrsta...


Pri meni sta se pojavljali dve težavi:
- če sam dal kot string (kar bi bilo precej enostavno), mi je seveda
<knjigaGostov>
... escapalo, kar ni bilo kul,
- če sam dal kot XML, mi je zraven rinilo namespace in mi je zgeneriralo nekaj v smislu
<ns:knjigaGostov
... kar spet ni bilo kul.



Če pa nekoliko spremenim skripto in XML spremenim v DOM oziroma objekt, pa dobim exception: SOAP-ERROR: Encoding: object has no 'any' property"

To se mi sliši, da bi bila pravilna rešitev, ampak težko rečem 100%.
Mogoče poglej https://stackoverflow.com/questions/187..., omenjajo XSD_ANYXML.

MUC ::

Hvala, sem sedaj rešil preko tvojega XMLja.

Sem že prej hotel narest vse skupaj "ročno" in poslat kar skupen XML, ampak sem vztrajal, pa mi ne gre ..

Sedaj pošiljem ročno oblikovan XML preko curl in dobim uspešno potrditev... končno :)

tadejkan ::

Hehe, ja, včasih je najlažje kar tako :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Davčne blagajne (strani: 1 2 3 424 25 26 27 )

Oddelek: Programiranje
1344319358 (59361) Macketina
»

E-račun

Oddelek: Programiranje
217097 (3860) ivanhoe5x
»

PHP davčna blagajna

Oddelek: Programiranje
187661 (5685) brble
»

[JAVA] HTTPS client

Oddelek: Programiranje
173058 (1788) peterv6i
»

SMS iz linuxa

Oddelek: Pomoč in nasveti
444577 (2133) Apple

Več podobnih tem