user2841243
user2841243

Reputation: 81

How to read soap response xml in php

This is my Soap Response xml,I need to get RebillCustomerID How I can do this?

 <?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>[email protected]</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>

Upvotes: 4

Views: 50097

Answers (3)

Frug
Frug

Reputation: 448

If you are writing a client for a SOAP service and you want to manipulate or test their response by placing it in a local file and parsing that (maybe their response has errors and you want to fix the errors yourself), you can override the URL that your soapClient uses to call methods by calling __soapCall() directly:

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

Where $file_location is the absolute or relative path to your copy of their xml response. What you put as your function call name doesn't matter, since the soap client will get the same xml response regardless of what function you try to call this way. The only thing that matters is that your $file_location be correct and that the xml file has the correct permissions to be read by apache if you run this in a browser.

You can then var_dump($response) and find the node you need rather than using simplexml_load_string. If you do it this way you can easily swap out your xml for their response later on.

Upvotes: 0

Muhammad Shahzad
Muhammad Shahzad

Reputation: 9652

How I did, create eway soap request and get eway soap result,may help others!

 <?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'=>"[email protected]","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"=>"[email protected]",
                                      "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;
                     }

                     }

                  ?>

Upvotes: 1

Ram Sharma
Ram Sharma

Reputation: 8809

try the code below. I am assuming your xml response is in $soapXMLResult variable

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

Upvotes: 17

Related Questions