PHP에서는 php.ini 파일에서 php_soap.dll 확장자를 활성화한 후 SOAP를 지원할 수 있습니다.
비누 확장 라이브러리에는 크게 세 가지 유형의 객체가 있습니다.
1. SoapServer
는 PHP 서버측 페이지 생성 시 호출할 수 있는 함수를 정의하고 응답 데이터를 반환하는 데 사용됩니다. SoapServer 객체를 생성하기 위한 구문 형식은 다음과 같습니다.
$soap = new SoapServer($wsdl, $array);
그 중 $wsdl은 shoep에서 사용하는 wsdl 파일이고, wsdl은 표준 형식입니다. Web Service를 설명하기 위한 것입니다. $wsdl이 null로 설정되어 있으면 wsdl 모드를 사용하지 않는다는 의미입니다. $array는 SoapServer의 속성정보로 배열입니다.
SoapServer 객체의 addFunction 메소드는 클라이언트가 어떤 함수를 호출할 수 있는지 선언하는 데 사용됩니다. 구문 형식은 다음과 같습니다.
$soap->addFunction($function_name);
그 중, $soap은 SoapServer 개체입니다. $function_name은 호출해야 하는 함수의 이름입니다.
SoapServer 객체의 핸들 메소드는 사용자 입력을 처리하고 해당 함수를 호출하는 데 사용되며, 최종적으로 처리 결과를 클라이언트에 반환합니다. 구문 형식은 다음과 같습니다.
$soap->handle([$soap_request]);
이 중 $soap은 SoapServer 객체이고 $soap_request는 사용자의 요청 정보를 나타내는 데 사용되는 선택적 매개 변수입니다. . $soap_request를 지정하지 않으면 서버가 사용자의 모든 요청을 수락한다는 의미입니다.
2. SoapCliet
은 원격 서버의 SoapServer 페이지를 호출하고 해당 기능에 대한 호출을 구현하는 데 사용됩니다. SoapClient 객체를 생성하기 위한 구문 형식은 다음과 같습니다.
$soap = new SoapClient($wsdl,$array);
이 중 $wsdl 및 $array 매개변수는 SoapServer와 동일합니다.
SoapClient 객체를 생성한 후 서버 페이지에서 함수를 호출하는 것은 SoapClient 메서드를 호출하는 것과 동일합니다. 생성 구문은 다음과 같습니다.
$soap->user_function($params);
그 중 , $soap은 SoapClient 개체이고 user_function은 서버 측에서 호출되는 함수이며 $params는 함수에 전달되는 매개 변수입니다.
3. SoapFault
SoapFault는 비누 접근 중 발생할 수 있는 오류를 생성하는 데 사용됩니다. SoapFault 객체를 생성하기 위한 구문 형식은 다음과 같습니다.
$fault = new SoapFault($faultcode,$faultstring);
이 중 $faultcode는 사용자 정의 오류 코드이고, $faultstring은 사용자 -정의된 오류 메시지. SoapFault 객체는 서버 측 페이지에 오류가 발생하거나 사용자가 SoapFault 객체를 생성하면 자동으로 생성됩니다. Soap 액세스 중에 발생하는 오류의 경우 클라이언트는 SoapFalut 개체를 캡처하여 해당 오류 정보를 얻을 수 있습니다.
클라이언트에서 SoapFault 개체를 캡처한 후 다음 코드를 통해 오류 코드 및 오류 정보를 얻을 수 있습니다.
$fault->faultcode;//Error code
$fault->faultstring; //오류 정보
그 중 $fault는 앞서 생성한 SoapFault 객체입니다.
SoapServer와 SoapClient는 모두 두 개의 매개변수를 받습니다. 두 번째 매개변수는 여러 옵션을 지원하는 Option입니다.
uri: 네임스페이스, 클라이언트와 서버에 필요
위치. 클라이언트가 서버 프로그램의 액세스 주소를 지정하는 데 사용되며, 이는 이 예에서 두 번째 코드의 프로그램 주소입니다.
trace: 클라이언트에서 사용됩니다. true인 경우 디버깅을 위해 서버와 클라이언트 간의 통신 내용을 얻을 수 있습니다.
Soapserver.php
Java 코드
//먼저 SoapServer 객체 인스턴스를 생성한 후 원하는 기능을 등록하세요. 노출,
//승인된 비누 요청을 처리하는 데 마지막 핸들()이 사용됩니다.
error_reporting(7) //공식적으로 출시되면 0으로 설정합니다.
date_default_timezone_set (' PRC'); //시간대 설정
/* 클라이언트 호출을 위한 여러 기능 */
function reverse($str)
{
$retval = '';
if (strlen($str) < 1) {
return new SoapFault ('클라이언트', '', '잘못된 문자열'); >
} for ($i = 1; $i <= strlen($str); $i++) { $retval .= $str [(strlen($ str) - $i)]; } return $retval; function add2numbers($num1, $num2) { if (trim($num1) != intval($num1)) {새 SoapFault('클라이언트', '', '첫 번째 숫자가 유효하지 않음')를 반환합니다.
}
if (trim($num2) != intval($num2)) {
새 SoapFault 반환('클라이언트','','두 번째 숫자 유효하지 않습니다');
}
반품($num1 + $num2);
}
함수 gettime()
{
$time = date('Y-m-d H:i:s', 시간());
$time을 반환합니다.
}
$soap = new SoapServer (null, array('uri' => "httr://test-rui"));
$soap->addFunction('reverse');
$soap->addFunction('add2numbers');
$soap->addFunction('gettime');
$soap->addFunction(SOAP_FUNCTIONS_ALL);
$soap->handle();
?>
SoapClient.php
Java 代码
error_reporting(7);
시도해 보세요 {
$client = 새 SoapClient (null, array('location' => "http://www.yiigo.com/Soapserver.php", 'uri' = > 'http://test-uri'));
$str = "이 문자열은 반전됩니다.";
$reversed = $client->reverse($str);
echo는 "'$str'을 반대로 하면 '$reversed'가 됩니다.";
$n1 = 20;
$n2 = 33;
$sum = $client->add2numbers($n1, $n2);
에코 "
";
에코 "$n1 + $n2를 시도하면 $sum을 얻게 됩니다.";
에코 "
";
echo "리모예 시스템 시간은 다음과 같습니다." . $클라이언트->gettime();
} catch (SoapFault $fault) {
에코 "Fault! code:" . $fault->faultcode . " 끈:" . $fault->faultstring;
}
?>
'This string will be reversed'를 반대로 하면 'desrever eb lliw gnirts sihT'를 얻게 됩니다.
20 + 33을 시도하면 53을 얻게 됩니다.
remoye 시스템 시간은 다음과 같습니다. 2012-05-28 16:14:29
통로SoapHeader实现身份认证
Java 代码
class 서버
{
공용 함수 인증($a)
{
if ($a != '123456789') {
새 SoapFault('서버', '사용户身份认证信息错误')를 발생시킵니다.
}
}
공개 함수 say()
{
return '안녕'; } } $srv = new SoapServer(null, array('uri' =>'http://localhost/namespace ')); $srv->setClass('서버'); $srv->handle(); 客户端Java 代码 $cli = new SoapClient(null,array('uri' => 'http://localhost/namespace/',
'위치' => 'http://localhost/server.php',
'trace' => true));
//auth는 서버에서 처리되는 함수입니다. 12345689는 매개변수입니다.
$h = new SoapHeader(' http://localhost/namespace/',
'auth', '123456789', false, SOAP_ACTOR_NEXT)
$cli->__setSoapHeaders(array($h) );
try {
echo $cli->say()
} catch(예외 $e) {
echo $e- >getMessage ();
}
server.php의 서버 클래스에는 헤더 이름에 해당하는 "auth" 메소드가 있습니다. auth 메소드는 SoapHeader의 데이터입니다. SoapServer는 이 요청을 받으면 먼저 auth 메소드를 호출하고 "123456789"를 메소드에 매개변수로 전달합니다. mustUnderstand 매개변수가 false인 경우 auth 메서드가 없어도 say 메서드가 호출되지만, true인 경우 auth 메서드가 없으면 Soapfault를 반환하여 헤더가 처리되지 않았음을 알립니다. . 행위자 매개변수는 헤더를 처리해야 하는 역할을 지정합니다. 여기서는 이를 완전히 이해하지 못하므로 말하기가 어렵습니다.
Java 코드
$file = $this->getSoapWSDL();
$client = new SoapClient($file);//url을 통해 액세스할 수 있습니다. browser ,
$param = array('userID' => 'test', 'merchantID' => 'test');
$returnSt = $를 호출하여 해결할 수 없습니다. client-> ;checkUser($param);
print_r($returnSt->checkUserResult)
공용 함수 getSoapWSDL()
{ // 주기적으로 URL 파일을 로컬에 저장합니다.
$file = Mage::getBaseDir() . DS 'shengda' . if (time() > filemtime($file) + 7 * 86400) {
$url = "http://jf.sdo.com/ExchangeScore/ExchangeService.asmx?WSDL"
include_once(BP . DS . "lib/Snoopy.class.php")
$snoopy = 새 스누피
$snoopy->fetch($url); / 모든 콘텐츠 가져오기
$snoopy->read_timeout = 4;
$wsdl = $snoopy->results
if ($snoopy-& gt;status; == '200' && !$snoopy->timed_out) {
if (!is_dir(dirname($file))) {
mkdir(dirname($file)); 🎜>
$파일 켜기 }