[英]Zend Soap Server / WSDL
我一直在從事一個項目(該項目我將使用隨機數據保留其具體細節),該項目涉及將我們的系統(PHP 5.3.x +)與一家大公司的API(它們提供了SDK)集成在一起。 他們提供了WSDL,並聲稱我們需要匹配他們的方法,並提供了輸出(由Soap Server生成的XML)外觀的示例。
目前,一切都按預期進行。 當我從SoapUI(一個我正在測試的應用程序)發送XML請求時,所有這些過程都可以正確處理,但是XML輸出與他們的示例並不完全匹配,我們相信他們說我們必須接近他們的示例。
基本上,我們創建了一個使用服務名稱初始化的不可知類,並且將其初始化為非不可知類,可通過以下方式使用該類:
/**
* The following is used to process Soap Server based on config and any optional settings.
*
* @param string $className
* @param array $options
* @param object $config
* @return Zend_Soap_Server
*/
public static function init($className, Array $options = null, $config = null)
{
// Used to define the class and return object.
$soap_server = new Zend_Soap_Server(null, $options);
$soap_server->setClass($className, null, (isset($config) ? $config : null));
$soap_server->handle();
exit;
}
問題本身就在於輸出的響應中。 你們如何建議我們構建XML輸出,如果它們對所有事情都非常具體?
1.)我們的方法之一是moneyTransferRequest。 當我為此發送XML時,它會找到方法並進行處理。 但是,他們希望它在響應中將方法名稱顯示為moneyTransferResponse,但它會輸出moneyTransferRequestResponse。
2.)我們的輸出(對於變量以及作為對象發送回的變量)具有多個變量,例如,我們說$ money。 該字段將返回為:
<money xsi:type="xsd:string">10.0</money>
他們希望它是:
<ns1:money xsi:type="xsd:string">10.0</money>
在回報。
感謝您對此問題的幫助和投入。
SOAP的關鍵特性是它使用XML,XML可以有很多不同的樣式,但含義仍然相同。
我認為(但是我只能猜測,因為您沒有提供詳細信息)您的兩個問題可能不存在。
1.)響應XML結構的名稱應與WSDL中提到的名稱一致。 您正在發布WSDL,因此您應該檢查這兩個是否匹配。 請注意,重要的切入點是SOAP方法-此后的所有內容都是在WSDL本身中定義的,只要正確使用所提到的名稱,任何使用該方法的客戶端都應該能夠弄清楚。
2.)基本上是相同的,但更簡單:XML允許使用名稱空間,並且可以在多個位置定義名稱空間,其結果在字面上並不相同,但是每個XML解析器都會理解它們是相同的。 因此,您應該檢查響應的XML標頭中是否提到了要求作為“ ns1”的名稱空間。 每個XML文檔都有一個基本名稱空間,該名稱空間不需要在屬於它的每個元素上重復。
<money>
元素就是這種情況。 您的寫作風格使用該基本名稱空間,他們的寫作風格也使用一個XML頭中引入的名稱空間快捷鍵ns1
,但未聲明為基本名稱空間。 因此,只要兩個響應中都有正確的XML名稱空間的痕跡,我就假定它們是等效的。
壞消息是您無法更改PHP SoapServer生成XML的方式。 您需要創建自己的SOAP服務器實現,我說這是對資源的完全浪費。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.