Я занимаюсь этим уже несколько дней, и я не могу найти решение.
Пытаюсь авторизоваться через ebay API, чтобы получить токен пользователя для дальнейших действий.
Когда я использую среду песочницы, все отлично работает, однако, как только я использую рабочую среду, я получаю следующую ошибку:
{"error":"invalid_client","error_description":"client authentication failed"}
Моя файловая структура выглядит следующим образом:
конфиг.php:
<?php
/* SAndbox
$config = [
'client_id' => 'xxxxx-xxxxxx-SBX-e55b66fda-63c7e331',
'client_secret' => 'SBX-xxxxxx-dxxxxxb-47cb-9bee-f33b',
'ru_name' => 'xxxxxxxxx-oxxxxas-xxxxxxx-tsuggc',
'login_url' => 'https://auth.sandbox.ebay.com/oauth2/authorize',
'oauth_url' => 'https://api.sandbox.ebay.com/identity/v1/oauth2/token',
'api_scopes' => ['https://api.ebay.com/oauth/api_scope/sell.inventory'],
];
*/
$config = [
'client_id' => 'xxxxxx-CxxxxxxT-PRD-455bfe8ea-7e445131',
'client_secret' => 'PRD-797xxxx7bf-d5xxxc-4a19-axxade-ab8xx6',
'ru_name' => 'xxxxxxx-osxxxxxxas-CxxxxS-hjlalp',
'login_url' => 'https://auth.ebay.com/oauth2/authorize',
'oauth_url' => 'https://api.ebay.com/identity/v1/oauth2/token',
'api_scopes' => ['https://api.ebay.com/oauth/api_scope/sell.inventory'],
];
получитьЛогин.php:
<?php
include_once 'config.php';
$url = $config['login_url'];
$url .= '?client_id='.$config['client_id'];
$url .= '&response_type=code';
$url .= '&redirect_uri='.urlencode($config['ru_name']);
$url .= '&scope='.implode(' ', $config['api_scopes']);
echo "<a href='{$url}'>login</a><br/><br/>";
die();
login.php(куда меня перенаправляют после авторизации):
<?php
include_once 'config.php';
echo "<pre>";
$code = $_GET['code'];
$authorization = 'Basic '.base64_encode($config['client_id'].':'.$config['client_secret']);
print_r($config);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $config['oauth_url'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "grant_type=client_credentials&code = ".$code."&redirect_uri = ".$config['ru_name'],
CURLOPT_HTTPHEADER => [
"Authorization: ".$authorization,
"Content-Type: application/x-www-form-urlencoded",
"cache-control: no-cache",
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
$info = curl_getinfo($curl);
curl_close($curl);
print_r($info);
if ($err) {
echo "cURL Error #:".$err;
} else {
echo 'resp: '.$response;
}
Любая помощь будет оценена по достоинству, так как я собираюсь рвать на себе волосы из-за этого!






Кажется, у вас есть вся необходимая достоверная информация, единственное, что кажется подозрительным, это: вы получили объем в
$url .= '&scope='.implode(' ', $config['api_scopes']);
но я думаю, что вы не включили эту область в
CURLOPT_POSTFIELDS => "grant_type=client_credentials&code = ".$code."&redirect_uri = ".$config['ru_name'],
curl_setopt($curl_handle, CURLOPT_POSTFIELDS,http_build_query($post_data));
пожалуйста, включите http_build_query($post_data) в свои запросы на публикацию Curl.
Я не думаю, что это имеет какое-либо отношение к вашему коду. Вероятно, это связано с ограничениями вызовов API. Можете ли вы протестировать его с другим клиентом API или использовать вторую ссылку для проверки своей квоты.
$url .= '&scope='.implode(' ', $config['api_scopes']);создаст поврежденный URL-адрес, проверьте http_build_query()