EBay API для загрузки списка пользователей (руководство пользователя eBay API/пошаговое руководство)

Я новичок в eBay API и в настоящее время разрабатываю в PHP, мне удалось использовать GetItem для импорта деталей заказа на основе Идентификатора элемента в базу данных моего сайта. Но теперь я хочу связать учетную запись пользователя с моим сайтом и импортировать свои списки в мою базу данных. Я поставил код, который я использовал для GetItem (ниже), но теперь я застрял, и я не знаю, что использовать, GetAccount, GetUser или GetSellerList:

Сначала: мой пользователь перенаправил с моего сайта на eBay, чтобы разрешить моему приложению получать доступ к его/ее спискам.

Второе: Импортировать этот список (пока что эха будет достаточно) на мой сайт.

Это мой код для GetItem:

     require_once('keys.php');
     require_once('eBaySession.php');

    if(isset($_POST['Id']))
    {
        //Get the ItemID inputted
        $id = $_POST['Id'];


        //SiteID must also be set in the Request XML
        //SiteID = 0  (US) - UK = 3, Canada = 2, Australia = 15, ....
        //SiteID Indicates the eBay site to associate the call with
        $siteID = 101;
        //the call being made:
        $verb = 'GetItem';

        ///Build the request Xml string
        $requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>';
        $requestXmlBody .= '<GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
        $requestXmlBody .= "<RequesterCredentials><eBayAuthToken>$userToken</eBayAuthToken></RequesterCredentials>";;
        $requestXmlBody .= "<ItemID>$id</ItemID>";
        $requestXmlBody .= '</GetItemRequest>';

        //Create a new eBay session with all details pulled in from included keys.php
        $session = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteID, $verb);

        //send the request and get response
        $responseXml = $session->sendHttpRequest($requestXmlBody);
        if(stristr($responseXml, 'HTTP 404') || $responseXml == '')
            die('<P>Error sending request');

        //Xml string is parsed and creates a DOM Document object
        $responseDoc = new DomDocument();
        $responseDoc->loadXML($responseXml);


        //get any error nodes
        $errors = $responseDoc->getElementsByTagName('Errors');

        //if there are error nodes
        if($errors->length > 0)
        {
            echo '<P><B>eBay returned the following error(s):</B>';
            //display each error
            //Get error code, ShortMesaage and LongMessage
            $code = $errors->item(0)->getElementsByTagName('ErrorCode');
            $shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage');
            $longMsg = $errors->item(0)->getElementsByTagName('LongMessage');
            //Display code and shortmessage
            echo '<P>', $code->item(0)->nodeValue, ' : ', str_replace(">", "&gt;", str_replace("<", "&lt;", $shortMsg->item(0)->nodeValue));
            //if there is a long message (ie ErrorLevel=1), display it
            if(count($longMsg) > 0)
                echo '<BR>', str_replace(">", "&gt;", str_replace("<", "&lt;", $longMsg->item(0)->nodeValue));

        }

        else //no errors
        {
            //get the nodes needed
            $titleNode = $responseDoc->getElementsByTagName('Title');
            $primaryCategoryNode = $responseDoc->getElementsByTagName('PrimaryCategory');
            $categoryNode = $primaryCategoryNode->item(0)->getElementsByTagName('CategoryName');
            $listingDetailsNode = $responseDoc->getElementsByTagName('ListingDetails');
            $startedNode = $listingDetailsNode->item(0)->getElementsByTagName('StartTime');
            $endsNode = $listingDetailsNode->item(0)->getElementsByTagName('EndTime');

            $ShippingPackageDetailsNode = $responseDoc->getElementsByTagName('ShippingPackageDetails');
            if ($ShippingPackageDetailsNode->length > 0) {
                $packageDepthNode = $ShippingPackageDetailsNode->item(0)->getElementsByTagName('PackageDepth');
                $DepthUnit = $packageDepthNode->item(0)->getAttribute('unit');
                $packageLengthNode = $ShippingPackageDetailsNode->item(0)->getElementsByTagName('PackageLength');
                $LengthUnit = $packageLengthNode->item(0)->getAttribute('unit');
                $packageWidthNode = $ShippingPackageDetailsNode->item(0)->getElementsByTagName('PackageWidth');
                $WidthUnit = $packageWidthNode->item(0)->getAttribute('unit');
            }

            $sellingStatusNode = $responseDoc->getElementsByTagName('SellingStatus');
            $currentPriceNode = $sellingStatusNode->item(0)->getElementsByTagName('CurrentPrice');
            $currency = $currentPriceNode->item(0)->getAttribute('currencyID');
            $startPriceNode = $responseDoc->getElementsByTagName('StartPrice');
            $buyItNowPriceNode = $responseDoc->getElementsByTagName('BuyItNowPrice');
            $bidCountNode = $sellingStatusNode->item(0)->getElementsByTagName('BidCount');

            $sellerNode = $responseDoc->getElementsByTagName('Seller');

            //Display the details
            echo '<P><B>', $titleNode->item(0)->nodeValue, " ($id)</B>";
            echo '<BR>Category: ', $categoryNode->item(0)->nodeValue;
            echo '<BR>Started: ', $startedNode->item(0)->nodeValue;
            echo '<BR>Ends: ', $endsNode->item(0)->nodeValue;

            if ($ShippingPackageDetailsNode->length > 0) {
                echo "<BR>Package Length: ", $packageLengthNode->item(0)->nodeValue, ' '.$LengthUnit.'';
                echo "<BR>Package Width: ", $packageWidthNode->item(0)->nodeValue, ' '.$WidthUnit.'';
                echo "<BR>Package Depth: ", $packageDepthNode->item(0)->nodeValue, ' '.$DepthUnit.'';
            }

            echo "<P>Current Price: ", $currentPriceNode->item(0)->nodeValue, $currency;
            echo "<BR>Start Price: ", $startPriceNode->item(0)->nodeValue, $currency;
            echo "<BR>BuyItNow Price: ", $buyItNowPriceNode->item(0)->nodeValue, $currency;
            echo "<BR>Bid Count: ", $bidCountNode->item(0)->nodeValue;

            //Display seller detail if present
            if($sellerNode->length > 0)
            {
                echo '<P><B>Seller</B>';
                $userIDNode = $sellerNode->item(0)->getElementsByTagName('UserID');
                $scoreNode = $sellerNode->item(0)->getElementsByTagName('FeedbackScore');
                $regDateNode = $sellerNode->item(0)->getElementsByTagName('RegistrationDate');

                echo '<BR>UserID: ', $userIDNode->item(0)->nodeValue;
                echo '<BR>Feedback Score: ', $scoreNode->item(0)->nodeValue;
                echo '<BR>Registration Date: ', $regDateNode->item(0)->nodeValue;
            }
        }
    }

Ответы

Ответ 1

После прочтения много плохой документации на eBay об этом API и с ума сойти! Я взял дело в свои руки и сделал шаг за шагом руководство по API и выяснил, как это сделать. Который я попытаюсь объяснить как можно проще. (С использованием PHP)

Что мы будем делать:

  • Создание приложения
  • Получить идентификатор сеанса для нашего пользователя с eBay
  • Подключение к eBay с использованием идентификатора сеанса
  • Пользователь предоставляет доступ к нашему приложению для связи с его учетной записью пользователя (с использованием идентификатора сеанса)
  • Создан пользовательский токен
  • Наш сайт получает токен пользователя для использования в будущем (для доступа к пользовательским данным на eBay)

Первая Вам понадобятся два файла PHP: keys.php и eBaySession.php, которые находятся в eBay PHP SDK, который находится на веб-сайте eBay Developers. (https://www.x.com/developers/ebay/documentation-tools/sdks)

Второй Вы будете включать эти два файла в новый PHP файл, который также будет содержать пользовательский интерфейс.

Третий Вы создадите учетную запись на веб-сайте eBay Developers и создадите новое приложение.

Четвертый Вы получите песочницу и производственные ключи для своего приложения, используя аккаунт разработчиков. Затем вы создадите пользователя песочницы и получите токен пользователя. (через страницу моей учетной записи)

Это может быть немного сложно найти на веб-сайте разработчиков eBay, но в конце концов вы найдете его.

Пятый Вы вставляете DEV, APP, CERT и UserToken своего приложения в файл keys.php(как для производственных, так и для песочных).

Шестое Вам потребуется RuName, которое также находится на странице моей учетной записи ("Управление вашими именами" ).

Седьмой Теперь вы введете RuName в файл keys.php в качестве нового параметра:

$RuName = 'your RuName key';

Итак, наш keys.php будет выглядеть так:

<?php
    //show all errors - useful whilst developing
    error_reporting(E_ALL);

    // these keys can be obtained by registering at http://developer.ebay.com

    $production         = true;   // toggle to true if going against production
    $compatabilityLevel = 551;    // eBay API version

    if ($production) {
        $devID = 'production dev id';   // these prod keys are different from sandbox keys
        $appID = 'production app id';
        $certID = 'production cert id';
        $RuName = 'production RuName';
        //set the Server to use (Sandbox or Production)
        $serverUrl = 'https://api.ebay.com/ws/api.dll';      // server URL different for prod and sandbox
        //the token representing the eBay user to assign the call with
        $userToken = 'production user token';
    } else {
        // sandbox (test) environment
        $devID = 'sandbox dev id';   // these prod keys are different from sandbox keys
        $appID = 'sandbox app id';
        $certID = 'sandbox cert id';
        //set the Server to use (Sandbox or Production)
        $serverUrl = 'https://api.sandbox.ebay.com/ws/api.dll';
        // the token representing the eBay user to assign the call with
        // this token is a long string - don't insert new lines - different from prod token
        $userToken = 'sandbox user token';
    }


?>

Восемь Теперь мы создадим нашу первую страницу с некоторыми выводами для пользователя, как показано ниже:

<?php require_once('keys.php') ?>
<?php require_once('eBaySession.php') ?>
<?php

        session_start();
        //SiteID must also be set in the Request XML
        //SiteID = 0  (US) - UK = 3, Canada = 2, Australia = 15, ....
        //SiteID Indicates the eBay site to associate the call with
        $siteID = 0;
        //the call being made:
        $verb = 'GetSessionID';

        ///Build the request Xml string
        $requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>';
        $requestXmlBody .= '<GetSessionIDRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
        $requestXmlBody .= '<RuName>'.$RuName.'</RuName>';
        $requestXmlBody .= '</GetSessionIDRequest>';

        //Create a new eBay session with all details pulled in from included keys.php
        $session = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteID, $verb);

        //send the request and get response
        $responseXml = $session->sendHttpRequest($requestXmlBody);
        if(stristr($responseXml, 'HTTP 404') || $responseXml == '')
            die('<P>Error sending request');

        //Xml string is parsed and creates a DOM Document object
        $responseDoc = new DomDocument();
        $responseDoc->loadXML($responseXml);


        //get any error nodes
        $errors = $responseDoc->getElementsByTagName('Errors');

        //if there are error nodes
        if($errors->length > 0)
        {
            echo '<P><B>eBay returned the following error(s):</B>';
            //display each error
            //Get error code, ShortMesaage and LongMessage
            $code = $errors->item(0)->getElementsByTagName('ErrorCode');
            $shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage');
            $longMsg = $errors->item(0)->getElementsByTagName('LongMessage');
            //Display code and shortmessage
            echo '<P>', $code->item(0)->nodeValue, ' : ', str_replace(">", "&gt;", str_replace("<", "&lt;", $shortMsg->item(0)->nodeValue));
            //if there is a long message (ie ErrorLevel=1), display it
            if(count($longMsg) > 0)
                echo '<BR>', str_replace(">", "&gt;", str_replace("<", "&lt;", $longMsg->item(0)->nodeValue));

        }

        else //no errors
        {
            //get the nodes needed
            $sessionIDNode = $responseDoc->getElementsByTagName('SessionID');
            //Display the details
            $sessionID = $sessionIDNode->item(0)->nodeValue;
            $_SESSION['eBaySession'] = $sessionID;

        }
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Get eBay User Items</TITLE>
</HEAD>
<BODY>
<FORM action="GetItem.php" method="post">
    <h2>Testing eBay Connection Plugin</h2>
    <h3>Linking User Account to our website</h3>
    <p>Session ID: <?php echo $_SESSION['eBaySession']; ?></p>
    <BR><a href="https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&RuName=<?php echo $RuName; ?>&SessID=<?php echo $sessionID; ?>">Click Here To Link Your Ebay Account To Our Website</a>
</FORM>
</BODY>
</HTML>

Эта новая страница PHP получит идентификатор сеанса с eBay, используя $verb = 'GetSessionID';, поэтому, когда мы нажимаем кнопку "Связать вашу учетную запись Ebay", пользователь отправляется по этому URL-адресу:

https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&RuName=<?php echo $RuName; ?>&SessID=<?php echo $sessionID; ?>

, который содержит ваше имя RuName и Session ID.

Девятый Пользователь войдет в систему на eBay, предоставит вам доступ к вашему приложению и отправит обратно на ваш сайт. Теперь мы будем использовать тот же идентификатор сеанса в предыдущей части, чтобы получить токен пользователя (так как теперь у нас есть доступ к учетной записи пользователя) с помощью $verb = 'FetchToken';.

<?php require_once('keys.php') ?>
<?php require_once('eBaySession.php') ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Get eBay User Items (Result)</TITLE>
</HEAD>
<BODY>
    <h2>Testing eBay Connection Plugin</h2>
    <h3>Receiving User Tocken</h3>
    <h4>With a User Tocken ID we can import user data to our website.</h4>

    <?php

            session_start();
            //SiteID must also be set in the Request XML
            //SiteID = 0  (US) - UK = 3, Canada = 2, Australia = 15, ....
            //SiteID Indicates the eBay site to associate the call with
            $siteID = 0;
            //the call being made:
            $verb = 'FetchToken';

            ///Build the request Xml string
            $requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>';
            $requestXmlBody .= '<FetchTokenRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
            $requestXmlBody .= '<SessionID>'.$_SESSION["eBaySession"].'</SessionID>';
            $requestXmlBody .= '</FetchTokenRequest>';

            //Create a new eBay session with all details pulled in from included keys.php
            $session = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteID, $verb);

            //send the request and get response
            $responseXml = $session->sendHttpRequest($requestXmlBody);
            if(stristr($responseXml, 'HTTP 404') || $responseXml == '')
                die('<P>Error sending request');

            //Xml string is parsed and creates a DOM Document object
            $responseDoc = new DomDocument();
            $responseDoc->loadXML($responseXml);


            //get any error nodes
            $errors = $responseDoc->getElementsByTagName('Errors');

            //if there are error nodes
            if($errors->length > 0)
            {
                echo '<P><B>eBay returned the following error(s):</B>';
                //display each error
                //Get error code, ShortMesaage and LongMessage
                $code = $errors->item(0)->getElementsByTagName('ErrorCode');
                $shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage');
                $longMsg = $errors->item(0)->getElementsByTagName('LongMessage');
                //Display code and shortmessage
                echo '<P>', $code->item(0)->nodeValue, ' : ', str_replace(">", "&gt;", str_replace("<", "&lt;", $shortMsg->item(0)->nodeValue));
                //if there is a long message (ie ErrorLevel=1), display it
                echo '<BR/>User Session ID: '.$_COOKIE["eBaySession"].'';
                if(count($longMsg) > 0)
                    echo '<BR>', str_replace(">", "&gt;", str_replace("<", "&lt;", $longMsg->item(0)->nodeValue));

            }

            else //no errors
            {
                //get the nodes needed
                $eBayAuthTokenNode = $responseDoc->getElementsByTagName('eBayAuthToken');

                //Display the details
                echo '<BR/>User Session ID: '.$_SESSION["eBaySession"].'';
                echo '<BR/><BR/>User Token: '.$eBayAuthTokenNode->item(0)->nodeValue.'';

            }
    ?>

    </BODY>
    </HTML>

И у вас есть доступ и токен. Но убедитесь, что вы размещаете это по URL-адресу HTTPS, поскольку eBay принимает эти функции только через безопасное соединение (SSL). В противном случае вам будет сложно выполнить этот код.

Я в конечном итоге улучшу этот ответ, получив обратную связь. Я знаю, что это может немного смутить вас, но я надеюсь, что смогу сделать его лучшим ответом по времени. Я также рассмотрел функцию GetItem для eBay API в вопросе, если вам это понадобится.

Изменить: Конечно, вы можете интегрировать запросы cUrl и XML.

Ответ 2

Вам не нужно использовать eBay SDK. Или те 2 PHP включают файлы, которые вы дали. Я сошел с ума, как и вы, и я сделал свой собственный SDK файл, который действительно просто выполняет некоторые работы XML и cURL. Я по контракту, поэтому я еще не могу поделиться своим файлом, но это всего лишь 170 строк кода, и вы можете использовать все API-интерфейсы eBay следующим образом

$ebay = new Ebay();
$ebay->call("ReviseItem",array(
    "ItemID"=>"1234"
));

Итак, вы должны использовать этот инструмент для тестирования api с ebay https://developer.ebay.com/DevZone/build-test/test-tool/default.aspx

И тогда вы можете просто передать любой нужный вам вызов и прочитать параметры. Они дерьмовые, но это не легче, чем это.

Опять же, мне жаль, что я не могу поделиться своим кодом, но я просто даю вам понять, что если вы подстегнете, вы можете написать лишь немного конверсии cURL и XML, чтобы "буквально" использовать API без SDK.

Я сделал то же самое для Amazon MWS apis и google docs apis. Я надеюсь, что смогу поделиться всем этим как можно скорее

Ответ 3

@Хоссейн Джаббари работает. Поэтому в основном вам нужно будет загрузить файл ebaysession.php и включить его в свое приложение. Он будет обрабатывать всю часть curl/xml для вас.

Вставьте все детали вашего приложения в файл keys.php. Затем, когда вы создаете URL-адрес перенаправления, ваш принятый URL-адрес должен быть вторым php файлом, который имеет функцию fetchToken. Поскольку вы храните идентификатор сеанса из первого файла PHP в сеанс, его получение должно быть легким.

Затем перейдите в первый файл PHP, чтобы щелкнуть по URL-адресу входа. Затем зарегистрируйте себя на рабочем месте или в песочнице, и как только вы нажмете ACCEPT, вы будете перенаправлены на вторую страницу PHP, и тогда вы сможете увидеть свой токен.