2013-02-28 2 views
2

Извините, может быть, очень простая вещь, но я не могу заставить ее работать с тех пор!Как передать массив через php на php soap-сервер?

Это часть моего WSDL:

<xsd:complexType name="PERSON"> 
<xsd:sequence> 
    <xsd:element name="ExterneID" minOccurs="0" type="xsd:int" /> 
    <xsd:element name="Email" type="xsd:string" /> 
    ... 
</xsd:sequence> 
</xsd:complexType> 

<message name="insertAdresse"> 
    <part name="BmLogin" type="xsd:string" /> 
    <part name="TS" type="xsd:int" /> 
    <part name="UT" type="xsd:string" /> 
    <part name="Person" type="typens:PERSON"/> 
</message> 

Как я могу передать это мой мыльный сервер? И как я могу обратиться к параметрам?

Я пробовал много версий, но ничего не помогло! Пример:

class c_adresse 
{ 
    public $ExterneID; 
    public $Email; 

    public function __construct($ExterneID,$Email) 
    { 
     $this->ExterneID = $ExterneID; 
     $this->Email = $Email; 
    } 
} 

$no1 = array(); 
$no1[] = new c_adresse(33,"[email protected]"); 

Так $ no1 выглядит следующим образом:

array(1) { 
[0]=> 
    object(c_adresse)#2 (2) { 
    ["ExterneID"]=> 
    int(33) 
    ["Email"]=> 
    string(15) "[email protected]" 
    } 
} 

Вызов:

$response = $soap_client->insertAdresse($login,$ts,$token,$no1); 

Сообщение об ошибке:

PHP Fatal error: SOAP-ERROR: Encoding: object hasn't 'Email' property in /home/peter/Desktop/soap.php on line 41 
PHP Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object hasn't 'Email' property in /home/peter/Desktop/soap.php:41 

Как спроектировать объект/массив (?), чтобы перейти на мыльный сервер?

А на сервере я не могу адресовать $ daten. Иногда, когда я играю с порядком и стилем параметров, я получаю его как-то работать, и только если я не смешиваю строку, int и массивы (complexType [PERSON]) в разделе «сообщение». Но тогда я не могу обратиться $ DATEN или $ BmLogin пусто и так далее ...

function insertAdresse($BmLogin,$TS,$UT,$daten) 

хорошо, я нашел решение!

Я изменил это:

<xsd:element name="PERSON" type="PersonType"/> 
<xsd:complexType name="PersonType"> 

этот ...

$response = $soap_client->insertAdresse($login,$ts,$token,array("ExterneID"=>22,"Email"=>"[email protected]")); 

работает отлично!

+0

Показать фактический вызов SOAP, который вы делаете. –

+0

благодарит Джека за вашу помощь, я думаю, что все сделано ... (см. Выше). Я сделаю еще несколько проверок ... – Peter

+1

ответ на вопрос для наглядности. – SparKot

ответ

0

в порядке, я нашел решение!

Это отсутствовало в WSDL:

<xsd:element name="PERSON" type="typens:PersonType"/> 
<xsd:complexType name="PersonType"> 

этот ...

$response = $soap_client->insertAdresse($login,$ts,$token,array("ExterneID"=>22,"Email"=>"[email protected]")); 

работает отлично!

Смежные вопросы