国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php處理wsdl

TwIStOy / 2180人閱讀

摘要:前言近期一直在寫接口,在此之前接口數據傳輸都是使用或者格式進行傳輸或獲取的。理解描述文檔剛開始看這個文檔時是比較懵逼的,但用的擴展處理下就明顯很多了。

0x00 前言

近期一直在寫接口,在此之前接口數據傳輸都是使用json或者xml格式進行傳輸或獲取的。但這次和第三方聯調時,他們給予的是wsdl格式。瞬間秒變SB...

google到測試用code,測試調用第三方接口返回狀態200。以為沒啥事了可以就此結束了,跟近后才發現,不管怎么調用他們接口就是沒有正確的數據回顯。隨后他們那邊查看log后發現,壓根傳過去的參數他們沒有接收到,懵逼了一下午到晚上才解決了這個問題。覺得挺有意思的,所以記下來先。

0x01 wsdl是什么

綜合某度上所說,它就是一個xml格式的文檔,用于描述Web Server的定義,也就是說是一個Web Server方法及參數說明。

詳見:http://baike.baidu.com/link?url=R7x3FdekxbndR4SlzQLZE_2m1ebpt_SWt9IMjoHSErvLlbZ3-hwhR3ERrinXS1xZaDvkYFpxWnUchrk34_WkZq

當我們請求http://api.test.cn/xwebservices/testServer?wsdl",類似這種結尾是?wsdl的URL時,會一坨xml結構的數據給你。

沒錯,就是一坨...

接下來,怎么看懂它和它所說的方法才是關鍵,其它都是白搭。

0x02 理解描述文檔

剛開始看這個xml文檔時是比較懵逼的,但用PHP的擴展處理下就明顯很多了。

</>復制代碼

  1. __getFunctions());
  2. print "相關的數據結構
  3. ";
  4. print_r($client->__getTypes());
  5. print "
  6. ";

這里我們用到了SOAP擴展,這個擴展是PHP官方文案中出示操作處理WebServer服務擴展,最終我們也是通過它來實現參數傳輸。

在上面的圖片中可以理解出,這個接口提供了三個方法,分別是:

xxxxUserInfo

xxxxResumeNum

download**

相關的數據機構則是指方法中參數名稱,及參數類型。比如xxxxUserInfo方法,需要三個string類型的參數。分別對應in0in1in2

</>復制代碼

此處的傳參數key必然是in0,也就是一個無需數組,用戶自定義或雙方約定好的任意參數名稱。在開始寫接口方法的時候,我是根據接口文案中給予的參數說明如:err_msg(表示錯誤信息)err_code(表示錯誤編碼)date(傳輸的最終數據)進行傳輸的。后改為有序數組,挨個填入對應參數,此時key就是的02。可試過之后還是沒什么卵用,最終包著試一試的心態,嘗試一下將int0作為鍵名,對應的err_msg內容作為值。ok~,完美解決。

</>復制代碼

  1. Code:

</>復制代碼

  1. "false",
  2. "err_code" => "0",
  3. "date" => "此處是要傳輸的數據"
  4. ];
  5. public function setUp()
  6. {
  7. $client = new SoapClient("http://api.test.cn/xwebservices/testServer?wsdl");
  8. print "提供的方法
  9. ";
  10. print_r($client->__getFunctions());
  11. print "相關的數據結構
  12. ";
  13. print_r($client->__getTypes());
  14. print "
  15. ";
  16. }
  17. /**
  18. * xxxxUserInfo方法
  19. */
  20. public function testxxxxUserInfoData()
  21. {
  22. try {
  23. $ApiInfo = $this->infoArr;
  24. //set request param
  25. $parameter = array(
  26. "in0" => $ApiInfo["err_msg"],
  27. "in1" => $ApiInfo["err_code"],
  28. "in2" => $ApiInfo["date"]
  29. );
  30. $result = $this->getSoapClientHandler()->synchUserInfo($parameter);
  31. //調用結果返回異常
  32. if (!$result instanceof stdClass) {
  33. throw new Exception("調用synchUserInfo結果出現異常:" . json_encode($result));
  34. }
  35. //調用接口狀態碼,輸出對應錯誤詳情
  36. if ($result->out == "01") {
  37. throw new Exception("調用synchUserInfo=>error:" . $result->out . ",msg:接口數據異常");
  38. }
  39. $xml_parser = xml_parser_create();
  40. if (!xml_parse($xml_parser, $result->out, true)) {
  41. xml_parser_free($xml_parser);
  42. throw new Exception("調用synchUserInfo返回的不是一個xml結構體");
  43. }
  44. xml_parser_free($xml_parser);
  45. //XXE
  46. libxml_disable_entity_loader(true);
  47. $xml = simplexml_load_string($result->out, "SimpleXMLElement", LIBXML_NOCDATA);
  48. // 輸出參數
  49. var_dump($xml->data);
  50. echo " 成功".PHP_EOL;
  51. } catch (SoapFault $soapFault) {
  52. throw new Exception($soapFault->getMessage() . $this->getSoapClientHandler()->__getLastResponse());
  53. }
  54. }
  55. /**
  56. * @description getSoapClientHandler
  57. */
  58. public function getSoapClientHandler()
  59. {
  60. if (!self::$soapClientHandler) {
  61. self::$soapClientHandler = new SoapClient($this->getSynchApi());
  62. }
  63. return self::$soapClientHandler;
  64. }
  65. /**
  66. * @description getSynchApi
  67. */
  68. public function getSynchApi()
  69. {
  70. return $this->apiurl;
  71. }
  72. }
  73. ?>

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30486.html

相關文章

  • PHP SOAP 擴展的使用

    摘要:類也是一個只包含構造器的低級類,與和類相似。安裝擴展對于平臺,需要在中加入如下代碼上面的工作完成之后,還需要注意的是擴展在配置文件中有獨立的代碼片段這些配置項主要是用來指定處理文件時使用緩存的行為。支持與擴展類似的。 原文地址:PHP SOAP 擴展,本文在原文基礎上添加了一些內容和章節,也加入了一些注釋,請讀者注意。 前兩篇文章 《SOAP 介紹》 和 《SOAP Web 服務介紹》...

    Cympros 評論0 收藏0
  • 學習 PHP SOAP 擴展的一些筆記

    摘要:對的相關學習就先告此一段落,這是最后一篇文章用來記錄下學習過程中的一些筆記和心得。對,沒錯在還沒有提供擴展前,的確很多人也是這樣做的。總結上面都是自己在學習擴展時的一些零散的筆記,如果有不對的地方,希望大家指出,謝謝。 對 SOAP 的相關學習就先告此一段落,這是最后一篇文章用來記錄下學習過程中的一些筆記和心得。 前面三篇文章分別是: 《SOAP 介紹》 《SOAP Web 服務介紹...

    wthee 評論0 收藏0
  • php實現webservice(實測C#及java可調用)

    摘要:具體如何操作這里跳過,實現是需要擴展的。返回值也很特別,不是直接返回,而是把它放到一個對象里再返回。返回值中值對應的是中的名稱。最后按運行可以查看到對應的輸出,如下圖所示,說明實現的在中可以正確調用。 使用PHP搭建起一個其他語言如C#、JAVA可用的Webservice的方法與網上大多數所述的用PHP建立的webservice感覺是有差別的。對于接口的輸入參數及輸出參數較為復雜的情況...

    arashicage 評論0 收藏0
  • spring boot開發soap webservice

    摘要:本文介紹如何在中開發接口,以及接口如何同時支持和兩種協議。該功能很簡單,就是通過一個人的姓名查詢這個人的詳細信息。就是關鍵,如本次請求報文如下就是,對應。測試使用進行測試,通過地址導入文件進行測試。測試這樣就實現了和同時提供的目的。 介紹spring boot web模塊提供了RestController實現restful,第一次看到這個名字的時候以為還有SoapController,...

    Ashin 評論0 收藏0
  • laravel中soapServer支持wsdl的例子

    摘要:上邊這段代碼是無模式下的,但是這次是對接第三方的服務,需要我們這邊去定義,第三方來調用,第三方定義的是模式的,所以今天研究了下。 $server = new SoapServer(null, [uri => noganluonguri]); $server->setObject(new NganluongServer()); ob_start(); $server->handle();...

    elarity 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<