Ответ 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(">", ">", str_replace("<", "<", $shortMsg->item(0)->nodeValue));
//if there is a long message (ie ErrorLevel=1), display it
if(count($longMsg) > 0)
echo '<BR>', str_replace(">", ">", str_replace("<", "<", $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(">", ">", str_replace("<", "<", $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(">", ">", str_replace("<", "<", $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.