ホームページ >バックエンド開発 >PHPチュートリアル >pear::soap を使用して Web サービスを作成する手順

pear::soap を使用して Web サービスを作成する手順

WBOY
WBOYオリジナル
2016-07-25 09:11:061168ブラウズ
  1. class FruitQuoteService
  2. {
  3. public $__dispatch_map = array();
  4. public $__typedef = array();
  5. public function 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. public function getQuote($category)
  20. {
  21. switch ($category)
  22. {
  23. case 'apple':
  24. $quote = 10;
  25. Break;
  26. case 'orange':
  27. $quote = 12;
  28. Break ;
  29. case 'banana':
  30. $quote = 20;
  31. ブレーク;
  32. デフォルト:
  33. $quote = 0;
  34. ブレーク;
  35. }
  36. return $quote;
  37. }//関数終了
  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. }//end class
  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("Content-type: text/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文档をご覧ください。

DISCO:Web サービスの配信と公開に使用されるマイクロスクリプトで、Web サービスの指定された URL から取得する HTTP GET 機構を定義します

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

  1. require_once('SOAP/Client.php');
  2. //この名前空間间はserver.phpと一致する必要があります
  3. $options = array('namespace' => 'http ://www.xxx.com',
  4. 'トレース' => // 1 であることを示すため、__get_wire を介して SOAP メッセージを取得できます。
  5. $response = $client->call("getFruit", $params, $options);
  6. //print_r($client->gt;__get_wire()); //ソープメッセージ
  7. if (PEAR::isError($response)) {
  8. echo 'Error: ' . $response->getMessage() 。 "
    n";
  9. } else {
  10. print_r($response) . "n";
  11. }
  12. $params = array("name" => "orange");
  13. $response = $client->call("getQuote", $params, $options);
  14. if (PEAR: :isError($response)) {
  15. echo 'エラー: ' 。 $response->getMessage() 。 "
    n";
  16. } else {
  17. echo $response . "nn";
  18. }
  19. exit;
  20. ?>
  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 'エラー: ' 。 $response->getMessage() 。 "
    n";
  15. } else {
  16. echo $response . "nn";
  17. }
  18. $response = $client->getFruit();
  19. if (PEAR::isError($response)) {
  20. echo 'エラー: ' . $response->getMessage() 。 "
    n";
  21. } else {
  22. print_r($response) . "n";
  23. }
  24. exit;
  25. ?>
复制代


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。