skip to Main Content

I’ve been at this for several days now, and I can’t seem to find the solution.

I’m trying to authorize via ebay API to get a user token for further actions.

When I use sandbox environment, it all works great, however as soon as I use production, I get the following error:

{"error":"invalid_client","error_description":"client authentication failed"}

My file structure is as follows:

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(where I get redirected after authorization):

<?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;
}

Any and all help would be appreciated, as i’m about to pull my hair out over this!

3

Answers


  1. You seem to have all valid information needed,the only thing that’s seems to be fishy is :
    you have fetched scope in

    $url .= '&scope='.implode(' ', $config['api_scopes']);

    but i think you haven’t include this scope in

      CURLOPT_POSTFIELDS => "grant_type=client_credentials&code=".$code."&redirect_uri=".$config['ru_name'],
    
    Login or Signup to reply.
  2. curl_setopt($curl_handle, CURLOPT_POSTFIELDS,http_build_query($post_data));
    

    kindly include http_build_query($post_data) in your Curl post requests.

    Login or Signup to reply.
  3. I don’t thing that it has anything to do with your code. It is probably related to API call limits. Can you test it with another API client, or use the second link to verify your quota.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search