gpt4 book ai didi

php - 如何将 SOAP 响应转换为 PHP 数组?

转载 作者:IT王子 更新时间:2023-10-29 00:14:02 28 4
gpt4 key购买 nike

我无法在 PHP 中将 SOAP 响应转换为数组。

这是代码

 $response = $client->__doRequest($xmlRequest,$location,$action,1);

这是 SOAP 响应。

<soap:envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:body>
<searchflightavailability33response xmlns="http://FpwebBox.Fareportal.com/Gateway.asmx">
<searchflightavailability33result>
&lt;Fareportal&gt;&lt;FpSearch_AirLowFaresRS&gt;&lt;CntKey&gt;1777f5a7-7824-46ce-a0f8-33d5e6e96816&lt;/CntKey&gt;&lt;Currency CurrencyCode="USD"/&gt;&lt;OriginDestinationOptions&gt;&lt;OutBoundOptions&gt;&lt;OutBoundOption segmentid="9W7008V21Feb14"&gt;&lt;FlightSegment etc....
</searchflightavailability33result>
</searchflightavailability33response>
</soap:body>
</soap:envelope>;

我使用以下方法转换为数组,但我得到的是空输出。

1.echo '<pre>';print_r($client__getLastResponse());
2.echo '<pre>';print_r($response->envelope->body->searchflightavailability33response);
3.echo '<pre>';print_r($client->SearchFlightAvailability33($response));
4.simplexml_load_string($response,NULL,NULL,"http://schemas.xmlsoap.org/soap/envelope/");

5.echo '<pre>';print_r($client->SearchFlightAvailability33($response));

请多多指教。

最佳答案

以下 SOAP 响应结构可以使用前面方法的组合轻松转换为数组。仅使用函数“simplexml_load_string”删除冒号“:”在某些情况下返回 null。

SOAP 响应

<S:Envelope
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:transaccionResponse
xmlns:ns2="http://ws.iatai.com/">
<respuestaTransaccion>
<idTransaccion>94567</idTransaccion>
<referencia>3958</referencia>
<idEstado>3</idEstado>
<nombreEstado>Declinada</nombreEstado>
<codigoRespuesta>202</codigoRespuesta>
<valor>93815.0</valor>
<iva>86815.0</iva>
<baseDevolucion>0.0</baseDevolucion>
<isoMoneda>COP</isoMoneda>
<fechaProcesamiento>24-07-2015 12:18:40 PM</fechaProcesamiento>
<mensaje>REJECT</mensaje>
<tarjetaRespuesta>
<idFranquicia>1</idFranquicia>
<nombreFranquicia>VISA</nombreFranquicia>
<numeroBin>411111</numeroBin>
<numeroProducto>1111</numeroProducto>
</tarjetaRespuesta>
<procesadorRespuesta>
<idProcesador>3</idProcesador>
</procesadorRespuesta>
</respuestaTransaccion>
</ns2:transaccionResponse>
</S:Body>
</S:Envelope>

PHP 转换:

$response = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response);
$xml = new SimpleXMLElement($response);
$body = $xml->xpath('//SBody')[0];
$array = json_decode(json_encode((array)$body), TRUE);
print_r($array);

结果:

Array
(
[ns2transaccionResponse] => Array
(
[respuestaTransaccion] => Array
(
[idTransaccion] => 94567
[referencia] => 3958
[idEstado] => 3
[nombreEstado] => Declinada
[codigoRespuesta] => 202
[valor] => 93815.0
[iva] => 86815.0
[baseDevolucion] => 0.0
[isoMoneda] => COP
[fechaProcesamiento] => 24-07-2015 12:18:40 PM
[mensaje] => REJECT
[tarjetaRespuesta] => Array
(
[idFranquicia] => 1
[nombreFranquicia] => VISA
[numeroBin] => 411111
[numeroProducto] => 1111
)

[procesadorRespuesta] => Array
(
[idProcesador] => 3
)

)

)

)

关于php - 如何将 SOAP 响应转换为 PHP 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777075/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com