簡體   English   中英

Zend Soap Server / WSDL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM