Pergunta

Existe alguma ferramenta para PHP que possa ser usada para gerar código para consumir um serviço de internet com base em seu WSDL?Algo comparável a clicar em "Adicionar referência da Web" no Visual Studio ou no plugin Eclipse que faz a mesma coisa para Java.

Foi útil?

Solução

Tive grande sucesso com wsdl2php.Ele criará automaticamente classes wrapper para todos os objetos e métodos usados ​​em seu serviço web.

Outras dicas

No PHP 5 você pode usar SoapCliente no WSDL para chamar as funções de serviço da web. Por exemplo:

$client = new SoapClient("some.wsdl");

e $client agora é um objeto que possui métodos de classe conforme definidos em some.wsdl.Então, se houvesse um método chamado getTime no WSDL, você simplesmente chamaria:

$result = $client->getTime();

E o resultado disso estaria (obviamente) na variável $result.Você pode usar o método __getFunctions para retornar uma lista de todos os métodos disponíveis.

Eu tenho usado NuSOAP no passado.Gostei porque é apenas um conjunto de arquivos PHP que você pode incluir.Não há nada para instalar no servidor web e nenhuma opção de configuração para alterar.Também possui suporte WSDL, o que é um bônus.

Esse artigo explica como você pode usar PHP SoapClient para chamar um serviço web de API.

Bem, esses recursos são específicos de uma ferramenta que você está usando para desenvolvimento nessas linguagens.

Você não teria essas ferramentas se (por exemplo) estivesse usando o bloco de notas para escrever código.Então, talvez você deva fazer a pergunta sobre a ferramenta que está usando.

Para PHP: http://webservices.xml.com/pub/a/ws/2004/03/24/phpws.html

Olá, peguei isso neste site: http://forums.asp.net/t/887892.aspx?Consume+an+ASP+NET+Web+Service+with+PHP

O serviço web tem método Add que leva dois parâmetros:

<?php
    $client = new SoapClient("http://localhost/csharp/web_service.asmx?wsdl");

     print_r( $client->Add(array("a" => "5", "b" =>"2")));
?>

Digamos que você recebeu o seguinte:

<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:int="http://thesite.com/">
    <x:Header/>
    <x:Body>
        <int:authenticateLogin>
            <int:LoginId>12345</int:LoginId>
        </int:authenticateLogin>
    </x:Body>
</x:Envelope>

e

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <authenticateLoginResponse xmlns="http://thesite.com/">
            <authenticateLoginResult>
                <RequestStatus>true</RequestStatus>
                <UserName>003p0000006XKX3AAO</UserName>
                <BearerToken>Abcdef1234567890</BearerToken>
            </authenticateLoginResult>
        </authenticateLoginResponse>
    </s:Body>
</s:Envelope>

Digamos que acessando http://thesite.com/ disse que o endereço WSDL é:http://thesite.com/PortalIntegratorService.svc?wsdl

$client = new SoapClient('http://thesite.com/PortalIntegratorService.svc?wsdl');
$result = $client->authenticateLogin(array('LoginId' => 12345));
if (!empty($result->authenticateLoginResult->RequestStatus)
    && !empty($result->authenticateLoginResult->UserName)) {
    echo 'The username is: '.$result->authenticateLoginResult->UserName;
}

Como você pode ver, os itens especificados no XML são usados ​​no código PHP, embora o valor LoginId possa ser alterado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top