Zend framework 信封中缺少SOAP头(Zend_SOAP_客户端,wsdl模式)

Zend framework 信封中缺少SOAP头(Zend_SOAP_客户端,wsdl模式),zend-framework,soap,wsdl,zend-soap,Zend Framework,Soap,Wsdl,Zend Soap,我正在努力在Zend SOAP客户端实例中创建一个合适的SOAP信封 以下是从WSDL文件生成的预期信封示例: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://coc.gov/xsd/ESB/SupplementalData/V1" xmlns:ns="http:

我正在努力在Zend SOAP客户端实例中创建一个合适的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>
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>
因此,它只为主体中的对象设置属性,而不是标题。如果您有任何想法,我们将不胜感激

我需要使用addsoapinputhreader来设置头属性。其他一切都进入身体。这是一个多步骤的过程,所以我想我会在这里记录它,以防其他人发现它有用:

一,。使用StdClass创建多级结构

二,。使用SoapHeader创建适当的XML结构

第一个参数是WSDL文档中定义的名称空间。第二个参数是顶级元素。最后一个元素是格式化的SOAP头

三,。使用addSoapInputHeader将标头添加到Zend_Soap_客户端实例

这与上面的代码一起生成一个看起来与预期一致的请求:

<?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" 
                   xmlns:ns3="http://coc.gov/xsd/ESB/SupplementalData/V1">
   <SOAP-ENV:Header>
      <ns3:SupplementalData>
         <ns3:SourceName>CFS</ns3:SourceName>
         <ns3:ServiceProvider>
            <ns3:Name>FamilyCommunitySurvey</ns3:Name>
            <ns3:OperationName>GetCodeLookupByName</ns3:OperationName>
         </ns3:ServiceProvider>
         <ns3:CorrelationID>1352758058</ns3:CorrelationID>
      </ns3:SupplementalData>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      <ns2:GetCodeLookupByNameRequest>
         <ns1:Name>Country</ns1:Name>
      </ns2:GetCodeLookupByNameRequest>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我需要使用AddSoapInPuthReader来设置标题属性。其他一切都进入身体。这是一个多步骤的过程,所以我想我会在这里记录它,以防其他人发现它有用:

一,。使用StdClass创建多级结构

二,。使用SoapHeader创建适当的XML结构

第一个参数是WSDL文档中定义的名称空间。第二个参数是顶级元素。最后一个元素是格式化的SOAP头

三,。使用addSoapInputHeader将标头添加到Zend_Soap_客户端实例

这与上面的代码一起生成一个看起来与预期一致的请求:

<?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" 
                   xmlns:ns3="http://coc.gov/xsd/ESB/SupplementalData/V1">
   <SOAP-ENV:Header>
      <ns3:SupplementalData>
         <ns3:SourceName>CFS</ns3:SourceName>
         <ns3:ServiceProvider>
            <ns3:Name>FamilyCommunitySurvey</ns3:Name>
            <ns3:OperationName>GetCodeLookupByName</ns3:OperationName>
         </ns3:ServiceProvider>
         <ns3:CorrelationID>1352758058</ns3:CorrelationID>
      </ns3:SupplementalData>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      <ns2:GetCodeLookupByNameRequest>
         <ns1:Name>Country</ns1:Name>
      </ns2:GetCodeLookupByNameRequest>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
 $header = new SoapHeader('http://coc.gov/xsd/ESB/SupplementalData/V1','SupplementalData',$headerObj);
$connect->addSoapInputHeader($header);
<?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" 
                   xmlns:ns3="http://coc.gov/xsd/ESB/SupplementalData/V1">
   <SOAP-ENV:Header>
      <ns3:SupplementalData>
         <ns3:SourceName>CFS</ns3:SourceName>
         <ns3:ServiceProvider>
            <ns3:Name>FamilyCommunitySurvey</ns3:Name>
            <ns3:OperationName>GetCodeLookupByName</ns3:OperationName>
         </ns3:ServiceProvider>
         <ns3:CorrelationID>1352758058</ns3:CorrelationID>
      </ns3:SupplementalData>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      <ns2:GetCodeLookupByNameRequest>
         <ns1:Name>Country</ns1:Name>
      </ns2:GetCodeLookupByNameRequest>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>