> 백엔드 개발 > PHP 튜토리얼 > pear::soap을 사용하여 웹 서비스를 만드는 단계

pear::soap을 사용하여 웹 서비스를 만드는 단계

WBOY
풀어 주다: 2016-07-25 09:11:06
원래의
1172명이 탐색했습니다.
  1. class FruitQuoteService
  2. {
  3. public $__dispatch_map = array();
  4. public $__typedef = array();
  5. 공개 함수 FruitQuoteService()
  6. {
  7. $this->__dispatch_map['getQuote'] = array(
  8. "in" => array("category" => "string") ,
  9. "out" => array("quote" => "int")
  10. );
  11. $this->__dispatch_map['getFruit'] = array(
  12. "in" => array(),
  13. "out" => array("fruitSummary" => "{urn:FruitQuoteService}fruitStruct")
  14. );
  15. $this->__typedef ['fruitStruct'] = array(
  16. 'category'=>'string', 'amount' => 'int'
  17. );
  18. }
  19. 공개 함수 getQuote($category)
  20. {
  21. 스위치($category)
  22. {
  23. 케이스 'apple':
  24. $quote = 10;
  25. break;
  26. case 'orange':
  27. $quote = 12;
  28. break;
  29. case 'banana':
  30. $quote = 20;
  31. break;
  32. 기본값 :
  33. $quote = 0;
  34. break;
  35. }
  36. return $quote;
  37. }//end funtion
  38. public function getFruit()
  39. {
  40. $list = array(
  41. array("apple", 100),
  42. array("orange", 500),
  43. array("banana", 260)
  44. );
  45. return $list;
  46. }//기능 종료
  47. }//수업 종료
  48. ?>
复代码

第二步:创建server.php 这个程序将接收并处理客户端的请求

  1. require_once("FruitQuoteService.php");
  2. require_once("SOAP/Server.php");
  3. $fruitQuote = new FruitQuoteService();
  4. $server = new Soap_Server();
  5. $server->addObjectMap($fruitQuote, "http://www.xxx.com");
  6. if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']=='POST')
  7. {
  8. $server->service($GLOBALS['HTTP_RAW_POST_DATA']);
  9. } else
  10. {
  11. require_once 'SOAP/Disco.php';
  12. $disco = new SOAP_DISCO_Server($server,'FruitQuoteService');
  13. header("콘텐츠 유형: 텍스트/xml" );
  14. if (isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'],'wsdl')==0) {
  15. echo $disco->getWSDL();
  16. } else {
  17. echo $disco->getDISCO();
  18. }
  19. }
  20. exit;
  21. ?>
复代码

现在可以通过http://www.shangyong.com/ws/server.php?wsdl 查看wsdl文档。

第三步:创建web服务客户端代码

    require_once('SOAP/Client.php');
  1. //这个name称空间必须和server.php중정义的一致
  2. $options = array('namespace' => 'http://www.xxx.com',
  3. 'trace' => 1); //为1表示可以通过__get_wire获取soap消息,默认是0
  4. $client = new SOAP_client("http://www.shangyong.com/ws/server.php");
  5. $params = array();
  6. $response = $client->call("getFruit", $params, $options);
  7. //print_r($client->__get_wire()); //출제 비누消息
  8. if (PEAR::isError($response)) {
  9. echo 'Error: ' . $응답->getMessage() . "
    n";
  10. } else {
  11. print_r($response) . "n";
  12. }
  13. $params = array("name" => "orange");
  14. $response = $client->call("getQuote", $params, $options) ;
  15. if (PEAR::isError($response)) {
  16. echo '오류: ' . $응답->getMessage() . "
    n";
  17. } else {
  18. echo $response . "nn";
  19. }
  20. exit;
  21. ?>
复主代码

客户端代码2

  1. require_once('SOAP/Client.php');
  2. /**
  3. * 네임스페이스, UEL, 매개변수 이름 등 모든 서비스 콘텐츠는 wsdl 파일에서 얻을 수 있습니다
  4. */
  5. $ wsdl = new SOAP_WSDL("http://www.shangyong.com/ws/server.php?wsdl");
  6. /**
  7. * wsdl에서 프록시 객체를 생성합니다. 이 객체에는 wsdl 문서에 정의된 모든 작업 방법이 포함되어 있습니다.
  8. * 프록시 객체를 통해 함수를 직접 호출할 수 있습니다
  9. * 장점: 사용자가 사용하기 쉽습니다
  10. */
  11. $client = $wsdl->getProxy( );
  12. $response = $client->getQuote("apple");
  13. if (PEAR::isError($response)) {
  14. echo '오류: ' . $응답->getMessage() . "
    n";
  15. } else {
  16. echo $response . "nn";
  17. }
  18. $response = $client->getFruit();
  19. if (PEAR::isError($response)) {
  20. echo '오류: ' . $응답->getMessage() . "
    n";
  21. } else {
  22. print_r($response) . "n";
  23. }
  24. exit;
  25. ?>
复system代码


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿