我试图使用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
答案 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;