04. juli 2016 - 15:52 Der er 3 kommentarer og
1 løsning

Soap Request XML problemer

Hej eksperter.

Jeg har ikke rodet med PHP i noget tid, og er blevet kastet ud i et projekt med at hente data via Soap protokollen. Det drejer sig om: http://svk-test.teknologisk.dk/WebService_SVK.asmx

Jeg har følgende kode:

<?php

        $dataFromTheForm = $_POST['fieldName'];
        $soapUrl = "http://svk-test.teknologisk.dk/WebService_SVK.asmx?op=GetStandardvaerdikatalog";


        $xml_post_string = '<?xml version="1.0" encoding="utf-8"?>
            <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
              <soap:Body>
                <GetStandardvaerdikatalog xmlns="http://svk.teknologisk.dk/">
               
                </GetStandardvaerdikatalog>
              </soap:Body>
            </soap:Envelope>';

          $headers = array(
                        "Content-type: text/xml;charset=\"utf-8\"",
                        "Accept: text/xml",
                        "Cache-Control: no-cache",
                        "Pragma: no-cache",
                        "SOAPAction: http://svk.teknologisk.dk/GetStandardvaerdikatalog",
                        "Content-length: ".strlen($xml_post_string),
                    );


         

            $url = $soapUrl;

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
            curl_setopt($ch, CURLOPT_TIMEOUT, 10);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

            $response = curl_exec($ch);
            curl_close($ch);

            $response1 = str_replace("<soap:Body>","",$response);
            $response2 = str_replace("</soap:Body>","",$response1);


            $xml = new SimpleXMLElement($response2);
           
           

            $string = new SimpleXMLElement("
                <katalog>
                <tiltag>
                  <ID>text</ID>
                </tiltag>
               
                  <tiltag>
                  <ID>text2</ID>
                </tiltag>
                </katalog>
            ");


        print_r($xml);
        print_r($string);
       
    ?>

Problemet er bare at selvom $respone2 er det reneste XML i en streng, fungerer det ikke. den laver strenge om til et array, men kun med én værdi (Hele strengen)

$string fungerer fint.

Jeg har aldrig arbejdet med SOAP før, så kender ikke rigtig til begreberne, eller hvordan tingene skal håndteres.
Avatar billede arne_v Ekspert
04. juli 2016 - 19:05 #1
Jeg tror at du skal gentaenke hele tilgangen til loesningen.

Hvis du bruger SoapClient og giver den URL for WSDL, saa undgaar du at boevle med en lang raekke low level detaljer.
05. juli 2016 - 21:54 #2
Hej Arne. Tak for svaret

Jeg har taget det til mig og forsøgt med SoapClient. Men igen er jeg løbet ind i problemer, ca. samme sted som før.

Jeg vil gerne modtage informationerne som en JSON streng, men ender på en eller anden facon ud med en hybrid af et Object og et array. Kan ikke rigtig håndtere de data jeg modtager.

$wsdl = 'http://svk-test.teknologisk.dk/WebService_SVK.asmx?WSDL';

$options = array(
        'uri'=>'http://www.w3.org/2001/XMLSchema',
        'style'=>SOAP_RPC,
        'soap_version'=>SOAP_1_1,
        'cache_wsdl'=>WSDL_CACHE_NONE,
        'connection_timeout'=>15,
        'trace'=>true,
        'encoding'=>'UTF-8',
        'exceptions'=>true,
        'cache_wsdl' => WSDL_CACHE_NONE,
    );
try {
    $soap = new SoapClient($wsdl, $options);
    $data = $soap->GetStandardvaerdikatalog_Json(array("udgaaet_medtaget" => 0));
}
    $assocArray = json_decode($data, true);

  print_r($data);


Min $data returneres som object dvs. jeg ikke kan parse data som JSON.
Her er et udsnit af hvad $data returnere:
objectstdClass Object ( [GetStandardvaerdikatalog_JsonResult] => {"arraytiltag":[{"svk_id":954,"Slutanvendelse":"Belysning / Udskiftning af halogenstift med A+ stift (fatning G4)","spareraad_ID":"Belys 1","Betegnelse":"Udskiftning af Stift-halogen belysning med A+ stift belysning (fatning

Jeg er på helt på herrens mark lige pt. :)
Avatar billede arne_v Ekspert
06. juli 2016 - 01:52 #3
Jeg kan ikke teste, men jeg gaetter paa at du skal bruge:

$assocArray = json_decode($data->GetStandardvaerdikatalog_JsonResult, true);
06. juli 2016 - 08:08 #4
For satan Arne, du er en knag ;)

Det var lige hvad der skulle til. Jeg siger mange tak ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester