php處理wsdl(轉作記錄用)

2021-08-16 07:42:41 字數 2620 閱讀 6716

這位作者描述的相當切合我的需求。

0x00 前言

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

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

0x01 wsdl是什麼

綜合某度上所說,它就是乙個xml格式的文件,用於描述web server的定義,也就是說是乙個web server方法及引數說明。

詳見:當我們請求',類似這種結尾是?wsdl的url時,會一坨xml結構的資料給你。

沒錯,就是一坨...

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

0x02 理解描述文件

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

<?php 

$client = new soapclient('');

print

"\n提供的方法\n";

print_r($client->__getfunctions());

print

"相關的資料結構\n";

print_r($client->__gettypes());

print

"\n\n";

這裡我們用到了soap擴充套件,這個擴充套件是php官方文案中出示操作處理webserver服務擴充套件,最終我們也是通過它來實現引數傳輸。

相關的資料機構則是指方法中引數名稱,及引數型別。比如***xuserinfo方法,需要三個string型別的引數。分別對應in0in1in2

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

code:

<?php 

/** * @author 0x584a

* 獲取wsdl介面資料

*/class

getwsdltest

extends

phpunit_framework_testcase

/*** ***xuserinfo方法

*/public

function

test***xuserinfodata

() //呼叫介面狀態碼,輸出對應錯誤詳情

if ($result->out == '01')

$xml_parser = xml_parser_create();

if (!xml_parse($xml_parser, $result->out, true))

xml_parser_free($xml_parser);

//xxe

libxml_disable_entity_loader(true);

$xml = ******xml_load_string($result->out, '******xmlelement', libxml_nocdata);

// 輸出引數

var_dump($xml->data);

echo

" 成功".php_eol;

} catch (soapfault $soapfault)

}/**

* @description getsoapclienthandler

*/public

function

getsoapclienthandler

() return

self::$soapclienthandler;

}/**

* @description getsynchapi

*/public

function

getsynchapi()}

?>

php學習之道 WSDL詳解 二

3.定義服務使用的邏輯訊息 當服務的操作被呼叫時,服務被定義為訊息交換。在wsdl文件中,這些訊息被定義message元素。這些訊息由稱之為part元素的部分組成。乙個服務的操作,通過指定邏輯訊息的方式來定義。當操作被呼叫時,邏輯訊息被交換。也就是說,邏輯訊息代表了服務的操作 這些邏輯訊息,將在網路...

php學習之道 WSDL詳解 二

3.定義服務使用的邏輯訊息 當服務的操作被呼叫時,服務被定義為訊息交換。在wsdl文件中,這些訊息被定義message元素。這些訊息由稱之為part元素的部分組成。乙個服務的操作,通過指定邏輯訊息的方式來定義。當操作被呼叫時,邏輯訊息被交換。也就是說,邏輯訊息代表了服務的操作 這些邏輯訊息,將在網路...

php學習之路 WSDL詳細解釋 兩

3.定義服務使用的邏輯訊息 當服務的操作被呼叫時。服務被定義為訊息交換。在wsdl文件中,這些訊息被定義message元素。這些訊息由稱之為part元素的部分組成。乙個服務的操作,通過指定邏輯訊息的方式來定義。當操作被呼叫時,邏輯訊息被交換。也就是說。邏輯訊息代表了服務的操作 這些邏輯訊息,將在網路...