2015-09-23 2 views
3

Я отправляю пользовательские данные платежного шлюза с помощью следующего сценария:Как назначить переменные из объекта SimpleXMLElement?

$map_url = "https://paynetzuat.atomtech.in/paynetz/epi/fts?login=160&[email protected]&ttype=NBFundTransfer&prodid=NSE&amt=50&txncurr=INR&txnscamt=0&clientcode=007&txnid=12345&date=19/09/2015&custacc=1234567890&udf1=vinodBisen&[email protected]&udf3=9890933093&udf4=mybillingaddress&ru=http://mysite.in/thankyou.html"; 

if (($response_xml_data = file_get_contents($map_url))===false) { 
    echo "Error fetching XML\n"; 
} else { 
    libxml_use_internal_errors(true); 
    $data = simplexml_load_string($response_xml_data); 

    if (!$data) { 
     echo "Error loading XML\n"; 
     foreach(libxml_get_errors() as $error) { 
      echo "\t", $error->message; 
     } 
    } else { 
     echo '<pre>'; 
     print_r($data); 
     echo '</pre>'; 
    } 
} 

И получить ответ, как показано ниже:

SimpleXMLElement Object 
(
    [MERCHANT] => SimpleXMLElement Object 
     (
      [RESPONSE] => SimpleXMLElement Object 
       (
        [url] => https://mysite.api.url.com/fts 
        [param] => Array 
         (
          [0] => NBFundTransfer 
          [1] => 524014 
          [2] => K30ZsUL2Z5mD8NN1xS6FxIuV0YlOS2e1KPEKv0fT0Ms%3D 
          [3] => 1 
         )  
       )  
     )  
) 

Я хочу, чтобы каждый ответ в отдельную переменную для создания ссылку, использующую динамический ответ, полученный API-интерфейсом платежного шлюза.

ответ

0

Вы можете перебрать RESPONSE, а затем над param для извлечения имен и значений литья их string:

foreach($data->MERCHANT->RESPONSE as $response) { 

    $responseData = array(
     'url' => (string)$response->url 
    ); 

    foreach($response->param as $param) { 
     $responseData[(string)$param->attributes()->name] = (string)$param; 
    } 

    print_r($responseData); 
} 

Выход:

Array 
(
    [url] => https://paynetzuat.atomtech.in/paynetz/epi/fts 
    [ttype] => NBFundTransfer 
    [tempTxnId] => 524142 
    [token] => BL%2BmNz1kIv9%2FzTk8ei9iAxNmMGUJtt5jMip9Bfw1hG0%3D 
    [txnStage] => 1 
) 

Тогда, если вы хотите, чтобы повторить token, вы мог бы просто сделать это:

echo $responseData['token']; 

Если есть только один ответ, вы можете можете пропустить Перебор RESPONSE:

$responseData = array(
    'url' => (string)$data->MERCHANT->RESPONSE->url 
); 

foreach($data->MERCHANT->RESPONSE->param as $param) { 
    $responseData[(string)$param->attributes()->name] = (string)$param; 
} 

print_r($responseData); 
+0

Спасибо :) это сработало! –

Смежные вопросы