Vra

Is daar beskikbaar enige instrument vir PHP wat gebruik kan word om kode te genereer vir die verbruik van 'n web diens op grond van sy WSDL ? Iets wat vergelykbaar is met te kliek "Voeg Web Reference" in Visual Studio of die Eclipse plugin wat dieselfde ding doen vir Java.

Was dit nuttig?

Oplossing

Ek het 'n groot sukses met wsdl2php het. Dit sal outomaties skep wrapper klasse vir alle voorwerpe en metodes wat gebruik word in jou web diens.

Ander wenke

In PHP 5 wat jy kan gebruik SoapClient op die WSDL om te bel die web diens funksies. Byvoorbeeld :

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

en $ kliënt is nou 'n voorwerp wat klas metodes het soos omskryf in some.wsdl. So as daar 'n metode genoem getTime in die WSDL dan sou jy net noem:

$result = $client->getTime();

En die gevolg van wat sou (natuurlik) in die veranderlike $ gevolg. Jy kan die __getFunctions metode gebruik om 'n lys van al die beskikbare metodes om terug te keer.

Ek het NuSOAP gebruik in die verlede. Ek hou van dit, want dit is net 'n stel van PHP lêers wat jy kan insluit. Daar is niks om te installeer op die web bediener en geen config opsies te verander. Dit het WSDL ondersteuning sowel wat 'n bonus.

Dit artikel verduidelik hoe jy PHP SoapClient kan gebruik om te bel 'n api web diens.

Wel, daardie eienskappe is spesifiek vir 'n instrument wat jy gebruik vir ontwikkeling in die tale.

Jy sal nie dié gereedskap het as (byvoorbeeld) jy is notepad met behulp van kode te skryf. So, miskien moet jy die vraag vir die instrument wat jy gebruik vra.

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

Hi Ek het hierdie uit hierdie site: http://forums.asp.net/t/887892.aspx?Consume+an+ASP+NET+Web+Service+with+PHP

Die web diens het metode Add wat twee params neem:

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

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

Sê jy die volgende verskaf:

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

en

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

Kom ons sê dat toegang http://thesite.com/ gesê dat die WSDL adres is: 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;
}

Soos jy kan sien, die wat in die XML items word in die PHP-kode al die LoginId waarde kan verander word.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top