我已经在这里待了几天,但似乎找不到解决方法。
我正在尝试通过ebay API进行授权,以获取用于进一步操作的用户令牌。
当我使用沙箱环境时,一切正常,但是,一旦使用生产环境,就会出现以下错误:
{"error":"invalid_client","error_description":"client authentication failed"}
我的文件结构如下:
config.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'],
];
getLogin.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;
}
任何和所有帮助都将不胜感激,因为我正要为此而努力!
答案 0 :(得分:0)
您似乎拥有所有需要的有效信息,唯一看起来像是可疑的是: 您已经获取了范围
$url .= '&scope='.implode(' ', $config['api_scopes']);
但是我认为您没有在此范围内
CURLOPT_POSTFIELDS => "grant_type=client_credentials&code=".$code."&redirect_uri=".$config['ru_name'],
答案 1 :(得分:0)
curl_setopt($curl_handle, CURLOPT_POSTFIELDS,http_build_query($post_data));
请在您的Curl发布请求中包含http_build_query($ post_data)。
答案 2 :(得分:0)
我认为这与您的代码无关。它可能与API调用限制有关。您可以使用其他API客户端对其进行测试,还是可以使用第二个链接来验证您的配额。