我正在编写一个web服务并调用一个函数,但该函数只能理解我使用的前两个参数。
我的功能应该添加一个条目,其中包含 campaignName 中 addressData 参数下提供的数据,并且会匹配“addressId”参数中的条目。我到目前为止唯一能做的就是在好的 campaignName 中插入一个带有正确 addressId 的空条目。
以下是该功能的说明:
<s:element name="ImportAddress">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="campaignName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="addressId" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="addressData" type="tns:ArrayOfAddressDataItem"/>
</s:sequence>
</s:complexType>
</s:element>
复杂类型ArrayOfAddressDataItem:
<s:complexType name="ArrayOfAddressDataItem">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="AddressDataItem" nillable="true" type="tns:AddressDataItem"/>
</s:sequence>
</s:complexType>
复杂类型AddressDataItem
<s:complexType name="AddressDataItem">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="key" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="value" type="s:string"/>
</s:sequence>
</s:complexType>
这是我的PHP代码:
此请求调用返回成功:
$arr_import_address_params = array(
'campaignName' => 'TEST - Liste des concessions',
'addressId' => $addressId,
'addressData' => array(array(
'Civilite' => 'XXX',
'Code_postal' => 'XXX',
'Creation_date' => 'XXX',
'Email' => 'XXX',
'Nom' => 'XXX',
'Prenom' => 'XXX',
'Telephone' => 'XXX',
'Ville' => 'XXX',
))
);
正如我之前所说,此成功调用会插入一个包含正确ID和campaignName的空条目。
但是这个(应该是正确的)会返回错误:
$arr_import_address_params = array(
'campaignName' => 'TEST - Liste des concessions',
'addressId' => $addressId,
'addressData' => array(
array('key' => 'Civilite', 'value' => 'XXX'),
array('key' => 'Code_postal', 'value' => 'XXX'),
array('key' => 'Creation_date', 'value' => 'XXX'),
array('key' => 'Email', 'value' => 'XXX'),
array('key' => 'Nom', 'value' => 'XXX'),
array('key' => 'Prenom', 'value' => 'XXX'),
array('key' => 'Telephone', 'value' => 'XXX'),
array('key' => 'Ville', 'value' => 'XXX'),
)
);
这是第二次通话的结果:
object(stdClass)#4(1){ [ “ImportAddressResult”] =&GT; string(9)“Exception” }
文档中的哪个意味着发生了未知错误。
以下是我提出请求的方式:
$options = array(
"login" => "xxx",
"password" => "xxx",
"encoding" => "UTF-8",
'trace' => 1,
'exceptions' => 1
);
$client = new SoapClient("http://xxx/ImportExport/ImportExportWS.asmx?WSDL", $options);
$addressId = "TEST-WITH-UNEXISTING-ID";
$request_params = array(
'campaignName' => 'TEST - Liste des concessions',
'addressId' => $addressId,
'addressData' => array(
array('key' => 'Civilite', 'value' => 'XXX'),
array('key' => 'Code_postal', 'value' => 'XXX'),
array('key' => 'Creation_date', 'value' => 'XXX'),
array('key' => 'Email', 'value' => 'XXX'),
array('key' => 'Nom', 'value' => 'XXX'),
array('key' => 'Prenom', 'value' => 'XXX'),
array('key' => 'Telephone', 'value' => 'XXX'),
array('key' => 'Ville', 'value' => 'XXX'),
)
);
$request_result = $client->ImportAddress($request_params);
请求XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="xxx">
<SOAP-ENV:Body>
<ns1:ImportAddress>
<ns1:campaignName>TEST - Liste des concessions</ns1:campaignName>
<ns1:addressId>TEST-UNIQUE-IDENTIFIER</ns1:addressId>
<ns1:addressData>
<ns1:AddressDataItem>
<ns1:key>Civilite</ns1:key>
<ns1:value>XXX</ns1:value>
</ns1:AddressDataItem>
<ns1:AddressDataItem>
<ns1:key>Code_postal</ns1:key>
<ns1:value>XXX</ns1:value>
</ns1:AddressDataItem>
<ns1:AddressDataItem>
<ns1:key>Creation_date</ns1:key>
<ns1:value>XXX</ns1:value>
</ns1:AddressDataItem>
<ns1:AddressDataItem>
<ns1:key>Email</ns1:key>
<ns1:value>XXX</ns1:value>
</ns1:AddressDataItem>
<ns1:AddressDataItem>
<ns1:key>Nom</ns1:key>
<ns1:value>XXX</ns1:value>
</ns1:AddressDataItem>
<ns1:AddressDataItem>
<ns1:key>Prenom</ns1:key>
<ns1:value>XXX</ns1:value>
</ns1:AddressDataItem>
<ns1:AddressDataItem>
<ns1:key>Telephone</ns1:key>
<ns1:value>XXX</ns1:value>
</ns1:AddressDataItem>
<ns1:AddressDataItem>
<ns1:key>Ville</ns1:key>
<ns1:value>XXX</ns1:value>
</ns1:AddressDataItem>
</ns1:addressData>
</ns1:ImportAddress>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我想知道我发送的类型是否有问题? 我读到某个地方我可以使用数组而不是对象,它似乎可以工作,直到它来到adressData参数。
我不知道为什么我做错了什么,我认为我的代码遵循WSDL描述,但似乎我忘记了......
任何帮助都将非常感激。
提前致谢, 森