Search code examples
phpxmlparsingebay-api

Display XML as response in PHP with eBay API


Following tutorial shows how to display data as HTML based on that I just need to show response of XML as opposed to parsing it. I have tried to find solution but didn't have any luck. Any help will be appreciated.

<?php

$endpoint = 'http://svcs.ebay.com/services/search/FindingService/v1';  // URL to call
$query = 'iphone';                  // Supply your own query keywords as needed

// Construct the findItemsByKeywords POST call
// Load the call and capture the response returned by the eBay API
// The constructCallAndGetResponse function is defined below
$resp = simplexml_load_string(constructPostCallAndGetResponse($endpoint, $query));

// Check to see if the call was successful, else print an error
if ($resp->ack == "Success") {
$results = '';  // Initialize the $results variable

// Parse the desired information from the response
foreach($resp->searchResult->item as $item) {
$link  = $item->viewItemURL;
$title = $item->title;

// Build the desired HTML code for each searchResult.item node and append it to $results
$results .= "<tr><td><img src=\"$pic\"></td><td><a href=\"$link\">$title</a></td></tr>";
 }
}
else {  // If the response does not indicate 'Success,' print an error
  $results  = "<h3>Oops! The request was not successful";
  $results .= "AppID for the Production environment.</h3>";
}

function constructPostCallAndGetResponse($endpoint, $query) {
global $xmlrequest;

// Create the XML request to be POSTed
$xmlrequest  = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$xmlrequest .= "<findItemsByKeywordsRequest                  
xmlns=\"http://www.ebay.com/marketplace/search/v1/services\">\n";
$xmlrequest .= "<keywords>";
$xmlrequest .= $query;
$xmlrequest .= "</keywords>\n";
$xmlrequest .= "<paginationInput>\n 
<entriesPerPage>3</entriesPerPage>\n</paginationInput>\n";
$xmlrequest .= "</findItemsByKeywordsRequest>";

// Set up the HTTP headers
$headers = array(
'X-EBAY-SOA-OPERATION-NAME: findItemsByKeywords',
'X-EBAY-SOA-SERVICE-VERSION: 1.3.0',
'X-EBAY-SOA-REQUEST-DATA-FORMAT: XML',
'X-EBAY-SOA-GLOBAL-ID: EBAY-GB',
'X-EBAY-SOA-SECURITY-APPNAME: ******',
'Content-Type: text/xml;charset=utf-8',
);

$session  = curl_init($endpoint);                       // create a curl session
curl_setopt($session, CURLOPT_POST, true);              // POST request type
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);    // set headers using $headers
 array
curl_setopt($session, CURLOPT_POSTFIELDS, $xmlrequest); // set the body of the POST
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);    //

$responsexml = curl_exec($session);                     // send the request
curl_close($session);                                   // close the session
return $responsexml;                                    // returns a string


}  // End of constructPostCallAndGetResponse function
?>

Solution

  • Try changing this (wrapped for clarity):

    $resp = simplexml_load_string(
        constructPostCallAndGetResponse($endpoint, $query)
    );
    

    to this:

    $xmlString = constructPostCallAndGetResponse($endpoint, $query);
    $resp = simplexml_load_string($xmlString);
    // Now you have your raw XML to play with
    echo htmlentities($xmlString);
    // The XML document $resp is available too, if you wish to do
    // something with that
    

    The original feeds the XML response immediately into an XML parser, and creates an XML object with it (look up SimpleXML in the PHP manual for details). Here, we've split the two calls up, so the XML string is now saved in an intermediate variable.