Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

junior.vieira

Request soap via curl com php

Recommended Posts

Use a biblioteca correta: SOAP, mais especificamente a classe SoapClient.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
Host: HOSTDOWEBSERVICE 
Content-Type: text/xml; charset="utf-8"
Accept: text/xml
SOAPAction: "https://tempuri.org/GetPassword"
Content-length: 1457
Expect: 100-continue

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.