Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从cURL请求到Web服务的SOAP解析_Php_Web Services_Soap_Curl_Wsdl - Fatal编程技术网

Php 从cURL请求到Web服务的SOAP解析

Php 从cURL请求到Web服务的SOAP解析,php,web-services,soap,curl,wsdl,Php,Web Services,Soap,Curl,Wsdl,我目前有一个脚本解析来自Web服务的数据,到目前为止我找到的所有示例都告诉我,结果只是被解析为XML,但如果结果实际上不是有效的XML,这就有点困难了 发送到Web服务的我的XML请求: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.bring.no/logistics/shippingguide/1.0"

我目前有一个脚本解析来自Web服务的数据,到目前为止我找到的所有示例都告诉我,结果只是被解析为XML,但如果结果实际上不是有效的XML,这就有点困难了

发送到Web服务的我的XML请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.bring.no/logistics/shippingguide/1.0"> 
   <soapenv:Header/> 
   <soapenv:Body> 
      <ns:ShippingGuideRequest> 
         <ns:UserInformation> 
            <ns:Usercode>ae34ab27-2023-41f5-b800-013f0d0a6015</ns:Usercode> 
         </ns:UserInformation> 
         <ns:ProductIds> 
            <ns:ProductId>SERVICEPAKKE</ns:ProductId> 
         </ns:ProductIds> 
         <ns:Packages> 
        <ns:Package packageId="7,"> 
               <ns:GrossWeight unitCode="GRM">500</ns:GrossWeight> 
               <ns:FromPostalCode>4045</ns:FromPostalCode> 
               <ns:ToPostalCode>4045</ns:ToPostalCode> 
            </ns:Package> 
         </ns:Packages> 
      </ns:ShippingGuideRequest> 
   </soapenv:Body> 
</soapenv:Envelope>
我不能使用PHP5及以上版本附带的内置SoapClient,因为我不赞成强制我的用户配置它,因为我经历过许多测试用例都没有配置它。 我尝试过使用普通套接字和cURL来执行请求,但这并没有产生任何不同的结果

我从电话中得到的结果如下:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><ns:ShippingGuideResponse xmlns:ns="http://www.bring.no/logistics/shippingguide/1.0"><ns:Packages><ns:Package packageId="7,"><ns:Product><ns:ProductId>SERVICEPAKKE</ns:ProductId><ns:GuiInformation><ns:SortOrder>11</ns:SortOrder><ns:MainDisplayCategory>Hent sendingen selv</ns:MainDisplayCategory><ns:SubDisplayCategory/><ns:DisplayName>På postkontor eller post i butikk</ns:DisplayName><ns:ProductName>Klimanøytral Servicepakke</ns:ProductName><ns:DescriptionText>Madla. Åpningstider Man - Fre: 1000-1800, Lør: 1000-1500</ns:DescriptionText><ns:HelpText>Sendingen er en Klimanøytral Servicepakke som blir levert til mottakers postkontor/ post i butikk. Mottaker kan velge å hente sendingen på et annet postkontor/post i butikk enn sitt lokale. Mottaker varsles om at sendingen er ankommet via SMS, e-post eller hentemelding i postkassen. Transporttid er normalt 1-3 virkedager, avhengig av strekning. Sendingen kan spores ved hjelp av sporingsnummeret.</ns:HelpText><ns:Tip/></ns:GuiInformation><ns:Price currencyIdentificationCode="NOK"><ns:PackagePriceWithoutAdditionalServices><ns:AmountWithoutVAT>66.00</ns:AmountWithoutVAT><ns:VAT>16.50</ns:VAT><ns:AmountWithVAT>82.50</ns:AmountWithVAT></ns:PackagePriceWithoutAdditionalServices></ns:Price><ns:ExpectedDelivery><ns:WorkingDays>1</ns:WorkingDays><ns:UserMessage/><ns:AlternativeDeliveryDates/></ns:ExpectedDelivery></ns:Product></ns:Package></ns:Packages><ns:TraceMessages><ns:Message>You are using an outdated schema version (1). Most recent schema version is 4.</ns:Message></ns:TraceMessages></ns:ShippingGuideResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
如您所见,XML请求缺少XML开始标记,因此PHP中的SimpleXMLElement和类似工具无法解释它

最后,是我用来发送请求的代码,希望它是一些琐碎的东西,比如我缺少的头或类似的头

$ch=curl_inithttp://fraktguide.bring.no/fraktguide/ws/1.0/;

curl_setopt$ch,CURLOPT_HTTPHEADER,数组的内容类型:text/xml;字符集=utf-8','内容长度:'。strlen$xml

curl_setopt$ch,CURLOPT_POST,1

curl_setopt$ch,CURLOPT_超时,30

curl_setopt$ch,CURLOPT_端口,80

curl_setopt$ch,CURLOPT_FOLLOWLOCATION,1

curl_setopt$ch,CURLOPT_RETURNTRANSFER,1

curl_setopt$ch,CURLOPT_SSL_VERIFYPEER,0

curl_setopt$ch,CURLOPT_SSL_VERIFYHOST,0

curl_setopt$ch,CURLOPT_POSTFIELDS$xml

$result=curl\u exec$ch


数据已被提取,但在没有参考点的情况下读取数据似乎是一个问题

解决方案是使用XPath遍历它