1、获取access_token
参考文档:https://developer.ebay.com/api-docs/static/oauth-authorization-code-grant.html
1.1 授权
$scope = array(
'https://api.ebay.com/oauth/api_scope',
'https://api.ebay.com/oauth/api_scope/sell.account',
);
// @scope:作用域,参考文档:https://developer.ebay.com/api-docs/static/oauth-scopes.html
$clientId = 目标环境的client_id值;
// @clientId 目标环境的client_id值,参考文档:https://developer.ebay.com/api-docs/static/oauth-credentials.html
$redirectUri = 目标环境的 RuName 值;
// @clientId 设置的重定向地址唯一标志,参考文档:https://developer.ebay.com/api-docs/static/oauth-redirect-uri.html
$responseType = 'code';
//@responseType 设置为 “code” 可让 eBay 生成并返回授权代码。
$url = 'https://signin.ebay.com/authorize';
$url .= '?client_id=' . $clientId;
$url .= '&redirect_uri=' . $redirectUri;
$url .= '&response_type=code';
$url .= '&state='
$url .= '&scope=' . implode('%20', $scope),
Header('Location: ' . $url);
跳转授权,同意后会携带CODE跳转回RuName设置的地址
1.2 获取access_token及refresh_token
$body = array(
'grant_type' => 'authorization_code',
'code' => $_GET['code'],
'redirect_uri' => $redirectUri
);
// @body 请求体
// @body.grant_type
// @body.code 授权携带
// @body.redirect_uri 目标环境的 RuName 值
$uri = 'https://api.ebay.com/identity/v1/oauth2/token';
// 获取token地址
$clientSecret = 目标环境的client_secret值;
$headers = array(
// 'Accept' => 'application/json',
// 'Accept-Charset' => 'utf-8',
// 'X-EBAY-C-MARKETPLACE-ID' => 'EBAY-US',
'Content-Type' => 'application/x-www-form-urlencoded',
'Authorization' => 'Basic ' . base64_encode($clientId . ':' . $clientSecret)
);
// @clientSecret 目标环境的client_id值,参考文档:https://developer.ebay.com/api-docs/static/oauth-credentials.html
$config = array(
'base_uri' => $uri,
'headers' => $headers,
'http_errors' => false,
'verify' => false,
'body' => http_build_query($body)
);
$client = new GuzzleHttp\Client($config);
$request = $client->request('POST');
$http_status = $request->getStatusCode();
$response = $request->getBody()->getContents();
$response_headers = $request->getHeaders();
// @client 发起请求
if ($http_status >= 200 && $http_status <= 299)
{
// 请求成功
}
else
{
// 请求失败
}
if ( ! empty($response))
{
$response = json_decode($response, true);
$message = isset($response['errors'][0]['longMessage']) ? $response['errors'][0]['longMessage'] :(isset($response['error_description']) ? $response['error_description'] : '');
}
// 如果请求成功会有以下数据返回
$response = array(
'access_token' => '', //令牌
'expires_in' => '', // 令牌有效时间
'refresh_token' => '', // 令牌过期后可用此码获取令牌,而非重新授权
'refresh_token_expires_in' => '', // refresh_token有效时间,过期后需重新授权
);
2、以refresh_token获取access_token
$body = array(
'grant_type' => 'refresh_token',
'refresh_token' => $response['refresh_token'],
'scope' => implode(' ', $scope)
);
$uri = 'https://api.ebay.com/identity/v1/oauth2/token';
$headers = array(
// 'Accept' => 'application/json',
// 'Accept-Charset' => 'utf-8',
// 'X-EBAY-C-MARKETPLACE-ID' => 'EBAY-US',
'Content-Type' => 'application/x-www-form-urlencoded',
'Authorization' => 'Basic ' . base64_encode($clientId . ':' . $clientSecret)
);
$config = array(
'base_uri' => $uri,
'headers' => $headers,
'http_errors' => false,
'verify' => false,
'body' => http_build_query($body)
);
$client = new GuzzleHttp\Client($config);
$request = $client->request('POST');
$http_status = $request->getStatusCode();
$response = $request->getBody()->getContents();
$response_headers = $request->getHeaders();
3、API调用(获取账号信息)
$config = array(
'base_uri' => 'https://apiz.ebay.com/commerce/identity/v1/user/',
'headers' => array(
'Authorization' => 'Bearer ' . $response['access_token']
),
'verify' => false
);
$client = new GuzzleHttp\Client($config);
$request = $client->request('GET');
$response = $request->getBody()->getContents();