簡體   English   中英

PHP NuSoap中的復雜類型

[英]Complex type in PHP NuSoap

我正在使用PHP中的NuSoap庫構建Web服務。 我的Web服務將充當客戶端和供應商已經存在的Web服務之間的中間層。 因此,他們將連接到我的Web服務,而不是客戶端直接連接到供應商,我的Web服務將連接到供應商並獲取響應並將相同的響應發送回客戶端。

我唯一的問題是我的供應商正在發送回stdclass對象(他們的Web服務是用.Net編寫的),我必須接收該對象並將相同的對象發送回我的Webservice方法上的客戶端。

我已經在Internet上進行了很多搜索,但是NuSoap庫沒有明確的方法來實現這一目標。 到目前為止,無論我讀過什么,都必須指定必須使用復雜類型來實現此目的,但是我仍然不知道如何獲取響應,然后將其轉換為復雜類型並將其發送回客戶端。

在此先感謝您的幫助。

您所寫的內容稱為代理

在線上有一些有關NuSoap服務器通過addComplexType方法發送復雜類型的addComplexType

//Create a complex type
$server->wsdl->addComplexType('MyComplexType','complexType','struct','all','',
array( 'ID' => array('name' => 'ID','type' => 'xsd:int'),
'YourName' => array('name' => 'YourName','type' => 'xsd:string')));

一種實現代理的方法是使用殘存的數據構建服務,這樣就不會真正與后端服務進行通信。 看看您是否可以使原始客戶對代理人為的響應感到滿意。 然后,一旦有了這些,使用真正的后端服務就變得微不足道了(根據我的經驗,SOAP客戶端操作比服務器操作更容易)。

另一種選擇是考慮使用本機SoapServer類。 這里的第一個注釋顯示了如何創建復雜類型。

編輯

環顧四周后,這里有一個更好的例子

addComplextType (lib / class.wsdl.php)上的每個文檔塊中,有兩種方法可以使用NuSoap注冊復雜類型。

/**  
* adds an XML Schema complex type to the WSDL types
*
* @param string $name
* @param string $typeClass (complexType|simpleType|attribute)
* @param string $phpType currently supported are array and struct (php assoc array)
* @param string $compositor (all|sequence|choice)
* @param string $restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
* @param array $elements e.g. array ( name => array(name=>'',type=>'') )
* @param array $attrs e.g. array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'xsd:string[]'))
* @param string $arrayType as namespace:name (xsd:string)
* @see nusoap_xmlschema
* @access public
*/

在我發布的下一個示例中查看他的操作方式:

$server->wsdl->addComplexType('Contact',
    'complexType',
    'struct',
    'all',
    '',
    array(
            'id' => array('name' => 'id', 'type' => 'xsd:int'),
            'first_name' => array('name' => 'first_name', 'type' => 'xsd:string'),
            'last_name' => array('name' => 'last_name', 'type' => 'xsd:string'),
            'email' => array('name' => 'email', 'type' => 'xsd:string'),
            'phone_number' => array('name' => 'phone_number', 'type' => 'xsd:string')
    )
);

然后如何返回Contact復雜類型的響應:

function updateContact($in_contact) {
    $contact = new Contact($in_contact['id']);
    $contact->first_name=mysql_real_escape_string($in_contact['first_name']);
    $contact->last_name=mysql_real_escape_string($in_contact['last_name']);
    $contact->email=mysql_real_escape_string($in_contact['email']);
    $contact->phone_number=mysql_real_escape_string($in_contact['phone_number']);
    if ($contact->update()) return true;
}

您還可以在他的示例中看到如何使用數組變量。 對不起,答案很大!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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