Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Encontrei esse exemplo de envio de XML com o Soapclient. Funciona perfeitamente:
<?php
$client = new SoapClient('http://www.webservicex.net/ConvertTemperature.asmx?WSDL');
$function = 'ConvertTemp';
$arguments= array('ConvertTemp' => array(
'Temperature' => 31,
'FromUnit' => 'degreeCelsius',
'ToUnit' => 'degreeFahrenheit'
));
$options = array('location' => 'http://www.webservicex.net/ConvertTemperature.asmx');
$result = $client->__soapCall($function, $arguments, $options);
echo 'Response: ';
print_r($result);
?>
Só que eu gostaria de usar esses mesmos métodos do Soapclient, mas pra um XML puro como entrada. Nesse caso, acho que ele é:
<?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>
<ConvertTemp xmlns="http://www.webserviceX.NET/">
<Temperature>31</Temperature>
<FromUnit>degreeCelsius</FromUnit>
<ToUnit>degreeFahrenheit</ToUnit>
</ConvertTemp>
</soap:Body>
</soap:Envelope>Encontrei esse código de exemplo de envio de XML para um webservice via SoapClient:
<?php
$client = new SoapClient('http://www.webservicex.net/ConvertTemperature.asmx?WSDL', array("trace" => 1,"exceptions"=>0));
$function = 'ConvertTemp';
$arguments= array('ConvertTemp' => array(
'Temperature' => 31,
'FromUnit' => 'degreeCelsius',
'ToUnit' => 'degreeFahrenheit'
));
$options = array('location' => 'http://www.webservicex.net/ConvertTemperature.asmx');
$result = $client->__soapCall($function, $arguments, $options);
echo 'Response: ';
print_r($result);
echo "<br><br>REQUEST<br><br>:\n" . htmlentities($client->__getLastRequest()). "\n";
?>
E ele me mostra o seguinte XML que foi enviado:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.webserviceX.NET/">
<SOAP-ENV:Body>
<ns1:ConvertTemp>
<ns1:Temperature>31</ns1:Temperature>
<ns1:FromUnit>degreeCelsius</ns1:FromUnit>
<ns1:ToUnit>degreeFahrenheit</ns1:ToUnit>
</ns1:ConvertTemp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:con="http://connectors.omnibees.com/" xmlns="http://www.opentravel.org/OTA/2003/05">
<soapenv:Header>
<con:OmnibeesCredentials>
<con:UserCode>USER</con:UserCode>
<con:UserName>12345</con:UserName>
<con:UserPassword>user.12345</con:UserPassword>
</con:OmnibeesCredentials>
</soapenv:Header> <POS>
<Source>
<RequestorID Type="Hotel" ID="12345"/>
</Source>
</POS>
<UniqueID Type="Customer" ID="1"/>
<Profile ProfileType="Customer" CreateDateTime="2016-10-20" ShareAllMarketInd="Yes" StatusCode="Active">
<Customer Language="pt-PT" CurrencyCode="BRL">
<PersonName>
<GivenName>NOME DA PESSOA</GivenName>
</PersonName>
<Telephone CountryAccessCode="+55" PhoneNumber="(XX) XXXX-XXXX" PhoneTechType="1" PhoneUseType="5"/>
<Email EmailType="1">nome@dapessoa.com</Email>
<Address UseType="Contact">
<AddressLine>RUA X, NUMERO X</AddressLine>
<CityName>CIDADE</CityName>
<PostalCode>12345678</PostalCode>
<StateProv StateCode="XX"/>
<CountryName Code="BR"/>
</Address>
</Customer>
<UserID PinNumber="demopass" ID="ag.12345"/>
</Profile>
</OTA_ProfileCreateRQ>
</soapenv:Body>
</soapenv:Envelope>Alguém sabe como eu posso fazer? Sabem se programas como o SoapUI fazem esse tipo de coisa?
Qual a necessidade disso? Pergunto isso para entender mesmo aonde você quer chegar;
A biblioteca Soap facilita a comunicação, por isso você só consegue retornar algumas informações com o trace ativado e não faz uso, de forma direta, do XML.
Eu mesclei seus dois tópicos.
Evite duplicar tópicos conforme as Orientações e Regras do fórum de PHP
Fiz um acréscimo no código pra exibir o XML enviado:
E ele exibiu o que eu esperava, com algumas pequenas diferenças:
E eu achei também esse código aqui que utiliza o SoapClient tendo o XML puro como entrada:
<?php
$xmlstr =