Как читать мыльный ответ xml в php

Это мой XML- RebillCustomerID Soap Response, мне нужно получить RebillCustomerID Как я могу это сделать?

  <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Header><eWAYHeader xmlns="http://www.eway.com.au/gateway/rebill/manageRebill"> <eWAYCustomerID>87654321</eWAYCustomerID><Username>test@eway.com.au</Username> <Password>test123</Password></eWAYHeader></soap:Header><soap:Body> <CreateRebillCustomerResponse xmlns="http://www.eway.com.au/gateway/rebill/manageRebill"><CreateRebillCustomerResult> <Result>Success</Result><ErrorSeverity /><ErrorDetails /> <RebillCustomerID>90246</RebillCustomerID></CreateRebillCustomerResult> </CreateRebillCustomerResponse></soap:Body></soap:Envelope><pre></pre> 

попробуйте код ниже. Я предполагаю, что ваш ответ xml находится в переменной $soapXMLResult

 $soap = simplexml_load_string($soapXMLResult); $response = $soap->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children()->CreateRebillCustomerResponse; $customerId = (string) $response->CreateRebillCustomerResult->RebillCustomerID; echo $customerId; 

Как я это сделал, создаю eway soap и получаю результат мыла, может помочь другим!

  <?php $URL = "https://www.eway.com.au/gateway/rebill/test/manageRebill_test.asmx?wsdl"; $option = array("trace"=>true); $client = new SOAPClient($URL, $option); $functions = $client->__getFunctions(); $headeroptions=array('eWAYCustomerID'=>"87654321",'Username'=>"test@eway.com.au","Password"=>"test123"); $header = new SOAPHeader('http://www.eway.com.au/gateway/rebill/manageRebill', 'eWAYHeader',$headeroptions); $bodyoptions = array( "CreateRebillCustomer" => array( "customerTitle" => "Mr", "customerFirstName"=>"Muhammad", "customerLastName"=>"Shahzad", "customerAddress"=>"cust ome rAddress", "customerSuburb"=>"customer Suburb", "customerState"=>"ACT", "customerCompany"=>"customer Company", "customerPostCode"=>"2345", "customerCountry"=>">Australia", "customerEmail"=>"test@gamil.com", "customerFax"=>"0298989898", "customerPhone1"=>"0297979797", "customerPhone2"=>"0297979797", "customerRef"=>"Ref123", "customerJobDesc"=>"customerJobDesc", "customerComments"=>"customerComments", "customerURL" => "http://www.acme.com.au" ) ); try{ $response = $client->__soapCall("CreateRebillCustomer", $bodyoptions,NULL,$header,$outputHeader); //echo $client->__getLastRequest(); //$response = $client->CreateRebillCustomer($bodyoptions); //echo "<pre>";echo "<br/>"; // print_r($response); echo $result = $response->CreateRebillCustomerResult->Result;echo "<br/>"; echo $customerId = $response->CreateRebillCustomerResult->RebillCustomerID;echo "<br/>"; echo "<br/>"; if($result=='Success' AND $customerId){ echo 'Member Created at eWay Successfully!...<br/>'; echo 'Creating Recurring Billing Cycle on eWay,Please wait......<br/>'; //$UpdateRebillCustomer = CreateRebillEvent($customerId); //print_r($UpdateRebillCustomer); } else{ echo $ErrorSeverity = $response->CreateRebillCustomerResult->ErrorSeverity;echo "<br/>"; echo $ErrorDetails = $response->CreateRebillCustomerResult->ErrorDetails;echo "<br/>"; } } catch(SOAPFault $e){ print $e; } if($customerId){ $bodyoptions2 = array( "CreateRebillEvent " => array( "RebillCustomerID" => $customerId, "RebillInvRef" => "Ref123", "RebillInvDes"=>"description", "RebillCCName"=>"Mr Andy Person", "RebillCCNumber"=>"4444333322221111", "RebillCCExpMonth"=>"12", "RebillCCExpYear"=>"15", "RebillInitAmt"=>"100", "RebillInitDate"=>date('d/m/Y'), "RebillRecurAmt"=>"200", "RebillStartDate"=>date('d/m/Y'), "RebillInterval"=>"31", "RebillIntervalType"=>"1", "RebillEndDate"=>"31/12/2013", ) ); try{ $response = $client->__soapCall("CreateRebillEvent", $bodyoptions2,NULL,$header,$outputHeader); //echo $client->__getLastRequest(); //print_r($response); echo "<br/>"; echo $result2 = $response->CreateRebillEventResult->Result;echo "<br/>"; echo $RebillCustomerID = $response->CreateRebillEventResult->RebillCustomerID;echo "<br/>"; if($result2=='Success'){ echo 'Recurring Cycle Created Successfully at eWay!...<br/>'; echo 'Member Id is ===>'.$RebillCustomerID; //$UpdateRebillCustomer = CreateRebillEvent($customerId); //print_r($UpdateRebillCustomer); } else{ echo $ErrorSeverity = $response->CreateRebillEventResult->ErrorSeverity;echo "<br/>"; echo $ErrorDetails = $response->CreateRebillEventResult->ErrorDetails;echo "<br/>"; } } catch(SOAPFault $e){ print $e; } } ?> 

Если вы пишете клиент для SOAP-службы и хотите манипулировать или тестировать свой ответ, помещая его в локальный файл и анализируя его (возможно, их ответ имеет ошибки и вы хотите исправить ошибки самостоятельно), вы можете переопределить URL-адрес что ваш soapClient использует для вызова методов, __soapCall() вызывая __soapCall() :

 $result = $this->soap_client->__soapCall( 'function_call_name', ['location' => $file_location] ); 

Где $file_location – это абсолютный или относительный путь к вашей копии ответа xml. То, что вы указываете в качестве имени функции, не имеет значения, поскольку клиент-мыльщик получит тот же ответ xml, независимо от того, какую функцию вы пытаетесь вызвать таким образом. Единственное, что имеет значение, это то, что ваш файл $file_location корректен и что файл xml имеет правильные разрешения для чтения apache, если вы запустите его в браузере.

Затем вы можете var_dump($response) и найти нужный вам узел, а не использовать simplexml_load_string . Если вы сделаете это так, вы можете легко поменять свой xml на свой ответ позже.