此端点至少需要以下范围之一:profile,surge_accept,request,request.delegate

时间:2017-08-28 05:34:09

标签: oauth uber-api

我正在使用Uber API开发应用程序,我使用Retrofit库从API检索数据。

我已使用以下端点授权我的应用程序:

https://login.uber.com/oauth/v2/authorize?client_id=<CLIENT_ID>&response_type=code

但是当我尝试使用以下端点估算产品时:

https://api.uber.com/v1.2/requests/estimate?start_latitude=37.7752278&start_longitude=-122.4197513&end_latitude=37.7773228&end_longitude=-122.4272052

然后我遇到了一个问题:

  

此端点至少需要以下范围之一:profile,surge_accept,request.delegate.tos_accept,request,request.delegate&#34;,&#34; code&#34;:&#34;未经授权

在实施此终端之前,我已经完成了授权和遵循优步官方文件的令牌程序。

我也在下面显示我的源代码,请告诉我出错的地方:

----> Intializing UBER SDK  <----

public void initializeUber() {
    if (!UberSdk.isInitialized()) {
        configuration = new SessionConfiguration.Builder().setClientId("LWOUTh3AUBkVtaI-cK58-t_pspsvRFfk").setServerToken("J5MNweewRs8vj4-dC0r9OMI4-qjibix0xv6gncGs").setRedirectUri("REDIRECT_URL").setScopes(Arrays.asList(Scope.REQUEST)).setEnvironment(SessionConfiguration.Environment.SANDBOX).build();

        UberSdk.initialize(configuration);

        accessTokenManager = new AccessTokenManager(context);
        System.out.println("Configuration-  ---->
            "+configuration.toString());
        loginManager = new LoginManager(accessTokenManager, new UberLoginCallback(context), configuration, LOGIN_CODE);
    } else {
        Log.i(TAG, "Uber SDK already initialized");
    }
}

public LoginManager getLoginManager() {
    PreferenceManager(context).setUberAuthToken(loginManager.getAccessTokenManager().getAccessToken().toString());
    System.out.println("Is authenticated-+loginManager.getAccessTokenManager().getAccessToken());
    return loginManager;
}

----->  Created API Interface  <----

@POST("v1.2/requests/estimate?")
Call<RequestEstimateFare> getRequestEstimateFare(@Query("start_latitude") String start_latitude, @Query("start_longitude") String start_longitude, @Query("end_latitude") String end_latitude, @Query("end_longitude") String end_longitude);

---->  Retrofit Library calling  <-----

apiInterface = retrofitConfig.createService(ApiInterface.class);
retrofitConfig.changeApiBaseUrl("https://api.uber.com/");
apiInterface.getRequestEstimateFare ("37.7752315", "-122.418075", "37.7752415", "-122.518075").enqueue(new Callback<RequestEstimateFare>() {
    @Override
    public void onResponse(Call<RequestEstimateFare> call, Response<RequestEstimateFare> response) {
    }

    @Override
    public void onFailure(Call<RequestEstimateFare> call, Throwable t) {
    }
});

我仍然遇到同样的问题。

2 个答案:

答案 0 :(得分:1)

问题是您没有请求“请求”&#39; oauth授权过程中的范围。

像: https://login.uber.com/oauth/v2/authorize?client_id=<CLIENT_ID>&response_type=code&scope=request

或者如果你想要所有范围,那么你需要传递所有链接,如: https://login.uber.com/oauth/v2/authorize?client_id=<CLIENT_ID>&response_type=code&scope=request request_receipt history profile

答案 1 :(得分:0)

首先,您是否将此请求作为您的5个已批准的开发者帐户之一?或者您是否要求完全访问?

https://developer.uber.com/docs/riders/references/api/v1.2/requests-estimate-post

  

特权范围此端点需要使用特权范围   在所有优步车手的生产。您可以使用此端点   在您作为自己或您注册的任何5个身份进行身份验证时立即   开发人员。当您准备好广泛分发您的应用程序时   所有优步车手使用,您可以要求完全访问。更多   有关范围的信息。

继发于此我不确定您的请求如何使用查询参数而不是JSON请求体?我只能使用

来查询您的查询
{"start_latitude": 37.7752278, "start_longitude": -122.4197513, "end_latitude": 37.7773228, "end_longitude":-122.4272052}