Я пытаюсь использовать Ebay PHP SDK подключиться к Ebay и получить продавцов, продающих товар. Для этого я использовал следующие шаги:
Шаг 1: Получить авторизационный токен и код для вошедшего в систему пользователя. Я использовал следующий код для реализации.
use \DTS\eBaySDK\OAuth\Services as OauthService;
use \DTS\eBaySDK\OAuth\Types as OauthType;
use \DTS\eBaySDK\Constants;
use \DTS\eBaySDK\Trading\Services;
use \DTS\eBaySDK\Trading\Types;
use \DTS\eBaySDK\Trading\Enums;
$service = new OauthService\OAuthService([
'credentials' => $config['sandbox']['credentials'],
'ruName' => $config['sandbox']['ruName'],
'sandbox' => true
]);
$oauthParam = [
'client_id' => $config['sandbox']['credentials']['appId'],
'redirect_uri' => $config['sandbox']['redirect_uri'],
'response_type' => 'code',
'scope' => 'https://api.ebay.com/oauth/api_scope'
];
$urlParam = '';
$query = [];
foreach($oauthParam as $key => $param) {
$query[] = "$key=$param";
}
$urlParam = '?' . implode('&', $query);
$url = 'https://signin.sandbox.ebay.com/authorize' . $urlParam;
@session_start();
if(isset($_SESSION['ebay_oauth_token'])) {
$token = $_SESSION['ebay_oauth_token']['code'];
}
else {
if(isset($_GET['code'])) {
$token = $_GET['code'];
$_SESSION['ebay_oauth_token']['code'] = $token;
$request = new OauthType\GetUserTokenRestRequest();
$request->code = $token;
$response = $service->getUserToken($request);
if ($response->getStatusCode() !== 200) {
//Error
} else {
$_SESSION['ebay_oauth_token']['access_token'] = $response->access_token;
}
} else {
@header('location: ' . $url);
}
}
$userOauthToken = $_SESSION['ebay_oauth_token']['access_token'];
Приведенный выше код работает как положено. То есть пользователь перенаправляется на страницу входа, чтобы авторизоваться и получить набор кода и токена доступа.
Шаг 2: Выбрать пункты продажи, используя code
получен из Step #1
, Я использовал следующий код для реализации функциональности.
$request->RequesterCredentials = new Types\CustomSecurityHeaderType();
$request->RequesterCredentials->eBayAuthToken = $token; //Obtained from Step 1
$request->ActiveList = new Types\ItemListCustomizationType();
$request->ActiveList->Include = true;
$request->ActiveList->Pagination = new Types\PaginationType();
$request->ActiveList->Pagination->EntriesPerPage = 10;
$request->ActiveList->Sort = Enums\ItemSortTypeCodeType::C_CURRENT_PRICE_DESCENDING;
$pageNum = 1;
do {
$request->ActiveList->Pagination->PageNumber = $pageNum;
$response = $service->getMyeBaySelling($request);
if (isset($response->Errors)) {
//Error Output
}
if ($response->Ack !== 'Failure' && isset($response->ActiveList)) {
foreach ($response->ActiveList->ItemArray->Item as $item) {
//Output response
}
}
$pageNum += 1;
} while ({condition});
У меня проблема в Step #2
, Генерирует Invalid Token
во время выполнения кода.
Буду очень признателен, если кто-нибудь поможет мне.
Вы смешиваете запросы. Во второй части вашего кода запрос относится к Trading API, использующему токен Auth’n’Auth, и вы пытаетесь совершить вызов с использованием токена OAuth. Эти 2 токена различны и работают для разных API.
У вас есть 2 варианта.
Либо сохраните вторую часть вашего кода, которая на самом деле кажется правильной, но используйте токен Auth’n’Auth (который вы можете сгенерировать из учетной записи разработчика). В этом случае первая часть бесполезна.
Сохраните первую часть своего кода и удалите вторую часть. В этом случае вам нужно переписать вторую часть кода, используя OAuth API вместо Trading API.
Других решений пока нет …