Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
O seguinte código não gera erro, o curl no webservice WSDL Doc não retorna nada, estou procurando o erro faz um tempo e não consegui encontrar, é meu primeiro contato com soap usando php.
Não consigo Gabriel, o servidor não possui essa lib e não tenho sudo da máquina
minha versão é 5.3, dei um php -r "echo phpinfo()", nem consta nada de soap kk
Então "por que diabos" usa um servidor desses?
Enfim, tem a alternativa não recomendada. Use nusoap.
Mas, se alguém questionar, eu não recomendei....
infelizmente é a vida, a máquina não é minha, não sou sudo para dar apt-get install à vontade, senão já teria no minimo a 5.6 e as devidas libs, mas estou apanhando, nunca usei soap, só rest
Baixe o SoapUI, insira o endereço WSDL e brinque um pouco. Tudo é enviado através de XML's, você só terá de montar o request e interpretar o response.
Com o SoapUI já poderá ver como fazer em ambos os casos.
Eu tive que baixar no meu note para lembrar que este WSDL fica numa rede que não chego se não for por esse servidor que não sou root, pqp.
Só consigo nesta máquina e usando curl mesmo Gabriel, o osso é que não sei o que tem de errado, tudo parece ok. segue debug
* About to connect() to HOSTDOWEBSERVICE port 80 (#0)
Trying 666.666.666.666... connected
* Connected to HOSTDOWEBSERVICE (666.666.666.666) port 80 (#0)
POST /AIMWebservice/v1.1/AIM.asmx HTTP/1.1
< HTTP/1.1 100 Continue
< HTTP/1.1 400 Bad Request
< Cache-Control: private
< Server: Microsoft-IIS/8.5
< X-AspNet-Version: 2.0.50727
< X-Powered-By: ASP.NET
< Date: Mon, 03 Oct 2016 21:06:16 GMT
< Content-Length: 0
<
* Connection #0 to host HOSTDOWEBSERVICE left intact
* Closing connection #0
Esta dando 400 bad request, mas estou segundo a doc do WSDL
Veja meu código por gentileza, só por cima, para saber se não estou fazendo cabaciçe.
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
$soapUrl = "http://HOSTDOWEBSERVICE/AIMWebservice/v1.1/AIM.asmx"; // asmx URL of WSDL
$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>
<GetPassword xmlns="https://tempuri.org/GetPassword">
<passwordWSRequest>
<AppID>APPID</AppID>
<Safe>CofreEquipeFerrmantas</Safe>
<Folder>path</Folder>
<Object>Operating System-WinDomain-BSBR-SPSMON01</Object>
<UserName>SPSMON01</UserName>
<Address>BSBR</Address>
<Database>null</Database>
<PolicyID>null</PolicyID>
<Reason>null</Reason>
<ConnectionTimeout>360</ConnectionTimeout>
<Query>null</Query>
<QueryFormat>null/QueryFormat>
</passwordWSRequest>
</GetPassword>
</soap:Body>
</soap:Envelope>';
$headers = array(
"POST /AIMWebservice/v1.1/AIM.asmx HTTP/1.1",
"Host: HOSTDOWEBSERVICE",
"Content-Type: text/xml; charset=\"utf-8\"",
"Accept: text/xml",
"SOAPAction: \"https://tempuri.org/GetPassword\"",
"Content-length: ".strlen($xml_post_string),
); //SOAPAction: your op URL
$url = $soapUrl;
// PHP cURL for https connection with auth
$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_USERPWD, $soapUser.":".$soapPassword); // username and password - declared at the top of the doc
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// converting
$response = curl_exec($ch);
curl_close($ch);
// converting
$response1 = str_replace("<soap:Body>","",$response);
$response2 = str_replace("</soap:Body>","",$response1);
//echo $response1.' - '.$response2;
// convertingc to XML
$parser = simplexml_load_string($response2);
// user $parser to get your data out of XML response and to display it.
print_r($response).PHP_EOL;
?>
Nunca usei soap, então sei, devo estar fazendo besteira. Agradeço a ajuda.
Use a biblioteca correta: SOAP, mais especificamente a classe SoapClient.