Zend Soap Client インスタンスで適切な SOAP エンベロープを作成するのに苦労しています。
以下は、WSDL ファイルから生成された予期されるエンベロープのサンプルです。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:v1="http://coc.gov/xsd/ESB/SupplementalData/V1"
xmlns:ns="http://schemas.calgary.ca/xsd/familycommunitysurvey/2012/08"
xmlns:ns1="http://schemas.calgary.ca/xsd/familycommunitysurveycdm/2012/08">
<soapenv:Header>
<v1:SupplementalData>
<v1:SourceName>CFS</v1:SourceName>
<v1:ServiceProvider>
<v1:Name>FamilyCommunitySurvey</v1:Name>
<v1:OperationName>GetCodeLookupByName</v1:OperationName>
</v1:ServiceProvider>
<v1:CorrelationID>23451235634</v1:CorrelationID>
</v1:SupplementalData>
</soapenv:Header>
<soapenv:Body>
<ns:GetCodeLookupByNameRequest>
<ns1:Name>Country</ns1:Name>
</ns:GetCodeLookupByNameRequest>
</soapenv:Body>
</soapenv:Envelope>
設定する必要があるプロパティは、ヘッダーの「SourceName」、「CorrelationID」、本文の「Name」です。これが私がやっている方法です:
$fsiiConnect = new Zend_Soap_Client($wsdl, array('soap_version' => SOAP_1_1));
$fsiiConnect->setLocation($endPoint);
$fsiiConnect->setHttpLogin($userName);
$fsiiConnect->setHttpPassword($password);
$data=array(
'SourceName' => 'CFS',
'CorrelationID' => '1234251435632',
'Name' => 'Country'
);
try {
$results = $fsiiConnect->GetCodeLookupsByName($data);
}
catch (Exception $e) {
print $fsiiConnect->getLastRequest();
}
getLastRequest() の内容は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://schemas.calgary.ca/xsd/familycommunitysurveycdm/2012/08"
xmlns:ns2="http://schemas.calgary.ca/xsd/familycommunitysurvey/2012/08">
<SOAP-ENV:Body>
<ns2:GetCodeLookupByNameRequest>
<ns1:Name>Country</ns1:Name>
</ns2:GetCodeLookupByNameRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
そのため、ヘッダーではなく、本文のオブジェクトにのみプロパティを設定しています。理由があればどんなアイデアでも大歓迎です!