如何使用PHP从SOAP响应中获取值?

时间:2015-09-26 16:54:56

标签: php soap

我试图使用PHP从SOAP响应中获取值。无论我做了什么,我都无法获得变量中的值。请帮忙。

我正在使用WordPress的wp_remote_post()提交表单并获得回复。

$response = wp_remote_post( $url, $args);
$xml = $response['body'];  

以下是SOAP中的响应:

<soap:envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:body>
        <sendtransactionsactionresponse xmlns="http://tempuri.org/">
            <sendtransactionsactionresult>113</sendtransactionsactionresult>
        </sendtransactionsactionresponse>
    </soap:body>
</soap:envelope>  

以下是我已经尝试过的内容:

// Din't work
$value = $xml->body->sendtransactionsactionresponse->sendtransactionsactionresult;

// Din't work
$value = $xml['body']['sendtransactionsactionresponse']['sendtransactionsactionresult'];

//Returned an empty Object
simplexml_load_string($xml);

尝试了一些其他的东西,但都没有奏效。我需要在变量中获取sendtransactionsactionresult的值来进行比较。请帮忙。

由于

修改
var-dump的{​​{1}}。

$response

3 个答案:

答案 0 :(得分:1)

根据WordPress wp_remote_post()函数文档,http响应结果将在数组中。 在您的var_dump数据中, body 键作为有效的XML字符串存在。

您只需清除xml soap:前缀

$response = wp_remote_post( 'http://69.94.141.22/SaveTransactions.asmx', $args);

if(is_wp_error($response))
    return $response->get_error_message();

$xml = str_replace('soap:', '', $response['body']);

$obj = simplexml_load_string($xml);

$result = $obj->body->sendtransactionsactionresponse->sendtransactionsactionresult;

print_r($result);

我尝试了代码,它运行正常! https://eval.in/440149

答案 1 :(得分:0)

这是一种方式:

$foo = new SimpleXMLElement($xmlstr);
$bar = json_decode(json_encode($foo));
print_r($bar);

我确定你可以弄明白其余部分。

答案 2 :(得分:0)

您只需要使用正确的方法从XML字符串中检索有效对象,在这里:

$response_body = wp_remote_retrieve_body($response);
$xml  = simplexml_load_string($response_body);
$value = $xml->body->sendtransactionsactionresponse->sendtransactionsactionresult;