PHP SoapClient ve karmaşık bir başlık

0 Cevap php

Ben bir süre için şimdi çalışıyorlar, ama ben (o, ben bulabildiğim herhangi bir öğretici daha karmaşık) bir kompleks başlık oluşturmak için bir WSDL ile birlikte PHP SoapClient nasıl kullanılacağını anlamaya olamaz. Bu gibi görünüyor göndermeniz gerekir zarf:

(001) <?xml version='1.0' encoding='UTF-8'?>

(002) <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xlink="http://www.w3.org/1999/xlink">

(003) <SOAP-ENV:Header>

(004) <eb:MessageHeader xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" eb:version="2.0" SOAP-ENV:mustUnderstand="1">

(005) <eb:From>

(006) <eb:PartyId>webservices.example.com</eb:PartyId> 

(007) </eb:From>

(008) <eb:To>

(009) <eb:PartyId>clientURL</eb:PartyId> 

(010) </eb:To>

(011) <eb:CPAId>IPCC</eb:CPAId> 

(012) <eb:ConversationId>ABC123@clientURL.com</eb:ConversationId> 

(013) <eb:Service eb:type="XML">Session</eb:Service> 

(014) <eb:Action>SessionCreateRS</eb:Action> 

(015) <eb:MessageData>

(016) <eb:MessageId>mid:20030707-12545-1369@webservices.sabre.com</eb:MessageId> 

(017) <eb:Timestamp>2001-02-15T11:25:12Z</eb:Timestamp> 

(018) </eb:MessageData>

(019) <RefToMessageId>mid:20001209-133003-2333@clientURL</RefToMessageId> 

(020) </eb:MessageHeader>

(021) <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">

(022) <wsse:BinarySecurityToken xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/12/utility" wsu:Id="SabreSecurityToken" valueType="String" EncodingType="wsse:Base64Binary">Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/RESC!ICESMSLB\/RES.LB!-4954987477210575357!252506!0</wsse:BinarySecurityToken> 

(023) </wsse:Security>

(024) </SOAP-ENV:Header>

(025) <SOAP-ENV:Body>

(026) <eb:Manifest xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" eb:version="2.0">

(027) <eb:Reference eb:id="SessionCreateRS" xlink:type="simple" xlink:href="cid:SessionCreateRS"

(028) <eb:Description xml:lang="en-US">Response Message</eb:Description>"/>

(029) </eb:Reference>

(030) </eb:Manifest>

(031) </SOAP-ENV:Body>

(032) </SOAP-ENV:Envelope>

Ben __ setSoapHeaders kullanarak yapmaya çalıştım () ve SoapVar () kullanarak. Ama doğru çıktı alınamıyor. Örneklerden Ben XML parametreleri doldurmak için bir sınıf kullanmak iyi olurdu öğrendim, bu yüzden böyle bir sınıf yaptı:

class EbXmlMessage{
 public $From = array('PartyId' => 'www.example.com@example.com');
 public $To = array('PartyId' => 'example.com');
 public $CPAId = 'XXXX';
 public $ConversationId = '12345@example.com';
 public $Service = 'Session';
 public $Action = 'SessionCreateRQ';
 public $MessageData = array( 'MessageId' => "mid:12345@example.com",'Timestamp' => '2010-11-26T08:19:00Z');
}

Ben kullanmak yerine:

$eb_params = new SoapVar($eb,SOAP_ENC_OBJECT);
$header =  new SoapHeader($ns,"header", $eb_params,true);

Ama isteği bile biraz ona sahip gibi görünmeye başlayacaktır değildir:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2002/11" xmlns:ns2="https://cert.webservices.sabre.com/cert">
 <SOAP-ENV:Header>
  <ns2:header SOAP-ENV:mustUnderstand="1">
   <From>
    <item>
     <key>PartyId</key>
     <value>www.example.com@example.com</value>
    </item>
   </From>
   <To>
    <item>
     <key>PartyId</key>
     <value>webservices.sabre.com</value>
    </item>
   </To>
   <CPAId>XXX</CPAId>
   <ConversationId>12345@example.com</ConversationId>
   <Service>Session</Service>
   <Action>SessionCreateRQ</Action>
   <MessageData>
    <item>
     <key>MessageId</key>
     <value>mid:12345@www.example.com</value>
    </item>
    <item>
     <key>Timestamp</key>
     <value>2010-11-26T08:19:00Z</value>
    </item>
   </MessageData>
  </ns2:header>
 </SOAP-ENV:Header>
 <SOAP-ENV:Body>
  <ns1:SessionCreateRQ>
   <ns1:POS>
    <ns1:Source PseudoCityCode="XXXX"/>
   </ns1:POS>
  </ns1:SessionCreateRQ>
  <param1/>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope

Ana sorunların şimdiye kadar doğru yerde XML etiketleri doğru alıyorsanız, ve ben nasıl alabilirim bilmiyorum "eb:" ve "wsse:" ad etiketleri. Ben SoapClientI () sınıfını kullanmak için umuyorum ama değilse belki Kıvrılma veya benzeri bir şey kullanmak gerekir ve sadece bir dize olarak XML tedavi, ben ihtiyacım gibi bir daha karmaşık XML işleyebilir emin değilim?

0 Cevap