PHP
SOAP 클라이언트
수색…
통사론
- __getFunctions () // 서비스 용 함수 배열을 반환합니다 (WSDL 모드에만 해당).
- __getTypes () // 서비스 유형 배열을 반환합니다 (WSDL 모드에만 해당).
- __getLastRequest () // 마지막 요청에서 XML을 반환합니다 (
trace
옵션 필요). - __getLastRequestHeaders () // 마지막 요청의 헤더를 반환합니다 (
trace
옵션 필요). - __getLastResponse () // 마지막 응답에서 XML을 반환합니다 (
trace
옵션 필요). - __getLastResponseHeaders () // 마지막 응답의 헤더를 반환합니다 (
trace
옵션 필요).
매개 변수
매개 변수 | 세부 |
---|---|
$ wsdl | 비 WSDL 모드를 사용하는 경우 WSDL의 URI 또는 NULL |
$ options | SoapClient에 대한 옵션 배열입니다. 비 WSDL 모드는 location 와 uri 를 설정해야하며 다른 모든 옵션은 선택 사항입니다. 가능한 값은 아래 표를 참조하십시오. |
비고
SoapClient
클래스에는 __call
메서드가 있습니다. 이것은 직접 호출 할 수 없습니다 . 대신 이렇게하면 다음 작업을 수행 할 수 있습니다.
$soap->requestInfo(['a', 'b', 'c']);
그러면 requestInfo
SOAP 메소드가 호출 requestInfo
.
가능한 $options
값의 테이블 ( 키 / 값 쌍의 배열 ) :
선택권 | 세부 |
---|---|
위치 | SOAP 서버의 URL. 비 WSDL 모드에서 필요 합니다. WSDL 모드에서 URL을 재정의하는 데 사용할 수 있습니다. |
우 리 | SOAP 서비스의 대상 네임 스페이스. 비 WSDL 모드에서 필요 합니다. |
스타일 | 가능한 값은 SOAP_RPC 또는 SOAP_DOCUMENT 입니다. 비 WSDL 모드에서만 유효합니다. |
용도 | 가능한 값은 SOAP_ENCODED 또는 SOAP_LITERAL 입니다. 비 WSDL 모드에서만 유효합니다. |
soap_version | 가능한 값은 SOAP_1_1 ( 기본값 ) 또는 SOAP_1_2 입니다. |
입증 | HTTP 인증을 사용합니다. 가능한 값은 SOAP_AUTHENTICATION_BASIC ( 기본값 ) 또는 SOAP_AUTHENTICATION_DIGEST 입니다. |
로그인 | HTTP 인증의 사용자 이름 |
암호 | HTTP 인증을위한 비밀번호 |
proxy_host | 프록시 서버의 URL |
proxy_port | 프록시 서버 포트 |
proxy_login | 프록시 사용자 이름 |
proxy_password | 프록시 용 비밀번호 |
local_cert | HTTPS 클라이언트 인증서 경로 (인증 용) |
암호문 | HTTPS 클라이언트 인증서 용 암호 문구 |
압축 | 압축 요청 / 응답. 값은 SOAP_COMPRESSION_GZIP 또는 SOAP_COMPRESSION_DEFLATE 가있는 SOAP_COMPRESSION_ACCEPT 의 비트 마스크입니다. 예 : SOAP_COMPRESSION_ACCEPT \| SOAP_COMPRESSION_GZIP . |
부호화 | 내부 문자 인코딩 (TODO : 가능한 값) |
자취 | Boolean , 기본값은 FALSE 입니다. 요청을 추적하여 오류를 다시 추적 할 수 있습니다. __getLastRequest() , __getLastRequestHeaders() , __getLastResponse() 및 __getLastResponseHeaders() 사용을 활성화합니다. |
클래스 맵 | WSDL 유형을 PHP 클래스에 매핑합니다. 값은 WSDL 유형을 키로, PHP 클래스 이름을 값으로 갖는 배열이어야합니다. |
예외 | 부울 값 SOAP 오류 예외 ( 'SoapFault'유형). |
접속 시간 초과 | SOAP 서비스에 대한 연결 시간 제한 (초). |
typemap | 형식 매핑의 배열입니다. 배열은 type_name , type_ns (네임 스페이스 URI), from_xml (하나의 문자열 매개 변수를 허용하는 콜백) 및 to_xml (하나의 객체 매개 변수를 수락하는 콜백)과 같은 키 / 값 쌍이어야합니다. |
cache_wsdl | WSDL 파일을 어떻게 캐시해야 하는가? 가능한 값은 WSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY 또는 WSDL_CACHE_BOTH 입니다. |
사용자 에이전트 | User-Agent 헤더에서 사용할 문자열입니다. |
stream_context | 컨텍스트에 대한 리소스입니다. |
풍모 | SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLS 비트 마스크. |
살아 유지 | ( PHP 버전> = 5.4 전용 ) 부울 값. Connection: Keep-Alive 헤더 ( TRUE ) 또는 Connection: Close 헤더 ( FALSE )를 보냅니다. |
ssl_method | ( PHP 버전 5.5 이상 ) 사용할 SSL / TLS 버전. 가능한 값은 SOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 또는 SOAP_SSL_METHOD_SSLv23 입니다. |
32 비트 PHP의 문제 : 32 비트 PHP에서 32 비트보다 큰 숫자 문자열은
xs:long
으로 자동으로 캐스팅되어 32 비트 제한을 초과하여2147483647
캐스팅됩니다. 이 문제를 해결하려면 문자열을__soapCall()
에 전달하기 전에 부동 상태로 캐스트하십시오.
WSDL 모드
먼저 URL을 WSDL 파일에 전달하고 선택적으로 옵션 배열을 전달하여 새 SoapClient
객체를 만듭니다.
// 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
]);
그런 다음 $soap
객체를 사용하여 SOAP 메소드를 호출하십시오.
$result = $soap->requestData(['a', 'b', 'c']);
비 WSDL 모드
이는 WSDL 파일과 같이 NULL
을 전달하고 location
및 uri
옵션을 설정해야한다는 점을 제외하면 WSDL 모드와 유사합니다.
$soap = new SoapClient(NULL, [
'location' => 'https://example.com/soap/endpoint',
'uri' => 'namespace'
]);
클래스 맵
PHP에서 SOAP 클라이언트를 생성 할 때 구성 배열에 classmap
키를 설정할 수도 있습니다. 이 클래스 맵은 WSDL에 정의 된 유형을 기본 StdClass
대신 실제 클래스에 매핑 classmap
정의합니다. 그 이유는 일반 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,
]
]);
클래스 맵을 구성한 후에는 Address
또는 Book
유형을 리턴하는 특정 조작을 수행 할 때마다 SoapClient가 해당 클래스를 인스턴스화하고 필드로 데이터를 채우고 조작 호출에서이를 리턴합니다.
// 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;
SOAP 요청 및 응답 추적
때로는 SOAP 요청에서 보내고받은 것을 보려고합니다. 다음 메소드는 요청 및 응답에서 XML을 리턴합니다.
SoapClient::__getLastRequest()
SoapClient::__getLastRequestHeaders()
SoapClient::__getLastResponse()
SoapClient::__getLastResponseHeaders()
예를 들어 ENVIRONMENT
상수가 있다고 가정하고이 상수의 값이 DEVELOPMENT
로 설정된 경우 getAddress
호출하면 오류가 발생했을 때 모든 정보가 표시됩니다. 한 가지 해결책은 다음과 같습니다.
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()
);
}
...
}