Sök…


Syntax

parametrar

Parameter detaljer
$ WSDL URI för WSDL eller NULL om du använder icke-WSDL-läge
$ alternativ Utbud av alternativ för SoapClient. Icke-WSDL-läge kräver location och uri att ställa in, alla andra alternativ är valfria. Se tabell nedan för möjliga värden.

Anmärkningar

SoapClient klassen är utrustad med en __call metod. Detta ska inte kallas direkt. Istället kan du göra det här:

$soap->requestInfo(['a', 'b', 'c']);

Detta kommer att anropa requestInfo metoden requestInfo .


Tabell över möjliga värden för $options ( array av nyckel- / värdepar ):

Alternativ detaljer
plats URL till SOAP-server. Krävs i läget utan WSDL. Kan användas i WSDL-läge för att åsidosätta URL: en.
uri Målnamn för SOAP-tjänst. Krävs i läget utan WSDL.
stil Möjliga värden är SOAP_RPC eller SOAP_DOCUMENT . Gäller endast i icke-WSDL-läge.
använda sig av Möjliga värden är SOAP_ENCODED eller SOAP_LITERAL . Gäller endast i icke-WSDL-läge.
soap_version Möjliga värden är SOAP_1_1 ( standard ) eller SOAP_1_2 .
autentisering Aktivera HTTP-autentisering. Möjliga värden är SOAP_AUTHENTICATION_BASIC ( standard ) eller SOAP_AUTHENTICATION_DIGEST .
logga in Användarnamn för HTTP-autentisering
Lösenord Lösenord för HTTP-autentisering
proxy_host URL för proxyserver
proxy_port Proxy-serverport
proxy_login Användarnamn för proxy
proxy_password Lösenord för proxy
local_cert Sökväg till HTTPS-klientcertifikat (för autentisering)
lösenfras Lösenfras för HTTPS-klientcert
kompression Komprimera begäran / svar. Värde är en bitmask av SOAP_COMPRESSION_ACCEPT med antingen SOAP_COMPRESSION_GZIP eller SOAP_COMPRESSION_DEFLATE . Till exempel: SOAP_COMPRESSION_ACCEPT \| SOAP_COMPRESSION_GZIP .
kodning Internt teckenkodning (TODO: möjliga värden)
spår Boolean , är standard FALSE . Aktiverar spårning av förfrågningar så att fel kan spåras tillbaka. Aktiverar användning av __getLastRequest() , __getLastRequestHeaders() , __getLastResponse() och __getLastResponseHeaders() .
classMap Karta över WSDL-typer till PHP-klasser. Värde ska vara en matris med WSDL-typer som nycklar och PHP-klassnamn som värden.
undantag Booleskt värde. Bör SOAP-fel undantag (av typen SoapFault).
connection_timeout Timeout (i sekunder) för anslutningen till SOAP-tjänsten.
typemap Array av typmappningar. Array ska vara nyckel- / värdepar med följande knappar: type_name , type_ns (namnutrymme URI), from_xml (återuppringning accepterar en to_xml ) och to_xml (återuppringning accepterar en objektparameter).
cache_wsdl Hur (om inte alls) ska WSDL-filen cache. Möjliga värden är WSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY eller WSDL_CACHE_BOTH .
USER_AGENT Sträng att använda i rubriken User User-Agent .
stream_context En resurs för ett sammanhang.
funktioner Bitmask av SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLS .
håll vid liv ( PHP-version> = endast 5.4 ) Booleskt värde. Skicka antingen Connection: Keep-Alive header ( TRUE ) eller Connection: Close header ( FALSE ).
ssl_method ( PHP-version> = endast 5.5 ) Vilken SSL / TLS-version att använda. Möjliga värden är SOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 eller SOAP_SSL_METHOD_SSLv23 .

Problem med 32-bitars PHP : I 32-bitars PHP kommer numeriska strängar större än 32 bitar som automatiskt kastas till heltal med xs:long kommer att resultera i att den träffar 32-bitarsgränsen och kastar den till 2147483647 . För att lösa detta, kastar du strängarna för att flyta innan du __soapCall() till __soapCall() .

WSDL-läge

SoapClient ett nytt SoapClient objekt som skickar webbadressen till WSDL-filen och eventuellt en rad alternativ.

// Create a new client object using a WSDL URL
$soap = new SoapClient('https://example.com/soap.wsdl', [
    # This array and its values are optional
    'soap_version' => SOAP_1_2,
    'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
    'cache_wsdl' => WSDL_CACHE_BOTH,
    # Helps with debugging
    'trace' => TRUE,
    'exceptions' => TRUE
]);

Använd sedan $soap att kalla dina SOAP-metoder.

$result = $soap->requestData(['a', 'b', 'c']);

Icke-WSDL-läge

Detta liknar WSDL-läge, förutom att vi passerar NULL som WSDL-fil och ser till att ställa in location och uri alternativ.

$soap = new SoapClient(NULL, [
    'location' => 'https://example.com/soap/endpoint',
    'uri' => 'namespace'
]);

Classmaps

När du skapar en SOAP-klient i PHP kan du också ställa in en classmap i konfigurationsfältet. Detta classmap definierar vilka typer som definierats i WSDL ska mappas till faktiska klasser istället för standard StdClass . Anledningen till att du vill göra detta är att du kan få automatisk utfyllnad av fält och metodsamtal på dessa klasser istället för att behöva gissa vilka fält som är inställda i det vanliga StdClass .

class MyAddress {
    public $country;
    public $city;
    public $full_name;
    public $postal_code; // or zip_code
    public $house_number;
}

class MyBook {
    public $name;
    public $author;

    // The classmap also allows us to add useful functions to the objects
    // that are returned from the SOAP operations.
    public function getShortDescription() {
        return "{$this->name}, written by {$this->author}";
    }
}

$soap_client = new SoapClient($link_to_wsdl, [
    // Other parameters
    "classmap" => [
        "Address" => MyAddress::class, // ::class simple returns class as string
        "Book" => MyBook::class,
    ]
]);

När du har konfigurerat klasskarta, så kommer SoapClient, när du utför en viss operation som returnerar en typ av Address eller Book , att instansera den klassen, fylla fälten med data och returnera den från operationssamtalet.

// Lets assume 'getAddress(1234)' returns an Address by ID in the database
$address = $soap_client->getAddress(1234);

// $address is now of type MyAddress due to the classmap
echo $address->country;

// Lets assume the same for 'getBook(1234)'
$book = $soap_client->getBook(124);

// We can not use other functions defined on the MyBook class
echo $book->getShortDescription();

// Any type defined in the WSDL that is not defined in the classmap
// will become a regular StdClass object
$author = $soap_client->getAuthor(1234);

// No classmap for Author type, $author is regular StdClass.
// We can still access fields, but no auto-completion and no custom functions
// to define for the objects.
echo $author->name;

Spåra SOAP-begäran och svar

Ibland vill vi titta på vad som skickas och tas emot i SOAP-begäran. Följande metoder returnerar XML i begäran och svar:

SoapClient::__getLastRequest()
SoapClient::__getLastRequestHeaders()
SoapClient::__getLastResponse()
SoapClient::__getLastResponseHeaders()

Anta till exempel att vi har en ENVIRONMENT och när denna konstants värde är inställt på DEVELOPMENT vill vi återkalla all information när samtalet till getAddress kastar ett fel. En lösning kan vara:

try {
    $address = $soap_client->getAddress(1234);
} catch (SoapFault $e) {
    if (ENVIRONMENT === 'DEVELOPMENT') {
        var_dump(
            $soap_client->__getLastRequestHeaders()
            $soap_client->__getLastRequest(),
            $soap_client->__getLastResponseHeaders(),
            $soap_client->__getLastResponse()
        );
    }
    ...
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow