2017-12-31 203 views
0

私はいくつかの問題を抱えていますが、私はおそらく私のリーグから外れていますが、私はこれを学習のために行います。複雑なwsdlを使用するためのビルド配列 - PHP

私はSOAPサービスを消費しようとしています。私の人生は、サーバーが受け入れる配列を構築できません。

WSDLは、ここに表示されている:

http://metrolive.telenor.no/kapaks-facade-soap-web/services/KapaksFacade70SoapWrapper/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を生成します(wiresharkのから)

<?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> 

しかし、私は "アドレス"ノードからプロパティを要求する必要があります(それはノードですか?)。 I私は日本にされている配列、にこれをマップする方法を見つけ出すことはできません...

このXMLはカールで動作します(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応答を与えますが、フロントエンドビューに渡すために、soapclientが生成する配列/オブジェクトが必要です。

アドレスタグ内の内容を要求するsoapclientリクエストはどのように生成できますか?または、soapclientが提供するものと同一の配列/オブジェクトを作成しますか?

+0

DOMDocument :: loadXML()のようなものはありますか? – frz3993

+0

これはcurl-xmlレスポンスをarray/objectに変換するのですか? – kimhaak

+0

$ wsdl_optionsを教えてください。私はサービスを呼び出そうとしていますが、私は許可されていないと述べています。 –

答えて

0

私は回避策をとった。この時点で、私はそれがどのように行われたか気にしません。それでも正しい方法で答える方法があれば、私はそれを見たいと思います。

私はnusoapを使用しています。最新のphp(https://github.com/econea/nusoap)用に更新されており、raw 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; 


       } 
関連する問題