Как аутентифицировать Yelp API с помощью Java
обзор
- Идентификатор клиента: cRL42oGaCxq0BQ_mFTXbyg
- Тип проблемы : Аутентификация API
- Описание: Попытка использовать API в Java в Android Studio
- Платформа: Android
Описание
Приношу извинения. Я новичок в этом, и я видел сообщения, подобные этому, но я еще не смог заставить это работать. Кажется, я не могу аутентифицировать свой API. Кто-нибудь может мне помочь? Я перепробовал многое из того, что было предложено в Интернете, а также то, что сайт просил сделать. Может быть, я что-то https://www.yelp.com/developers/documentation/v3/authentication
Вот мои шаги по использованию Postman для авторизации API:
1) В раскрывающемся списке панели URL я изменил с "GET" на "POST". 2) В панели URL я написал " https://api.yelp.com/oauth2/token ". 3) На вкладке "Авторизация": как Тип, я установил его как "Без аутентификации" 4) На вкладке "Тело" я выбрал переключатель: "x-www-form-urlencoded" 5) Затем я установил следующие ключи:
Key Value
=============================================================
client_id cRL42oGaCxq0BQ_mFTXbyg
client_secret 5TN2CQ55SP6V7OijXtwnFYkt0...
grant_type client_credentials
6) Затем я нажал "Отправить", который вернулся
{
"access_token": "YAL0kM_2qURGYX25nFn1B6re_zc6yQ...",
"expires_in": 635592747,
"token_type": "Bearer"
}
7) После этого я вернулся на вкладку "Заголовки" и написал в
Key Value
===========================================================
Authorization Bearer YAL0kM_2qURGYX25nFn1B6re_zc6yQTVQ...
Content-Type application/x-www-form-urlencoded <---- This section was already here
8. Затем я снова нажал "ОТПРАВИТЬ"
Я не уверен, должен ли я выполнять какую-либо другую форму OAuth внутри моего кода или нет, и как мне это сделать
Конечная точка
https://api.yelp.com/oauth2/token
Параметры или образец запроса
package com.nicolasshu.yelptest;
import com.yelp.clientlib.connection.YelpAPI;
import com.yelp.clientlib.connection.YelpAPIFactory;
import com.yelp.clientlib.entities.Business;
import com.yelp.clientlib.entities.SearchResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import retrofit2.Call;
import retrofit2.Response;
/**
* Created by nickshu on 11/28/17.
*/
public class TestYelp {
public static void main(String[] args) throws IOException {
String client_id = "cRL42oGaCxq0BQ_mFTXbyg";
String client_secret = "5TN2CQ55SP6V7OijXtwnFYkt0bF88BbVx67txzxr...";
String endpoint = "https://api.yelp.com/oauth2/token";
String access_token = "YAL0kM_2qURGYX25nFn1B6re_zc6yQTVQUnV...";
String token_type = "Bearer";
// Expiration: January 18, 2038
YelpAPIFactory apiFactory = new YelpAPIFactory(client_id,client_secret,token_type,access_token);
System.out.println(apiFactory);
YelpAPI yelpAPI = apiFactory.createAPI();
Map<String,String> params = new HashMap<>();
// Inputting general parameters
params.put("term","food");
params.put("limit","3");
// locale params
params.put("lang", "fr");
Call<Business> call = yelpAPI.getBusiness("yelp-san-francisco");
Response<Business> response = call.execute();
// ##########################################
// Here is where the Exception occurs
}
}
Дополнительная информация - Сообщение об ошибке
Exception in thread "main" com.yelp.clientlib.exception.exceptions.InvalidOAuthCredentials: Forbidden
at com.yelp.clientlib.exception.ErrorHandlingInterceptor.parseError(ErrorHandlingInterceptor.java:79)
at com.yelp.clientlib.exception.ErrorHandlingInterceptor.intercept(ErrorHandlingInterceptor.java:45)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:187)
at se.akerfeldt.okhttp.signpost.SigningInterceptor.intercept(SigningInterceptor.java:46)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:187)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160)
at okhttp3.RealCall.execute(RealCall.java:57)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
at com.nicolasshu.yelptest.TestYelp.main(TestYelp.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)