PHP中的Soap客户端

时间:2016-10-22 10:06:07

标签: php soap

您好任何人都可以解释我在PHP下面实现SOAP XML,我看到一些问题是使用CURL处理的,但我想在PHP中使用SoapClient库任何人都可以帮助我。

我看到有些人在PHP下面的代码中使用了简单的SOAP,我怎样才能在代码中实现相同的方式

<?php 
//Create the client object
$soapclient = new SoapClient('http://www.example.com:8080/test/services/test?wsdl');

//Use the functions of the client, the params of the function are in 
//the associative array
$params = array(
'locationID' => '19087525238255',
'custFirstName' => 'Seure',
'custLastName' => 'Install',
'customerType' => 'RESI'
);
$response = $soapclient->octService($params);

var_dump($response);

?>

SOAP XML

<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:com = "http://test.com/">
    <soapenv:Header/>
    <soapenv:Body>
        <com:OCTService>
            <locationID>19087525238255</locationID>
            <customer>
                <custFirstName>JOHN</custFirstName>
                <custLastName>ADAM</custLastName>
                <customerType>RESI</customerType>
            </customer>
            <order>
                <orderScheduleType>NoSchedule</orderScheduleType>
                <orderScheduledate/>
                <reasonCode>NT</reasonCode>
                <salesRep>0001</salesRep>
            </order>
            <Equipments>
                <equipment>
                    <serialNumber>*</serialNumber>
                    <type>N</type>
                </equipment>
                <equipment>
                    <serialNumber>*</serialNumber>
                    <type>NH</type>
                </equipment>
                <equipment>
                    <serialNumber>*</serialNumber>
                    <type>NH</type>
                </equipment>
            </Equipments>
            <csgServiceCodes>
                <CSGServiceCode>
                    <rateCode>SR002</rateCode>
                    <packageCode/>
                </CSGServiceCode>
                <CSGServiceCode>
                    <rateCode>BA</rateCode>
                    <packageCode/>
                </CSGServiceCode>
            </csgServiceCodes>
            <voiceFeatures>
                <nativeNumbersCount>0</nativeNumbersCount>
                <portedNmbers>?</portedNmbers>
            </voiceFeatures>
            <HuntGroup>
                <huntGroupType>?</huntGroupType>
            </HuntGroup>
        </com:OCTService>
    </soapenv:Body>
</soapenv:Envelope>

1 个答案:

答案 0 :(得分:1)

我无法使用CURL POST。

重要的是 SOAPAction ,您可以在WSDL文档中使用

    $headers = array(
     "Accept-Encoding: gzip,deflate",
     "Content-Type: text",
     "Cache-Control: no-cache",
     "Username: yourusername",
     "Password: password",                 
     "SOAPAction: urn:OCTService", 
     "Content-length: ".strlen($xml_post_string),
     ); //SOAPAction: your op URL


     $ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_USERPWD, $soapUser.":".$soapPassword); // username and password - declared at the top of the doc
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

// converting
$response = curl_exec($ch); 
echo $response;
curl_close($ch);

// converting
$response1 = str_replace("<soap:Body>","",$response);
$response2 = str_replace("</soap:Body>","",$response1);

// convertingc to XML
$parser = simplexml_load_string($response2);