2013-08-14 3 views
0

Вот запрос SOAP детали:запрос SOAP с помощью SoapClient

$keyword = 'software'; //some keyword 


     $soapUrl = "http://auctions.godaddy.com/gdAuctionsWSAPI/gdAuctionsBiddingWS.asmx"; // asmx URL of WSDL 
     $soapUser = "XXX"; // username 
     $soapPassword = "XXX"; // password 

     $xml_post_string = '<?xml version="1.0" encoding="utf-8"?> 
        <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
         <soap:Body> 
         <GetAuctionList2 xmlns="GdAuctionsBiddingWSAPI"> 
          <pageNumber>1</pageNumber> 
          <rowsPerPage>5</rowsPerPage> 
          <keyWord>'. $keyword .'</keyWord> 
          <searchType>beginswith</searchType> 
          <apiKey>XXXXX</apiKey> 
         </GetAuctionList2> 
         </soap:Body> 
        </soap:Envelope> 
       '; 

     $headers = array(
         "Content-type: text/xml;charset=\"utf-8\"", 
         "Accept: text/xml", 
         "Cache-Control: no-cache", 
         "Pragma: no-cache", 
         "SOAPAction: GdAuctionsBiddingWSAPI/GetAuctionList2", 
         "Content-length: ".strlen($xml_post_string) 
        ); 

     $url = $soapUrl; 

     // PHP cURL for https connection with auth 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_USERPWD, $soapUser.":".$soapPassword); // username and password - declared at the top of the doc 
     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
     curl_setopt($ch, CURLOPT_POST, true); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 


     $response = curl_exec($ch); 
     curl_close($ch);   

     var_dump($response); // Shows result 

     $response1 = str_replace("<soap:Body>","",$response); 
     $response2 = str_replace("</soap:Body>","",$response1); 

     // convertingc to XML 
     $parser = simplexml_load_string($response2); // getting error here 
     // user $parser to get your data out of XML response and to display it. 

Теперь Как сделать запрос SoapClient и получить ответ в виде массива? Любая помощь должна быть оценена. Благодаря

+0

use curl commands – Satya

+0

@Satya, я использовал CURL, но я не могу разобрать ответ. Ответ - XML ​​SOAP, и я попробовал преобразовать его в массив, но не смог, http://stackoverflow.com/questions/18215080/convert-xml-soap-response-into-php-array, поэтому теперь ищем альтернативный вариант. –

+0

вы можете попробовать то же самое с помощью firefox и опубликовать вывод, который вы получаете в firebug – Satya

ответ

2

Ниже вы можете найти рабочий пример:

<?php 
$keyword = 'software'; //some keyword 


    $soapUrl = "http://auctions.godaddy.com/gdAuctionsWSAPI/gdAuctionsBiddingWS.asmx"; // asmx URL of WSDL 
    $soapUser = "xxx"; // username 
    $soapPassword = "xxx"; // password 

    $xml_post_string = '<?xml version="1.0" encoding="utf-8"?> 
       <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
        <soap:Body> 
        <GetAuctionList2 xmlns="GdAuctionsBiddingWSAPI"> 
         <pageNumber>1</pageNumber> 
         <rowsPerPage>5</rowsPerPage> 
         <keyWord>'. $keyword .'</keyWord> 
         <searchType>beginswith</searchType> 
         <apiKey>somekey</apiKey> 
        </GetAuctionList2> 
        </soap:Body> 
       </soap:Envelope> 
      '; 

    $headers = array(
        "Content-type: text/xml;charset=\"utf-8\"", 
        "Accept: text/xml", 
        "Cache-Control: no-cache", 
        "Pragma: no-cache", 
        "SOAPAction: GdAuctionsBiddingWSAPI/GetAuctionList2", 
        "Content-length: ".strlen($xml_post_string) 
       ); 

    $url = $soapUrl; 

    // PHP cURL for https connection with auth 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_USERPWD, $soapUser.":".$soapPassword); // username and password - declared at the top of the doc 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 


    $response = curl_exec($ch); 
    $k=xml2array($response); 

    curl_close($ch);   


    function xml2array($content, $get_attributes = 1, $priority = 'tag') 
{ 
$contents = ""; 
if (!function_exists('xml_parser_create')) 
{ 
    return array(); 
} 
$parser = xml_parser_create(''); 
$contents = $content; 

xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); 
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); 
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); 
xml_parse_into_struct($parser, trim($contents), $xml_values); 
xml_parser_free($parser); 
if (!$xml_values) 
    return; //Hmm... 
$xml_array = array(); 
$parents = array(); 
$opened_tags = array(); 
$arr = array(); 
$current = & $xml_array; 
$repeated_tag_index = array(); 
foreach ($xml_values as $data) 
{ 
    unset ($attributes, $value); 
    extract($data); 
    $result = array(); 
    $attributes_data = array(); 
    if (isset ($value)) 
    { 
     if ($priority == 'tag') 
      $result = $value; 
     else 
      $result['value'] = $value; 
    } 
    if (isset ($attributes) and $get_attributes) 
    { 
     foreach ($attributes as $attr => $val) 
     { 
      if ($priority == 'tag') 
       $attributes_data[$attr] = $val; 
      else 
       $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr' 
     } 
    } 
    if ($type == "open") 
    { 
     $parent[$level -1] = & $current; 
     if (!is_array($current) or (!in_array($tag, array_keys($current)))) 
     { 
      $current[$tag] = $result; 
      if ($attributes_data) 
       $current[$tag . '_attr'] = $attributes_data; 
      $repeated_tag_index[$tag . '_' . $level] = 1; 
      $current = & $current[$tag]; 
     } 
     else 
     { 
      if (isset ($current[$tag][0])) 
      { 
       $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result; 
       $repeated_tag_index[$tag . '_' . $level]++; 
      } 
      else 
      { 
       $current[$tag] = array (
        $current[$tag], 
        $result 
       ); 
       $repeated_tag_index[$tag . '_' . $level] = 2; 
       if (isset ($current[$tag . '_attr'])) 
       { 
        $current[$tag]['0_attr'] = $current[$tag . '_attr']; 
        unset ($current[$tag . '_attr']); 
       } 
      } 
      $last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1; 
      $current = & $current[$tag][$last_item_index]; 
     } 
    } 
    elseif ($type == "complete") 
    { 
     if (!isset ($current[$tag])) 
     { 
      $current[$tag] = $result; 
      $repeated_tag_index[$tag . '_' . $level] = 1; 
      if ($priority == 'tag' and $attributes_data) 
       $current[$tag . '_attr'] = $attributes_data; 
     } 
     else 
     { 
      if (isset ($current[$tag][0]) and is_array($current[$tag])) 
      { 
       $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result; 
       if ($priority == 'tag' and $get_attributes and $attributes_data) 
       { 
        $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data; 
       } 
       $repeated_tag_index[$tag . '_' . $level]++; 
      } 
      else 
      { 
       $current[$tag] = array (
        $current[$tag], 
        $result 
       ); 
       $repeated_tag_index[$tag . '_' . $level] = 1; 
       if ($priority == 'tag' and $get_attributes) 
       { 
        if (isset ($current[$tag . '_attr'])) 
        { 
         $current[$tag]['0_attr'] = $current[$tag . '_attr']; 
         unset ($current[$tag . '_attr']); 
        } 
        if ($attributes_data) 
        { 
         $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data; 
        } 
       } 
       $repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken 
      } 
     } 
    } 
    elseif ($type == 'close') 
    { 
     $current = & $parent[$level -1]; 
    } 
} 
return ($xml_array); 
} 

?> 

Вы должны добавить массив итерацию Войти самостоятельно.

+0

Он не возвращает ответ желания.http: //screencast.com/t/pV10PVSg3AR. Он должен вернуть список аукционов, как вы видите, когда я использую var_dump. GetAuctionList2Result пуст. –

+0

Вы пробовали делать print_r ($ k); – Satya

+0

Да, я использовал print_r ($ k); –

1

Это должно работать:

var $soapUrl = "http://auctions.godaddy.com/gdAuctionsWSAPI/gdAuctionsBiddingWS.asmx?WSDL"; 
$client = new SoapClient($soapUrl); 
$result = $client->GetAuctionList2(array('pageNumber'=>'1','rowsPerPage'=>'5','keyword'=>$keyword,'searchType'=>'beginswith','apiKey'=>'myAPIKey')); 

Вам не нужно создавать XML и все в таком подходе. Результатом будет массив объектов, который вы можете print_r(), чтобы увидеть содержимое как массив.

+0

Он возвращает некоторый пустой массив 'stdClass Object ([GetAuctionList2Result] =>)'. Я просто разместил весь код, не могли бы вы увидеть код с моими комментариями. Спасибо –

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