2011-06-24 30 views
6

Đây là lần đầu tiên tôi đăng bài, vì vậy hãy tha thứ cho tôi nếu tôi không rõ ràng. Tôi cũng sẽ nói trước điều này bằng cách nói rằng tôi thực sự biết rất ít về php và các dịch vụ web.Yêu cầu SOAP với <stdClass> thẻ

Vấn đề tôi đang gặp là:

Một yêu cầu SOAP được tạo ra bởi một nguồn bên ngoài (một khách hàng) và sau đó được gửi đến máy chủ php SOAP của tôi. Khi máy chủ nhận được yêu cầu, nó không chính xác chút nào. Một gói sniffer cho thấy rằng yêu cầu có vẻ đúng khi nó đến máy mà máy chủ php đang chạy. Nhưng, vì lý do nào đó, ngay sau khi máy chủ xà phòng nhận được yêu cầu, nó là tất cả điều sai lầm.

Điều gì thực sự kỳ lạ là chỉ một tuần trước mã này hoạt động tốt. Không có thay đổi nào được thực hiện kể từ đó. Điều này đã được thử trên 3 máy khác nhau, một trong số đó đang chạy một phiên bản khác của php (và đang ở trạng thái khác!). Một trong các máy đã bị tắt ngay sau khi một số thử nghiệm thành công, và sau đó bật ngày hôm nay sau khi vấn đề này chỉ xuất hiện thất bại.

Đây là một ví dụ về các yêu cầu gửi của khách hàng:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <CoverageRequest xmlns="http://www.iicmva.com/CoverageVerification/"> 
      <RequestorInformation> 
       <Organization> 
        <Name>NVDMV</Name> 
       </Organization> 
       <ReasonDetails> 
        <ReasonCode>BI</ReasonCode> 
        <TrackingNumber>NVDMV-2011-05-12 10:36:52:286678</TrackingNumber> 
       </ReasonDetails> 
      </RequestorInformation> 
      <Detail> 
       <PolicyInformation> 
        <OrganizationDetails> 
         <NAIC>26654</NAIC> 
        </OrganizationDetails> 
        <PolicyDetails> 
         <VerificationDate>2011-05 12T00:00:00</VerificationDate> 
         <UniqueKey>123456789</UniqueKey> 
         <PolicyState>NV</PolicyState> 
        </PolicyDetails> 
       </PolicyInformation> 
       <InsuredInformation> 
        <PrimaryNameInformation> 
         <ParsedName> 
          <GivenName>FIRSTNAME</GivenName> 
          <Surname>LASTNAME</Surname> 
         </ParsedName> 
         <Name>LASTNAME,FIRSTNAME</Name> 
         <DriversLicense>NOLICENSE</DriversLicense> 
         <FEIN>FEIN</FEIN> 
        </PrimaryNameInformation> 
        <Address> 
         <StreetAddress>12345</StreetAddress> 
        </Address> 
       </InsuredInformation> 
       <VehicleInformation> 
        <VehicleDetails> 
         <VIN>VIN1234567</VIN> 
         <Make>MAKE</Make> 
         <Model>MODEL</Model> 
         <Year>2000</Year> 
        </VehicleDetails> 
       </VehicleInformation> 
      </Detail> 
     </CoverageRequest> 
    </soap:Body> 
</soap:Envelope> 

Dưới đây là một mẫu của những gì các máy chủ xà phòng được:

<?xml version="1.0" encoding="UTF-8"?><CoverageRequest><stdClass> 
    <Individual> 
     <ParsedName> 
      <Prefix /> 
      <GivenName /> 
      <MiddleName /> 
      <Surname /> 
      <Suffix /> 
     </ParsedName> 
    </Individual> 
    <Organization> 
     <Name /> 
    </Organization> 
    <ReasonDetails> 
     <ReasonCode /> 
     <TrackingNumber /> 
    </ReasonDetails> 
</stdClass></CoverageRequest> 

Đây là mã cho máy chủ xà phòng:

<?php 
    function CoverageRequest($pInput) { 
    error_reporting(~E_ALL); 

    require_once 'XML/Serializer.php'; 

    $options = array(
      XML_SERIALIZER_OPTION_INDENT  => ' ', 
      XML_SERIALIZER_OPTION_LINEBREAKS => "\n", 
      XML_SERIALIZER_OPTION_DEFAULT_TAG => 'unnamedItem', 
      XML_SERIALIZER_OPTION_TYPEHINTS => false 
    ); 

    $serializer = &new XML_Serializer($options); 

    $result = $serializer->serialize($pInput); 

    if($result === true) { 
     $xml = $serializer->getSerializedData(); 
    } 



    // Surround all of the XML in a single tag 
    $xml = '<CoverageRequest>' . $xml; 
    $xml = $xml . '</CoverageRequest>'; 



    // Insert the xml header at the beginning 
    $xml = '<?xml version="1.0" encoding="UTF-8"?>' . $xml; 

    $fp = fopen('SOAPRequest.txt', 'w'); 
     fwrite($fp, $xml); 
     fclose($fp); 

    // Send the data to 4D's web service to be processed 

     $client = new SoapClient('http://67.214.247.59:8090/4DWSDL/'); 
     $response = $client->VerifyInsurance($xml); 

     $fp = fopen('SOAPResponse.txt', 'w'); 
     fwrite($fp, $response); 
     fclose($fp); 

    $xmlvar = new SoapVar($response, XSD_ANYXML); 
    return $xmlvar; 

    } 

    // Clean up the response to match the guidelines 
    function callback($buffer) { 
    $buffer = str_replace('<ns1:CoverageRequestResponse>', '', $buffer); 
    $buffer = str_replace('</ns1:CoverageRequestResponse>', '', $buffer); 

    $buffer = str_replace('SOAP-ENV', 'soap', $buffer); 

    return $buffer; 
    } 

    // turn off the wsdl cache 
    ini_set('soap.wsdl_cache_enabled', '0'); 

    $server = new SoapServer(null, array('uri' => 'http://67.214.247.59/phpserver/verifyinsurance.wsdl')); 

    $server->addFunction('CoverageRequest'); 

    ob_start('callback'); 

    $server->handle(); 
    ob_end_flush(); 

?> 

đây là wsdl:

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:s="http://www.w3.org/2001/XMLSchema" 
xmlns:tns="http://www.iicmva.com/CoverageVerification/" 
targetNamespace="http://www.iicmva.com/CoverageVerification/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 

xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" 
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
> 

    <wsdl:types> 
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.iicmva.com/CoverageVerification/"> 
     <s:element name="CoverageRequest"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="RequestorInformation" type="tns:RequestorInformationModule" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Detail" type="tns:CoverageRequestDetail" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
     <s:complexType name="RequestorInformationModule"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="Individual" type="tns:IndividualBlock2" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Organization" type="tns:OrganizationBlock3" /> 
      <s:element minOccurs="0" maxOccurs="1" name="ReasonDetails" type="tns:DocumentDetailBlock2" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="IndividualBlock2"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="ParsedName" type="tns:IndividualNameComponent2" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="IndividualNameComponent2"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="Prefix" type="tns:NameText2" /> 
      <s:element minOccurs="0" maxOccurs="1" name="GivenName" type="tns:NameText4" /> 
      <s:element minOccurs="0" maxOccurs="1" name="MiddleName" type="tns:NameText5" /> 
      <s:element minOccurs="0" maxOccurs="unbounded" name="Surname" type="tns:NameText6" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Suffix" type="tns:NameText2" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="NameText2"> 
     <s:simpleContent> 
      <s:extension base="s:string" /> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="NameText4"> 
     <s:simpleContent> 
      <s:extension base="s:string" /> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="NameText5"> 
     <s:simpleContent> 
      <s:extension base="s:string" /> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="NameText6"> 
     <s:simpleContent> 
      <s:extension base="s:string" /> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="OrganizationBlock3"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="Name" type="tns:NameText1" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="NameText1"> 
     <s:simpleContent> 
      <s:extension base="s:string" /> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="DocumentDetailBlock2"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="ReasonCode" type="tns:ReasonCode1" /> 
      <s:element minOccurs="0" maxOccurs="1" name="TrackingNumber" type="tns:ResourceIdentifier12" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="ReasonCode1"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="ListAgencyIdentifier" type="s:string" /> 
      <s:attribute name="ListAgencyNameText" type="s:string" /> 
      <s:attribute name="ListNameText" type="s:string" /> 
      <s:attribute name="ListIdentifier" type="s:string" /> 
      <s:attribute name="ListSchemeURI" type="s:string" /> 
      <s:attribute name="ListURI" type="s:string" /> 
      <s:attribute name="ListVersionIdentifier" type="s:string" /> 
      <s:attribute name="NameText" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="ResourceIdentifier12"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="IdSchemeAgencyIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeAgencyNameText" type="s:string" /> 
      <s:attribute name="IdSchemeIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeNameText" type="s:string" /> 
      <s:attribute name="IdSchemeURI" type="s:string" /> 
      <s:attribute name="IdSchemeVersionIdentifier" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="CoverageRequestDetail"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="PolicyInformation" type="tns:CoveragePolicyRequestModule" /> 
      <s:element minOccurs="0" maxOccurs="1" name="InsuredInformation" type="tns:InsuredModule" /> 
      <s:element minOccurs="0" maxOccurs="1" name="VehicleInformation" type="tns:RiskInformationModule" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="CoveragePolicyRequestModule"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="OrganizationDetails" type="tns:OrganizationBlock4" /> 
      <s:element minOccurs="0" maxOccurs="1" name="PolicyDetails" type="tns:DocumentDetailBlock3" /> 
      <s:element minOccurs="0" maxOccurs="1" name="BodilyInjuryCoverage" type="tns:AmountBlock1" /> 
      <s:element minOccurs="0" maxOccurs="1" name="PropertyDamageCoverage" type="tns:AmountBlock1" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="OrganizationBlock4"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="NAIC" type="tns:PartyIdentifier18" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="PartyIdentifier18"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="IdSchemeAgencyIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeAgencyNameText" type="s:string" /> 
      <s:attribute name="IdSchemeIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeNameText" type="s:string" /> 
      <s:attribute name="IdSchemeURI" type="s:string" /> 
      <s:attribute name="IdSchemeVersionIdentifier" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="DocumentDetailBlock3"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="VerificationDate" type="tns:DateTime1" /> 
      <s:element minOccurs="0" maxOccurs="1" name="UniqueKey" type="tns:ResourceIdentifier12" /> 
      <s:element minOccurs="0" maxOccurs="1" name="PolicyState" type="tns:ResourceIdentifier14" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="DateTime1"> 
     <s:simpleContent> 
      <s:extension base="s:dateTime"> 
      <s:attribute name="FormatText" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="ResourceIdentifier14"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="IdSchemeAgencyIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeAgencyNameText" type="s:string" /> 
      <s:attribute name="IdSchemeIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeNameText" type="s:string" /> 
      <s:attribute name="IdSchemeURI" type="s:string" /> 
      <s:attribute name="IdSchemeVersionIdentifier" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="AmountBlock1"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="TypeofLimit" type="tns:ResourceCode9" /> 
      <s:element minOccurs="0" maxOccurs="1" name="CoverageAmount" type="tns:Amount1" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="ResourceCode9"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="ListAgencyIdentifier" type="s:string" /> 
      <s:attribute name="ListAgencyNameText" type="s:string" /> 
      <s:attribute name="ListNameText" type="s:string" /> 
      <s:attribute name="ListIdentifier" type="s:string" /> 
      <s:attribute name="ListSchemeURI" type="s:string" /> 
      <s:attribute name="ListURI" type="s:string" /> 
      <s:attribute name="ListVersionIdentifier" type="s:string" /> 
      <s:attribute name="NameText" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="Amount1"> 
     <s:simpleContent> 
      <s:extension base="s:decimal"> 
      <s:attribute name="currencyidentifier" type="s:string" /> 
      <s:attribute name="CurrencyCodeListVersionIdentifier" type="s:string" /> 
      <s:attribute name="CurrencyCodeList" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="InsuredModule"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="PrimaryNameInformation" type="tns:IndividualBlock3" /> 
      <s:element minOccurs="0" maxOccurs="unbounded" name="AdditionalNamesInformation" type="tns:IndividualBlock3" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Address" type="tns:AddresslBlock1" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="IndividualBlock3"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="ParsedName" type="tns:IndividualNameComponent2" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Name" type="tns:NameText1" /> 
      <s:element minOccurs="0" maxOccurs="1" name="SocialSecurityNumber" type="tns:PartyIdentifier9" /> 
      <s:element minOccurs="0" maxOccurs="1" name="DriversLicense" type="tns:PartyIdentifier8" /> 
      <s:element minOccurs="0" maxOccurs="1" name="FEIN" type="tns:PartyIdentifier8" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="PartyIdentifier9"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="IdSchemeAgencyIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeAgencyNameText" type="s:string" /> 
      <s:attribute name="IdSchemeIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeNameText" type="s:string" /> 
      <s:attribute name="IdSchemeURI" type="s:string" /> 
      <s:attribute name="IdSchemeVersionIdentifier" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="PartyIdentifier8"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="IdSchemeAgencyIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeAgencyNameText" type="s:string" /> 
      <s:attribute name="IdSchemeIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeNameText" type="s:string" /> 
      <s:attribute name="IdSchemeURI" type="s:string" /> 
      <s:attribute name="IdSchemeVersionIdentifier" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="AddresslBlock1"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="unbounded" name="StreetAddress" type="tns:LocationText9" /> 
      <s:element minOccurs="0" maxOccurs="1" name="SubsiteAddress" type="tns:SubsiteAddressComponent1" /> 
      <s:element minOccurs="0" maxOccurs="1" name="City" type="tns:LocationText1" /> 
      <s:element minOccurs="0" maxOccurs="1" name="CountrySubdivision" type="tns:LocationCode2" /> 
      <s:element minOccurs="0" maxOccurs="1" name="PostalCode" type="tns:LocationIdentifier1" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Country" type="tns:LocationCode3" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="LocationText9"> 
     <s:simpleContent> 
      <s:extension base="s:string" /> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="SubsiteAddressComponent1"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="Apartment" type="tns:LocationText2" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Building" type="tns:LocationText7" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Department" type="tns:LocationText7" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Floor" type="tns:LocationText2" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Room" type="tns:LocationText2" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Suite" type="tns:LocationText2" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="LocationText2"> 
     <s:simpleContent> 
      <s:extension base="s:string" /> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="LocationText7"> 
     <s:simpleContent> 
      <s:extension base="s:string" /> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="LocationText1"> 
     <s:simpleContent> 
      <s:extension base="s:string" /> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="LocationCode2"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="ListAgencyIdentifier" type="s:string" /> 
      <s:attribute name="ListAgencyNameText" type="s:string" /> 
      <s:attribute name="ListNameText" type="s:string" /> 
      <s:attribute name="ListIdentifier" type="s:string" /> 
      <s:attribute name="ListSchemeURI" type="s:string" /> 
      <s:attribute name="ListURI" type="s:string" /> 
      <s:attribute name="ListVersionIdentifier" type="s:string" /> 
      <s:attribute name="NameText" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="LocationIdentifier1"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="IdSchemeAgencyIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeAgencyNameText" type="s:string" /> 
      <s:attribute name="IdSchemeIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeNameText" type="s:string" /> 
      <s:attribute name="IdSchemeURI" type="s:string" /> 
      <s:attribute name="IdSchemeVersionIdentifier" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="LocationCode3"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="ListAgencyIdentifier" type="s:string" /> 
      <s:attribute name="ListAgencyNameText" type="s:string" /> 
      <s:attribute name="ListNameText" type="s:string" /> 
      <s:attribute name="ListIdentifier" type="s:string" /> 
      <s:attribute name="ListSchemeURI" type="s:string" /> 
      <s:attribute name="ListURI" type="s:string" /> 
      <s:attribute name="ListVersionIdentifier" type="s:string" /> 
      <s:attribute name="NameText" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="RiskInformationModule"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="VehicleDetails" type="tns:ResourceIdentificationBlock1" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="ResourceIdentificationBlock1"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="VIN" type="tns:ResourceIdentifier11" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Make" type="tns:ResourceIdentifier12" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Model" type="tns:ResourceIdentifier12" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Year" type="tns:DateTimeText2" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="ResourceIdentifier11"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="IdSchemeAgencyIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeAgencyNameText" type="s:string" /> 
      <s:attribute name="IdSchemeIdentifier" type="s:string" /> 
      <s:attribute name="IdSchemeNameText" type="s:string" /> 
      <s:attribute name="IdSchemeURI" type="s:string" /> 
      <s:attribute name="IdSchemeVersionIdentifier" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="DateTimeText2"> 
     <s:simpleContent> 
      <s:extension base="s:string" /> 
     </s:simpleContent> 
     </s:complexType> 
     <s:element name="CoverageResponse"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="0" maxOccurs="unbounded" name="Detail" type="tns:CoverageResponseDetail" /> 
      <s:element minOccurs="0" maxOccurs="1" name="RequestorInformation" type="tns:RequestorInformationModule" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
     <s:complexType name="CoverageResponseDetail"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="PolicyInformation" type="tns:CoveragePolicyResponseModule" /> 
      <s:element minOccurs="0" maxOccurs="1" name="InsuredInformation" type="tns:InsuredModule" /> 
      <s:element minOccurs="0" maxOccurs="1" name="VehicleInformation" type="tns:RiskInformationModule" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="CoveragePolicyResponseModule"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="CoverageStatus" type="tns:StatusInformationBlock4" /> 
      <s:element minOccurs="0" maxOccurs="1" name="OrganizationDetails" type="tns:OrganizationBlock4" /> 
      <s:element minOccurs="0" maxOccurs="1" name="PolicyDetails" type="tns:DocumentDetailBlock3" /> 
      <s:element minOccurs="0" maxOccurs="1" name="BodilyInjuryCoverage" type="tns:AmountBlock1" /> 
      <s:element minOccurs="0" maxOccurs="1" name="PropertyDamageCoverage" type="tns:AmountBlock1" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="StatusInformationBlock4"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="ResponseDetails" type="tns:ParsedStatusComponent3" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="ParsedStatusComponent3"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="ResponseCode" type="tns:EventCode7" /> 
      <s:element minOccurs="0" maxOccurs="unbounded" name="UnconfirmedReasonCode" type="tns:EventCode8" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="EventCode7"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="ListAgencyIdentifier" type="s:string" /> 
      <s:attribute name="ListAgencyNameText" type="s:string" /> 
      <s:attribute name="ListNameText" type="s:string" /> 
      <s:attribute name="ListIdentifier" type="s:string" /> 
      <s:attribute name="ListSchemeURI" type="s:string" /> 
      <s:attribute name="ListURI" type="s:string" /> 
      <s:attribute name="ListVersionIdentifier" type="s:string" /> 
      <s:attribute name="NameText" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
     <s:complexType name="EventCode8"> 
     <s:simpleContent> 
      <s:extension base="s:token"> 
      <s:attribute name="ListAgencyIdentifier" type="s:string" /> 
      <s:attribute name="ListAgencyNameText" type="s:string" /> 
      <s:attribute name="ListNameText" type="s:string" /> 
      <s:attribute name="ListIdentifier" type="s:string" /> 
      <s:attribute name="ListSchemeURI" type="s:string" /> 
      <s:attribute name="ListURI" type="s:string" /> 
      <s:attribute name="ListVersionIdentifier" type="s:string" /> 
      <s:attribute name="NameText" type="s:string" /> 
      </s:extension> 
     </s:simpleContent> 
     </s:complexType> 
    </s:schema> 
    </wsdl:types> 

    <wsdl:message name="VerifyInsuranceSoapIn"> 
    <wsdl:part name="parameters" element="tns:CoverageRequest" /> 
    </wsdl:message> 
    <wsdl:message name="VerifyInsuranceSoapOut"> 
    <wsdl:part name="parameters" element="tns:CoverageResponse" /> 
    </wsdl:message> 
    <wsdl:portType name="VerifyServiceSoap"> 
    <wsdl:operation name="CoverageRequest"> 
     <wsdl:input message="tns:VerifyInsuranceSoapIn" /> 
     <wsdl:output message="tns:VerifyInsuranceSoapOut" /> 
    </wsdl:operation> 
    </wsdl:portType> 
    <wsdl:binding name="VerifyServiceSoap" type="tns:VerifyServiceSoap"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> 
    <wsdl:operation name="CoverageRequest"> 
     <soap:operation soapAction="urn:gnwSoap#CoverageRequest" style="document" /> 
     <wsdl:input> 
     <soap:body use="literal" /> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" /> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="gnwSoap"> 
    <documentation xmlns="http://schemas.xmlsoap.org/wsdl/" /> 
    <wsdl:port name="VerifyServiceSoap" binding="tns:VerifyServiceSoap"> 
     <soap:address location="http://67.214.247.59/phpserver/server.php" /> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

Bất cứ ai có thể cho tôi biết lý do tại sao phản hồi bị thiếu phần CoverageRequest và lý do tại sao nó đột nhiên được bao trong thẻ stdClass?

Cảm ơn bạn!

+1

Thật khó để nói. Phương thức đó (serialize() thậm chí không được ghi lại.) Ngoài ra, tự hỏi tại sao bạn đang nạp $ pInput vào một kết quả $.Nếu phong bì SOAP đã được định dạng đúng, tại sao không chỉ chuyển nó đến dịch vụ web của 4D? – Bretticus

+1

Có lẽ, bạn nên viết một máy chủ SOAP thực: http://www.php.net/manual/en/soapserver.soapserver.php và sau đó lấy đầu vào và viết một ứng dụng khách SOAP mà bạn chắc chắn phù hợp với dịch vụ 4D. – Bretticus

+0

Bạn chắc chắn rằng yêu cầu của khách hàng là wat được gửi? Bạn có thể thử kiểm tra bằng cách sử dụng wireshark để chắc chắn. Tôi đồng ý với Bretticus về việc sử dụng SoapServer. –

Trả lời

1

Tôi không thể gọi điện cho lyou, nhưng tôi có thể giải thích stdClass.

Một đối tượng kiểu stdClass là một trình bao bọc đơn giản. Bạn nhận được một lớp các loại stdClass khi bạn chuyển đổi chiến của một mảng đến một đối tượng, chẳng hạn như:

(object)array('keyname' => 'value') 

Nếu bạn đã làm một var_dump() điều này, bạn sẽ nhận được:

object(stdClass)#1 (1) { 
    ["keyname"]=> 
    string(5) "value" 
} 

Tất cả các đối tượng trong mọi ngôn ngữ kế thừa từ một số đối tượng cơ bản. Tôi đoán rằng trong PHP, nó là stdClass.

(Vote tôi nếu bạn thích câu trả lời.)

Dustin

0

Phần CoverageRequest không phải là một phần của lớp CoverageResponse. Lớp CoverageResponse chứa một cá thể duy nhất của RequestorInformationModule và một mảng các đối tượng CoverageResponseDetail mở.

Đoán tốt nhất của tôi về lý do khiến stdClass xuất hiện là do việc sử dụng các biến phức tạp chưa được đặt tên trong phần tử CoverageRequest và CoverageResponse.

Các vấn đề liên quan