2017-12-31 37 views
0

몇 가지 문제가 있습니다. 예, 아마 리그에서 벗어났습니다.하지만 학습을 위해이 작업을 수행합니다.복잡한 wsdl을 사용하기위한 배열 구성 - PHP

SOAP 서비스를 사용하려고하는데 서버 수명을 고려하여 서버에서 허용하는 배열을 빌드 할 수 없습니다.

http://metrolive.telenor.no/kapaks-facade-soap-web/services/KapaksFacade70SoapWrapper/wsdl

내가이 작업을 수행 할 수 있으며, 그것은 완벽하게 잘 작동 :

WSDL은 볼 수 여기

$tlf = new SoapVar(
    array(
    new SoapVar(
     array(
      'ns2:connectionNumber' => 12345678, 
      'ns2:connectionNumberType' => "T", 
      'ns2:requestedProduct' => "OA" 
     ), SOAP_ENC_OBJECT, null, null, null, 'http://web.soap.v70.kapaks.facade.metro2.telenor.com' 
    ) 
), SOAP_ENC_OBJECT, null, null, null, 'http://dto.common.v70.kapaks.facade.metro2.telenor.com' 
); 

$client = new SoapClient($kapaks_wsdl, $wsdl_options); 
$result = $client->validateProductSoap($tlf); 

이이 XML을 생성합니다 (와이어 샤크에서)

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org /soap/envelope/" 
    xmlns:ns1="http://web.soap.v70.kapaks.facade.metro2.telenor.com" 
     xmlns:ns2="http://dto.common.v70.kapaks.facade.metro2.telenor.com"> 
<SOAP-ENV:Header/><SOAP-ENV:Body><ns1:validateProductSoap><ns1:BOGUS> 
    <ns2:connectionNumber>12345678</ns2:connectionNumber> 
<ns2:connectionNumberType>T</ns2:connectionNumberType> 
<ns2:requestedProduct>OA</ns2:requestedProduct></ns1:BOGUS> 
</ns1:validateProductSoap></SOAP-ENV:Body></SOAP-ENV:Envelope> 

하지만 "주소"노드에서 속성을 요청해야합니다 (노드입니까?) ?). 컬 방식 (SOAP-UI에서 Straigt)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 

    xmlns:web="http://web.soap.v70.kapaks.facade.metro2.telenor.com" 

    xmlns:dto="http://dto.common.v70.kapaks.facade.metro2.telenor.com"> 
    <soapenv:Header/> 
    <soapenv:Body> 
    <web:validateProductSoap> 
    <web:arg_0_0> 
     <dto:address> 

      <dto:houseLetter>A</dto:houseLetter> 
      <dto:houseNumber>12</dto:houseNumber> 

      <dto:municipalityNumber>0000</dto:municipalityNumber> 

      <dto:streetCodeType>V</dto:streetCodeType> 
      <dto:streetName>Street</dto:streetName> 
     </dto:address> 



     <dto:requestedProduct>OA</dto:requestedProduct> 
    </web:arg_0_0> 
    </web:validateProductSoap> 
    </soapenv:Body> 
</soapenv:Envelope> 

: 나는

이 XML은 컬 작동 ... 배열, 내가 일이에왔다에이를 매핑하는 방법을 알아낼 수 없습니다 나에게 XML 응답을 제공하지만 프론트 엔드보기로 전달할 수 있도록 soapclient가 생성하는 배열/객체가 필요합니다.

주소 태그 안에 무엇이 있는지를 요청하는 soapclient 요청을 어떻게 만들 수 있습니까? 또는 soapclient가 제공하는 것과 동일한 배열/객체를 만드시겠습니까?

+0

DOMDocument :: loadXML()과 비슷한가요? – frz3993

+0

흠, 이것은 curl-xml 응답을 array/object로 변환하는 것입니까? – kimhaak

+0

$ wsdl_options을 제공해 주시겠습니까? 서비스를 호출하려고하는데 권한이 없다고 표시되어 있습니다. –

답변

0

해결 방법을 만들었습니다. 이 시점에서 나는 그 일이 어떻게 행해졌는지 신경 쓰지 않는다. 그래도 누군가가 올바른 방법으로 해답을 얻는다면 그걸보고 싶습니다.

나는 새로운 PHP를 (https://github.com/econea/nusoap)에 대한 업데이 트가 그 nusoap 사용하고 있으며, 그걸로 원시 XML을 보냅니다.

function adresse($kmune1,$street1,$hnum1,$hletter1) 
       { 
        require '..\vendor\econea\nusoap\src\nusoap.php'; 



        $endpoint = "http://user:[email protected]:80/kapaks-facade-soap-web/services/KapaksFacade70SoapWrapper"; 

        $client2 = new nusoap_client($endpoint, false); 
        $client2->soap_defencoding = 'UTF-8'; 
        $client2->decode_utf8 = false; 

        $XMLrequest = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://web.soap.v70.kapaks.facade.metro2.telenor.com" xmlns:dto="http://dto.common.v70.kapaks.facade.metro2.telenor.com"> 
        <soapenv:Header/> 
        <soapenv:Body> 
         <web:validateProductSoap> 
         <web:arg_0_0> 
          <dto:address> 

           <dto:houseLetter>'.$hletter1.'</dto:houseLetter> 
           <dto:houseNumber>'.$hnum1.'</dto:houseNumber> 

           <dto:municipalityNumber>'.$kmune1.'</dto:municipalityNumber> 

           <dto:streetCodeType>V</dto:streetCodeType> 
           <dto:streetName>'.$street1.'</dto:streetName> 
          </dto:address> 



          <dto:requestedProduct>OA</dto:requestedProduct> 
         </web:arg_0_0> 
         </web:validateProductSoap> 
        </soapenv:Body> 
       </soapenv:Envelope>'; 


        $result = $client2->send($XMLrequest, $endpoint, null); 




        $result=json_decode(json_encode($result)); 
        return $result; 


       }