亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php soap 調用webservice應用測試

2024-05-04 21:48:05
字體:
來源:轉載
供稿:網友

SoapClient,php5自帶的,當然,也可以使用nusoap.php這個純php寫的類,該類代碼行數為7K多行,效率上肯定不如SoapClient.

一、尋找WebService來源

WebService可以自己編寫,但是也可以從網絡上去尋找現成的,我用的是www.xmethods.net里的US Zip Validator,它的WSDL文件位置在:http://www.webservicemart.com/uszip.asmx?WSDL,它的作用是根據輸入的ZIP代碼,返回該代碼對應的美國地名,州名,經緯度等.

二、創建SoapClient

第二步就是創建SoapClient,并調用WebService中的方法,并獲得返回值,PHP代碼如下:

  1. $objSoapClient = new SoapClient("http://www.webservicemart.com/uszip.asmx?WSDL"); 
  2.  
  3. $param=array("ZipCode"=>$zip); 
  4. $out=$objSoapClient->ValidateZip($param); 
  5. $data=$out->ValidateZipResult; 

SoapClient的創建有好多方法,我們用的是最標準的(也是最簡單的)WSDL方法,由于查詢ZIP的方法肯定需要一個參數,所以我們必須創建一個數組,用“參數名=>取值”的方式進行賦值.

也許讀者會對這個數組的創建有一定的興趣,比如,我們怎么知道“參數名”應該是“ZipCode”而不是別的什么呢?為什么沒有更多的參數了,而只有一個?OK,這個問題我們稍后解釋,因為這牽涉到WSDL的解讀.

創建好參數后,同樣的,我們調用SoapClient的方法ValidateZip,并傳遞參數進去,對于返回的結果,我們用$data變量取出我們真正感興趣的東西,同樣的,這里也存在方法名稱是如何確定的問題,我們也在稍后介紹.

如果你也使用PhpEd進行PHP的開發和調試,那么從下面的調試窗口截圖中,你可以很清除的看到$data和$out之間的關系.

三、解析數據

上面得到的$data中的數據是標準的XML結構的數據,所以在PHP中,我們需要創建一個XML解析器來對這個數據進行分析,代碼如下:

  1. $ParsedData=array(); 
  2.  
  3. function startElement($parser$name$attribs
  4.     global $ParsedData
  5.     echo "<<font color="#0000cc">$name</font>"
  6.     if (count($attribs)) { 
  7.         foreach ($attribs as $k => $v
  8.         { 
  9.             $ParsedData[$k]=$v
  10.  
  11.             echo " <font color="#009900">$k</font>="<font color="#990000">$v</font>""
  12.         } 
  13.     } 
  14.     echo ">"
  15.  
  16. function endElement($parser$name
  17.     echo "</<font color="#0000cc">$name</font>>"
  18.  
  19. $xml_parser= xml_parser_create(); 
  20. xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1); 
  21. xml_set_element_handler($xml_parser"startElement""endElement"); 
  22.  
  23. echo "<pre>"
  24. if (!xml_parse($xml_parser$data)) { 
  25.     die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), 
  26.          xml_get_current_line_number($xml_parser))); 
  27. echo "</pre>"
  28.  
  29. xml_parser_free($xml_parser); 

這里的詳細操作需要參考PHP函數手冊中關于XML函數的那一章,這里不再贅述,一旦數據被解析成功,我們就可以進行進一步的處理,例如下面的代碼就遍歷該數組,然后輸出,代碼如下:

  1. foreach ($ParsedData as $k=>$v
  2.     echo $k."=>".$v."<br />"

四、解讀WSDL

上面我們留下了兩個疑問:如何知道一個WebService提供的方法,以及它的參數?所有的答案都在WSDL描述中,對于本文使用的WSDL來說,我們從中截取一段來分析,由于我們是通過Soap進行調用,所以我對完整的WSDL進行了節選,只列出關于Soap調用的部分(反相顯示的部分)

首先我們注意到<wsdl:message name=”ValidateZipSoapIn”>這一節,它指出了在Soap調用中,入口參數要參照ValidateZip,于是我們接著轉到文件上面一點的地方,看ValidateZip方法的定義,代碼如下:

  1. <s:element name="ValidateZip"> 
  2.     <s:complexType> 
  3.         <s:sequence> 
  4.             <s:element minOccurs="0" maxOccurs="1" name="ZipCode" type="s:string"/> 
  5.         </s:sequence> 
  6.     </s:complexType> 
  7. </s:element> 

很明顯,ValidateZip要求一個參數,名稱為ZipCode,類型為string.

同樣,我們再看<wsdl:message name=”ValidateZipSoapOut”>這一節,它指出Soap調用的出口參數是ValidateZipResponse,而后者的傳出參數名稱是ValidateZipResult。于是,我們就解釋了前兩節提出的問題:

•怎樣找到要調用的函數?

•怎樣知道函數的參數、類型?

•怎樣得到函數的返回值?

例2,這里我們使用php5自帶的類來操作

我的結構如下:在 webservice 文件夾下有如下三個文件:Personinfo.php,SoapClient.php,SoapServer.php,具體作用可以參照代碼中的注釋,代碼如下:

  1. <?php 
  2. /** 
  3. * Personinfo.php 
  4. * 此類包含了需要調用的方法 
  5. * @author itbdw 
  6. * 
  7. */ 
  8. class Personinfo { 
  9.  
  10. /** 
  11. * 返回姓名 
  12. * @return unknown_type 
  13. */ 
  14. public function getName() { 
  15. return ‘IT不倒翁’; 
  16.  
  17. /** 
  18. * 返回特定格式的日期 
  19. * @return unknown_type 
  20. */ 
  21. public function getTime() { 
  22. return date(‘Y-m-d’); 
  23.  
  24.  
  25. <?php 
  26. /** 
  27. * SoapServer.php 
  28. * webservice 服務器端實例 
  29. */ 
  30. //包含提供服務的類 
  31. require_once ‘Personinfo.php’; 
  32.  
  33. //根據實際情況修改下行內容 
  34. $s = new SoapServer(null, array("location" => "http://zby/webservice/SoapServer.php""uri" => "SoapServer.php")); 
  35.  
  36. $s->setClass("PersonInfo"); 
  37.  
  38. $s->handle(); 
  39. [/php] 
  40. [php] 
  41. <?php 
  42. <?php 
  43. /** 
  44. * SoapClient.php 
  45. * webservice 客戶端實例 
  46. */ 
  47.  
  48. header(‘Content-Type:text/html;charset=utf-8′); 
  49.  
  50. try { 
  51.  
  52. //根據實際情況修改下行內容 
  53. $soap = new SoapClient(null, array(‘location’=>’http://zby/webservice/SoapServer.php’, ‘uri’=>’SoapServer.php’)); 
  54.  
  55. echo $soap->getName(); 
  56. echo $soap->getTime(); 
  57.  
  58. } catch(SoapFault $e) { 
  59. echo $e->getMessage(); 
  60. } catch(Exception $e) { 
  61. echo $e->getMessage(); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久女女女女999久久| 日韩av网站电影| 欧美大片在线看| 国产精品白丝jk喷水视频一区| 成人网欧美在线视频| 8050国产精品久久久久久| 国产精品视频区1| 久久精品国产亚洲精品| 色婷婷亚洲mv天堂mv在影片| 91久久国产精品91久久性色| 北条麻妃一区二区三区中文字幕| 久久久精品久久| 久久久久久久91| 亚洲欧美国产视频| 欧美风情在线观看| 亚洲精品456在线播放狼人| 欧美亚洲激情在线| 色综合影院在线| 精品中文字幕久久久久久| 日韩免费在线免费观看| 久久精品在线视频| 国语自产精品视频在线看抢先版图片| 色诱女教师一区二区三区| 亚洲激情免费观看| 国产精品日韩久久久久| 国模精品系列视频| 国产成人av在线| 热re91久久精品国99热蜜臀| 久久精品视频在线播放| 国产日韩在线播放| 亚洲最新中文字幕| 国产一区二区三区高清在线观看| 亚洲精品国产品国语在线| 国产精品第8页| 亚洲一区二区中文| 欧美性受xxxx黑人猛交| 中文字幕成人精品久久不卡| 日韩美女写真福利在线观看| 91国产一区在线| 欧亚精品在线观看| 国产亚洲激情视频在线| 97人人爽人人喊人人模波多| 欧美一级高清免费播放| 91人人爽人人爽人人精88v| 97色在线观看免费视频| 欧美视频第一页| 午夜精品久久久久久99热软件| 国产亚洲视频在线| 日韩欧美精品网站| 91国产一区在线| 欧美在线www| 中文字幕免费精品一区高清| 国产精品高潮在线| 91亚洲国产精品| 黑人巨大精品欧美一区免费视频| 亚洲理论在线a中文字幕| 影音先锋欧美精品| 欧美视频免费在线观看| 亚洲第一视频网站| 国产精品劲爆视频| 日本精品久久中文字幕佐佐木| 欧美激情a∨在线视频播放| 91久久久久久久一区二区| 97精品免费视频| 欧美日韩免费看| 97精品国产97久久久久久春色| 亚洲精品短视频| 亚洲欧洲一区二区三区久久| 深夜福利一区二区| 亚洲激情小视频| 青草青草久热精品视频在线观看| 韩日欧美一区二区| 日韩精品在线免费观看视频| 亚洲日本中文字幕免费在线不卡| 国产91成人在在线播放| 91久久精品视频| 97国产真实伦对白精彩视频8| 亚洲一级片在线看| 亚洲欧美日韩天堂一区二区| 欧美www视频在线观看| 久热国产精品视频| 久久在线免费视频| 久久综合九色九九| 欧美性精品220| 91av国产在线| 最新国产成人av网站网址麻豆| 久久精品视频在线| 久久久综合免费视频| 欧美午夜宅男影院在线观看| 国产欧美精品va在线观看| 亚洲视频在线免费看| 成人网中文字幕| 日韩免费观看高清| 在线视频欧美性高潮| 亚洲国产精品国自产拍av秋霞| 日本高清不卡的在线| 国产精品视频网址| 日韩欧美有码在线| 亚洲国产精品美女| 精品国偷自产在线视频| 久久天天躁狠狠躁夜夜躁2014| 国产精品精品久久久久久| 色综合亚洲精品激情狠狠| 欧美高清视频在线观看| 欧美精品日韩三级| 久久国产精品久久久| 亚洲摸下面视频| 色噜噜久久综合伊人一本| 欧美日韩久久久久| 在线一区二区日韩| 日本韩国欧美精品大片卡二| 日韩激情av在线免费观看| 96国产粉嫩美女| 久久久久久这里只有精品| 亚洲成人a**站| 国产精品久久久久久久久影视| 97热在线精品视频在线观看| 97视频免费观看| 国产成人av网址| 粉嫩av一区二区三区免费野| 97色在线观看| 北条麻妃99精品青青久久| 亚洲欧洲av一区二区| 4444欧美成人kkkk| 国产成人在线视频| 欧美一区二区.| 成人激情在线播放| 日韩欧美国产黄色| 国产精品久久二区| 不卡在线观看电视剧完整版| 欧洲s码亚洲m码精品一区| 欧美成人精品在线视频| 日本欧美国产在线| 国产精品嫩草影院久久久| 狠狠躁夜夜躁人人爽超碰91| 亚洲欧洲日产国产网站| 91情侣偷在线精品国产| 日韩小视频在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 成人a在线视频| 97精品在线视频| 国产精品电影网站| 亚洲高清一区二| 国产精品久久久av久久久| 亚洲成人激情图| 夜夜嗨av一区二区三区免费区| 久久久久久噜噜噜久久久精品| 国产视频自拍一区| 亚洲欧美日韩精品久久奇米色影视| 国模gogo一区二区大胆私拍| 日韩免费视频在线观看| 日韩中文字幕网站| 黄色成人在线免费| 欧美黑人一级爽快片淫片高清| 91在线观看免费观看| 91精品国产一区| 国产盗摄xxxx视频xxx69| 国产精品va在线播放| 欧美性猛交xxxx免费看| 日韩理论片久久| 秋霞成人午夜鲁丝一区二区三区| 亚洲跨种族黑人xxx| 欧美夜福利tv在线| 午夜精品国产精品大乳美女|