易趣:身份验证令牌无效。 API请求中的身份验证令牌验证失败

时间:2017-10-31 16:32:52

标签: php ebay-api

我正在尝试使用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

如果有人帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:0)

您正在混合请求。在代码的第二部分中,请求属于使用Auth' Auth令牌的Trading API,您尝试使用OAuth令牌进行调用。这两个令牌是不同的,适用于不同的API。

您有2个选项。

  1. 保留代码的第二部分,实际上看起来是正确的,但使用Auth' Auth令牌(您可以从开发者帐户生成)。在这种情况下,第一部分是无用的。

  2. 保留代码的第一部分,然后删除第二部分。在这种情况下,您需要使用OAuth API而不是Trading API重写代码的第二部分。