Невозможно получить eBay OAuth Access Token - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь получить токен доступа и обновления eBay OAuth, но продолжаю получать 401 несанкционированный ответ. Я прошел через каждый клочок документации и попробовал почти все, но без радости.

Я прошел через поток разрешений пользователей, получил доступ к своему приложению и получил код авторизации - сейчас я вручную вставляю это в свой код и пробовал его как в кодировке URL, так и в декодировании URL, но результат один и тот же.

Я не уверен, связана ли проблема с моим кодом Java или одним из значений в моей учетной записи разработчика eBay. Любые идеи или указатели будут приветствоваться.

public int initialiseToken(String clientID, String clientSecret, String ruName)
{
    int responseCode = 0;
    try
    {
            String urlString = "https://api.ebay.com/identity/v1/oauth2/token";
            String clientCredentials = clientID + ":" + clientSecret;
            // base64 encode credentials
            byte[] base64clientCredentials = Base64.encodeBase64(clientCredentials.getBytes());

            // below authCode obtained from URI redirect following eBay auth sign-in 
            String authCodeURLEncoded = "v%5E1.1%23i%5E1%23I%5E3%23f.....xI0VeMjYw";
            String authCodeURLDecoded = URLDecoder.decode(authCodeURLEncoded, "UTF-8");

            URL url = new URL(urlString);
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Basic " + base64clientCredentials);
            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("Accept-Charset", "utf8");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            conn.setRequestProperty("grant_type", "authorization_code");
            conn.setRequestProperty("redirect_uri", ruName);
            conn.setRequestProperty("code", authCodeURLDecoded);         // have tried both encoded & decoded versions

            String msg;
            if (conn.getResponseCode() != 200) 
            {
                    responseCode = conn.getResponseCode();
                    msg = conn.getResponseMessage();
            }
            else
            {
                    responseCode = conn.getResponseCode();
                    msg = conn.getResponseMessage();
                    BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
                    String line = br.readLine();
                    parseResult(line);
            }
    }
    catch (MalformedURLException e) 
    {
            e.printStackTrace();
    } 
    catch (IOException e) 
    {
            e.printStackTrace();
    }
    catch (Exception e) 
    {
            e.printStackTrace();
    }
    return responseCode;
}

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Спасибо, Майкл - взгляну на это, когда я подниму это снова. А пока вот код, который я использовал для тестирования интерфейса поиска отмены - надеюсь, он вам пригодится

    public static void searchCancellations(String authToken)
{
    String urlString = "https://api.ebay.com/post-order/v2/cancellation/search";
    String urlStringParams = "?creation_date_range_from=2018-12-01T00:00:00.000Z&creation_date_range_to=2019-01-16T00:00:00.000Z";
    try
    {
        String encodedUrl = urlString + URLEncoder.encode(urlStringParams, "UTF-8");
        URL url = new URL(encodedUrl);
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Accept-Charset", "utf8");
        conn.setRequestProperty("Authorization", "IAF " + authToken);
        conn.setRequestProperty("Content-Type", "application/json");

        int responseCode = 0;
        String msg;
        if (conn.getResponseCode() != 200) 
        {
            responseCode = conn.getResponseCode();
            msg = conn.getResponseMessage();
        }
        else
        {
            responseCode = conn.getResponseCode();
            msg = conn.getResponseMessage();
        }
        BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
        String line = br.readLine();
        parseCancellationResult(line);
        responseCode = 0;
    }
    catch (MalformedURLException e) 
    {
        e.printStackTrace();
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}
0 голосов
/ 27 января 2019

У меня есть фрагмент кода, который предназначен для учетных данных клиента OAuth (для доступа к общей информации), если это поможет.

Я работаю над чем-то очень похожим. Я сейчас застрял на использовании возвращенного токена доступа для реализации метода ebay. Если вам удалось это сделать, дайте мне знать?

Зависимость

implementation 'com.squareup.okhttp3:okhttp:3.5.0'

код

открытый класс MainActivity расширяет AppCompatActivity {

private static final String clientId = "-";//clientId
private static final String clientSecret = "-";//client secret
private static final String tokenUrl = "https://api.sandbox.ebay.com/identity/v1/oauth2/token";
private static final String auth = clientId + ":" + clientSecret;
private static final String authentication = Base64.encodeToString(auth.getBytes(),Base64.NO_WRAP);

@Override
protected void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
            .addHeader("Authorization", "Basic " + authentication)
            .url(tokenUrl)
            .post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded")
                    ,"grant_type=client_credentials"+
                            "&scope=https://api.ebay.com/oauth/api_scope"
                    )
            )
            .build();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            Log.d("Testing_", "Error: " +e.getMessage());
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String json = response.body().string();

            JSONObject data = null;
            try {
                data = new JSONObject(json);
                String accessToken = data.optString("access_token");
                String refreshToken = data.optString("refresh_token");

                Log.d("Testing_", "Access Token = " + accessToken);
                Log.d("Testing_", "Refresh Token = " + refreshToken);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
}

выход

...