NuSOAP 웹 서비스 인터페이스

8062 단어 PHPwebserviceSOAP
NuSoap 은 PHP 환경 에서 WebService 프로 그래 밍 도구 로 WebService 를 만 들 거나 호출 하 는 데 사 용 됩 니 다.이것 은 PHP 언어 로 작 성 된 HTTP 를 통 해 SOAP 메 시 지 를 수신 하 는 일련의 PHP 클래스 입 니 다. NuSphere Corporation http://dietrich.ganx4.com/nusoap/ )개발. NuSOAP 의 장점 중 하 나 는 확장 라 이브 러 리 지원 이 필요 하지 않 습 니 다. 이러한 기능 으로 인해 NuSoap 은 서버 보안 설정 의 영향 을 받 지 않 고 모든 PHP 환경 에 사용 할 수 있 습 니 다.
1. 우선 http://sourceforge.net/projects/nusoap/ 에 가서 nusoap. zip 를 다운로드 합 니 다. 2. 서버: nusoap Service. php 파일 을 만 듭 니 다.
<?php
require_once ("lib/nusoap.php");
$server = new soap_server ();
//     
$server->soap_defencoding = 'UTF-8';
$server->decode_utf8 = false;
$server->xml_encoding = 'UTF-8';
$server->configureWSDL ('test'); //    wsdl   
/*
             
     : bool->"xsd:boolean"    string->"xsd:string"
int->"xsd:int"     float->"xsd:float"
*/
$server->register ( 'GetTestStr', //    
array ("name" => "xsd:string" ), //   ,    "xsd:string"
array ("return" => "xsd:string" ) ); //    ,    "xsd:string"
//isset          
$HTTP_RAW_POST_DATA = isset ( $HTTP_RAW_POST_DATA ) ? $HTTP_RAW_POST_DATA : '';
//service            
$server->service ( $HTTP_RAW_POST_DATA );
/**
 *       
 * @param $name
 */
function GetTestStr($name) {
	return "Hello,  { $name } !";
}
?>

  3. 클 라 이언 트: nusoapClient. php 파일 을 만 듭 니 다.
<?php
require_once ("lib/nusoap.php");
/*
   WSDL    WebService
   1 WSDL       (    wsdl     )
   2         WSDL
$client = new soapclient('http://localhost/nusoapService.php?wsdl',true);
*/
$client = new soapclient ( 'http://localhost/nusoapService.php' );
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'UTF-8';
//           
$paras = array ('name' => 'Bruce Lee' );
//          ,        
$result = $client->call ( 'GetTestStr', $paras );
//     ,     
if (! $err = $client->getError ()) {
	echo "     : ", $result;
} else {
	echo "     : ", $err;
}
?>

주: 결과 반환: Hello, {Bruce Lee}!
NuSOAP 를 통 해 WSDL 을 사용 하여 다음 과 같은 몇 가지 장점 을 제공 합 니 다. 모든 서비스 메타 파일, 예 를 들 어 네 임 스페이스 (namespaces), endpoint URL, 매개 변수 이름 (parameter names)등 은 WSDL 파일 에서 직접 얻 을 수 있 습 니 다. 그러면 클 라 이언 트 가 서버 의 변화 에 동적 으로 적응 할 수 있 습 니 다. 서버 에서 언제든지 얻 을 수 있 기 때문에 이 데 이 터 는 사용자 스 크 립 트 에서 하 드 인 코딩 을 사용 하지 않 아 도 됩 니 다. soap proxy 클래스 를 사용 할 수 있 습 니 다. 이러한 종 류 는 soapclient 클래스 에서 파생 되 어 WDSL 파일 에 자세 한 동작 에 대응 하 는 방법 을 추가 합 니 다.. 현재 사용 자 는 이 방법 을 통 해 직접 호출 할 수 있 습 니 다. soapclient 클래스 는 getProxy () 를 포함 합 니 다.방법 은 soap proxy 클래스 의 대상 을 되 돌려 줍 니 다. soap proxy 클래스 는 soapclient 클래스 에서 파생 되 어 WSDL 문서 에서 정의 하 는 동작 방법 을 추가 하고 endpoint 의 원 격 방법 을 사용 할 수 있 도록 합 니 다. 이것 은 soapclient 대상 이 WDSL 파일 로 초기 화 하 는 경우 에 만 적 용 됩 니 다. 사용자 가 사용 하기 쉽 고 성능 이 단점 입 니 다. PHP 에서 대상 을 만 드 는 것 은 소모 입 니 다.시의 -- 공리 적 목적 을 위 한 서비스 (and this functional serves no utilitarian purpose) 가 아 닙 니 다.
<?php
require_once ("lib/nusoap.php");
$client = new soapclient ( 'http://localhost/nusoapService.php?wsdl',true);
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'UTF-8';
//  proxy   
$proxy = $client->getProxy();  
//        
$sq = $proxy->GetTestStr('Bruce Lee'); 
if (!$err=$proxy->getError()) {  
print_r($sq);  
} else {  
print "ERROR: $err";  
}  
  
print 'REQUEST:<xmp>'.$p->request.'</xmp>';  
print 'RESPONSE:<xmp>'.str_replace('><', ">
<", $p->response).'</xmp>'; ?>

네 번 째 단계: server 엔 드 파일 페이지 실행:http://localhost/nusoapService . php 에서 생 성 된 wdl 파일 NuSOAP webservice接口
방법 이름 을 누 르 십시오. 이렇게 해서 우 리 는 service 에 몇 줄 의 코드 를 추가 하면 NuSOAP 를 사용 하여 service 에 시각 화 된 문 서 를 제공 합 니 다. 그러나 이것 은 우리 가 할 수 있 는 모든 것 이 아 닙 니 다.
NuSOAP webservice接口
서비스 에 서 는 NuSOAP 를 사용 하여 WSDL 호출 을 추가 합 니 다. 서비스 에 WSDL 을 생 성 할 수 있 고 다른 문서 도 생 성 할 수 있 습 니 다. 이와 달리 클 라 이언 트 에 서 는 우리 가 할 수 있 는 일이 적 습 니 다. 적어도 이 간단 한 예 에 서 는 이 클 라 이언 트 가 WSDL 을 사용 하지 않 은 클 라 이언 트 와 다 를 것 이 없습니다. 유일한 차이 점 은 풀이 입 니 다.soapclent class 를 분석 하 는 것 은 이전에 service endpoint 를 통 해 이 루어 진 것 이 아니 라 WSDL 의 URL 을 제공 함으로써 이 루어 진 것 입 니 다.
 
NuSoap 에서 WebService 를 호출 하여 난동 을 일 으 키 는 해결 방법:
$client->soap_defencoding = 'utf-8';  
$client->decode_utf8 = false;  
$client->xml_encoding = 'utf-8';  

파일 코드 에 출력 이 있 으 면 안 됩 니 다. 그렇지 않 으 면 호출 할 때 다음 과 같은 오류 가 발생 합 니 다.  XML error parsing SOAP payload on line x (줄 번호): 예 약 된 XML 이름
 
nusoap 으로 웹 서 비 스 를 실현 합 니 다. phop 의 SOAP 확장 을 열지 마 십시오. nusoap 의 SoapClient 류 와 phop 5 내 장 된 SOAP 류 가 충돌 하기 때 문 입 니 다.
해결 방안
1. php. ini 를 수정 하여 php 5 에 내 장 된 soap 확장 을 불 러 오지 않 습 니 다 (windows 아래 pp. soap. dll).
2. nusoap 의 SoapClient 클래스 의 이름 을 바 꾸 는 것 도 있 습 니 다.
 
인증
<?php
header('content-type: text/xml; charset=UTF-8');
require_once('nusoap.php');
$params = array('AuthenticationHeader' => array(
    'Content-Type' => 'text/xml; charset=UTF-8',
    'SOAPAction' => 'YourFunstion',
)
);
$client = new nusoap_client('http://www.yourdomain.com/service.asmx?wsdl', true, '', '', '', '');
$client->setHeaders('  
<tns:AuthenticationHeader xmlns:tns="http://tempuri.org/webservice">
  <tns:UserName>username</tns:UserName> 
  <tns:Password>password</tns:Password>   
 </tns:AuthenticationHeader>
');
$err = $client->getError();
if ($err) {
    echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}
$result = $client->call('YourFunction', $params, '', '', false, true);
if ($client->fault) {
    echo '<h2>Fault</h2><pre>';
    print_r($result);
    echo '</pre>';
} else {
    $err = $client->getError();
    if ($err) {
        echo '<h2>Error</h2><pre>' . $err . '</pre>';
    } else {
        echo '<h2>Result</h2><pre>';
//print_r($result);
        echo '</pre>';
    }
}
echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
?>

 

좋은 웹페이지 즐겨찾기