Проблемы с использованием eBay Shopping API с PHP (запрос GetSingleItem) - PullRequest
0 голосов
/ 11 апреля 2020

Я много раз перечитывал документацию и пробовал решения, которые нашел в inte rnet, и я изо всех сил пытаюсь получить нужные данные из eBay Shopping API с помощью запроса GetSingleItem. Я полагаю, что мои заголовки и запрос xml настроены правильно на основе примеров в документации, но я не могу понять, как на самом деле отправить запрос и получить ответ xml. Может ли кто-нибудь помочь мне на следующем шаге, пожалуйста?

Как мне на самом деле отправить запрос и получить ответ?

Мои заголовки и xml запрос выглядят так:

    // Create headers
    $headers = array 
    (
        'X-EBAY-API-APP-ID: ' . $app_id,
        'X-EBAY-API-SITE-ID: ' . $site_id,
        'X-EBAY-API-CALL-NAME: ' . $call_name,
        'X-EBAY-API-VERSION: ' . $version,          
        'X-EBAY-API-REQUEST-ENCODING: ' . $encoding,
    );

    // Generate XML request
    $xml_request = '<?xml version="1.0" encoding="utf-8"?>\n';
    $xml_request .= '<GetSingleItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">\n';
    $xml_request .= '<ItemID>283814879195</ItemID>\n';
    $xml_request .= '<IncludeSelector>Details</IncludeSelector>\n';
    $xml_request .= '</GetSingleItemRequest>';

Каков следующий шаг?

Если это поможет, это мой полный код, который я уже пробовал, но я получаю «Не удалось загрузить», когда я пытаюсь использовать simplexml_load_string. Я также удалил app_id для безопасности:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

function getItem($itemID) {
    $endpoint = 'https://open.api.ebay.com/shopping';

    $app_id = 'XXXXXXXXXXX';
    $site_id = '3';
    $call_name = 'GetSingleItem';
    $version = '863';
    $encoding = 'xml';

    // Create headers to send with CURL request.
    $headers = array 
    (
        'X-EBAY-API-APP-ID: ' . $app_id,
        'X-EBAY-API-SITE-ID: ' . $site_id,
        'X-EBAY-API-CALL-NAME: ' . $call_name,
        'X-EBAY-API-VERSION: ' . $version,          
        'X-EBAY-API-REQUEST-ENCODING: ' . $encoding,
    );

    // Generate XML request
    $xml_request = '<?xml version="1.0" encoding="utf-8"?>\n';
    $xml_request .= '<GetSingleItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">\n';
    $xml_request .= '<ItemID>283814879195</ItemID>\n';
    $xml_request .= '<IncludeSelector>Details</IncludeSelector>\n';
    $xml_request .= '</GetSingleItemRequest>';

    $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, $xml_request); // set the body of the POST
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);    // return values as a string, not to std out

    $responsexml = curl_exec($session);                     // send the request
    curl_close($session);                                   // close the session    

    return $responsexml;                                    // returns a string
}


$itemID = '283814879195';
$resp = simplexml_load_string(getItem($itemID)) or die("Failed to load");

print($resp->Item->ItemID);

?>

1 Ответ

0 голосов
/ 16 апреля 2020

У меня была такая же проблема. Я буду публиковать свой проект на своем Github публично, как только я закончу, так что здесь вы go.

Обратите внимание, что ItemID передается в функцию. Вы можете игнорировать GET в первом бите кода, если вы намерены жестко кодировать itemID.

$ItemID = $_GET['itemid'];
itemDetails($ItemID);

Тогда

function itemDetails($ItemID) {
$url = 'https://open.api.ebay.com/shopping';
$app_id = '[ADD YOUR APP ID]';
$site_id = '0';
$call_name = 'GetSingleItem';
$version = '863';
$encoding = 'xml';

$xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
$xml.= "<GetSingleItemRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">";
$xml .= "<ItemID>".$ItemID."</ItemID>";
$xml .= "</GetSingleItemRequest>";

    $headers = array(
    'X-EBAY-API-APP-ID:'.$app_id,
    'X-EBAY-API-SITE-ID:'.$site_id,
    'X-EBAY-API-CALL-NAME:'.$call_name,
    'X-EBAY-API-VERSION:'.$version,          
    'X-EBAY-API-REQUEST-ENCODING:'.$encoding,
    'Content-type:text/xml;charset=utf-8'
    );

    $connection = curl_init();
    curl_setopt($connection, CURLOPT_URL, $url); 
    curl_setopt($connection, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($connection, CURLOPT_POST, 1);
    curl_setopt($connection, CURLOPT_POSTFIELDS, $xml); 
    curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1); 

    $result = curl_exec($connection); 
    echo $result;
    curl_close($connection);
}

Надеюсь, это поможет!

...