如何在 php 中读取 soap 响应 xml


How to read soap response xml in php

这是我的肥皂响应xml,我需要得到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 肥皂请求并获得 eway 肥皂结果,可能会帮助其他人!

 <?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 服务编写客户端,并且想要通过将响应放在本地文件中并对其进行解析来操作或测试其响应(也许他们的响应有错误,并且您希望自己修复错误(,则可以通过直接调用 soapClient 来覆盖用于调用方法的 URL __soapCall()

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

其中$file_location是其 xml 响应副本的绝对或相对路径。你输入什么作为函数调用名并不重要,因为无论你尝试以这种方式调用什么函数,SOAP 客户端都会得到相同的 xml 响应。唯一重要的是您的$file_location是正确的,并且如果您在浏览器中运行该文件,则 xml 文件具有正确的权限,可以由 apache 读取。

然后,您可以var_dump($response)并找到所需的节点,而不是使用 simplexml_load_string 。如果你这样做,你可以很容易地把你的xml换成他们的响应。