【发布时间】:2014-06-23 10:35:22
【问题描述】:
我想达到什么目的:我想从网络服务器获得响应。有了这个回复,我有一些需要提取的数据。我已经到了可以接收来自网络服务的响应的地步了。
问题是什么:我使用 cURL 从服务器获得数据响应,但我无法从答案中提取数据,因为它总是返回一个空值。
我尝试了什么: 我试图在一个数组中解析结果(没有返回值) 我试图用新的 SimpleXMLElement (空对象)解析结果 我尝试使用 JSON 对其进行编码,然后再次对其进行解码(空数组) 我试图爆炸结果(返回没有好的值)
我不知道该怎么办了,有人可以看看。
我的 cURL 代码:
$xml = '
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://dpd.com/common/service/types/Authentication/2.0" xmlns:ns1="http://dpd.com/common/service/types/ShipmentService/3.1">
<soapenv:Header>
<ns:authentication>
<delisId>'.$delisId.'</delisId>
<authToken>'.$auth_token.'</authToken>
<messageLanguage>'.$messageLanguage.'</messageLanguage>
</ns:authentication>
</soapenv:Header>
<soapenv:Body>
<ns1:storeOrders>
<printOptions>
<printerLanguage>'.$printerLanguage.'</printerLanguage>
<paperFormat>'.$paperFormat.'</paperFormat>
</printOptions>
<order>
<generalShipmentData>
<identificationNumber>'.$identificationNumber.'</identificationNumber>
<sendingDepot>'.$sendingDepot.'</sendingDepot>
<product>'.$product.'</product>
<mpsCompleteDelivery>'.$mpsCompleteDelivery.'</mpsCompleteDelivery>
<sender>
<name1>'.$send_name.'</name1>
<street>'.$send_street.'</street>
<country>'.$send_country.'</country>
<zipCode>'.$send_zipcode.'</zipCode>
<city>'.$send_city.'</city>
<customerNumber>'.$send_customerNumber.'</customerNumber>
</sender>
<recipient>
<name1>'.$rec_name.'</name1>
<street>'.$rec_street.'</street>
<state>'.$rec_state.'</state>
<country>'.$rec_country.'</country>
<zipCode>'.$rec_zipcode.'</zipCode>
<city>'.$rec_city.'</city>
</recipient>
</generalShipmentData>
<parcels>
<parcelLabelNumber>'.$parcelLabelNumber.'</parcelLabelNumber>
</parcels>
<productAndServiceData>
<orderType>'.$orderType.'</orderType>
</productAndServiceData>
</order>
</ns1:storeOrders>
</soapenv:Body>
</soapenv:Envelope>
';
$headers = array(
"POST HTTP/1.1",
"Content-type: application/soap+xml; charset=\"utf-8\"",
"SOAPAction: \"http://dpd.com/common/service/ShipmentService/3.1/storeOrders\"",
"Content-length: ".strlen($xml)
);
$url = 'https://public-ws-stage.dpd.com/services/ShipmentService/V3_1/';
$cl = curl_init();
curl_setopt($cl, CURLOPT_URL, $url);
curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($cl, CURLOPT_POST, 1);
curl_setopt($cl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($cl, CURLOPT_POSTFIELDS, "$xml");
curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1);
$output_cl = curl_exec($cl);
curl_close($cl);
//return $output_cl;
$output_xml = new SimpleXMLElement($output_cl);
foreach($output_xml->orderresult as $orderresult)
{
foreach($orderresult->parcellabelspdf as $pdf)
{
return $pdf;
}
}
来自服务器的响应(我认为是字符串格式,但不确定):
<soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:body>
<ns2:storeordersresponse xmlns:ns2="http://dpd.com/common/service/types/ShipmentService/3.1">
<orderresult>
<parcellabelspdf>pdflabel</parcellabelspdf>
<shipmentresponses>
<identificationnumber>idnumber</identificationnumber>
<mpsid>mpsid</mpsid>
<parcelinformation>
<parcellabelnumber>labelnumber</parcellabelnumber>
</parcelinformation>
</shipmentresponses>
</orderresult>
</ns2:storeordersresponse>
</soap:body>
</soap:envelope>
我想提取 parcellabelspdf 值和 mpsid 值。
【问题讨论】:
-
我假设代码的第二部分是您从
echo $output_cl;获得的代码。如果没有,请给出echo的输出 -
@Athafoud 是的,这确实是 echo 的输出
-
你为什么还不使用SoapClient?
-
@Jack 我一开始尝试使用 SoapClient,但我得到了一个主要的异常错误,没有更多的错误细节。所以我尝试使用 cURL 代替。但现在一切正常。感谢大家的帮助!