oAuth 1.0获取请求改进android

时间:2017-08-08 20:09:00

标签: android oauth retrofit get-request oauth-1.0a

我想使用Retrofit实现oAuth 1.0 get请求,但无法获得响应。

enter image description here

邮递员的回应:

{
    "1": {
        "entity_id": "1",
        "parent_id": "0",
        "position": "0",
        "level": "0",
        "name": "Root Catalog"
    },
    "2": {
        "entity_id": "2",
        "parent_id": "1",
        "position": "1",
        "level": "1",
        "name": "Default Category",
        "is_active": "1"
    }
}

我的界面是:

 @GET("/api/rest/categories/?")
    @Headers({ "Content-Type: application/json"})
    Call<ResponseBody> getProduct( @Field("oauth_consumer_key") String grantType,
                                   @Field("oauth_token") String username,
                                   @Field("oauth_signature_method") String sig,
                                   @Field("oauth_timestamp") String timS,
                                   @Field("oauth_nonce") String nonc,
                                   @Field("oauth_version") String vers,
                                   @Header("Authorization") String authorization);

方法调用是:

private void callService(){

 byte[] credentials = "CONSUMER_SECRETE:TOKEN_SECRETE".getBytes();
 String basicAuth = "Basic " + Base64.getEncoder().encodeToString(credentials);

UserClient apiService = ApiClient.getClient().create(UserClient.class);
Call<ResponseBody> call = apiService.getProduct("CONSUMER_KEY","TOKEN_KEY","HMAC-SHA1","1502218838","RuH2FG","1.0",basicAuth);
call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody>call, Response<ResponseBody> response) {
        if (response.isSuccessful()){
            if (response.isSuccessful()){

            }else{
                Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_LONG).show();
            }
        }else{
            //First Option of error handling..
            switch(response.code()){
                case 404:
                    Toast.makeText(getApplicationContext(),R.string.server_error404, Toast.LENGTH_SHORT).show();
                    break;
                case 500:
                    Toast.makeText(getApplicationContext(),R.string.server_error500, Toast.LENGTH_SHORT).show();
                    break;
                default:
                    Toast.makeText(getApplicationContext(),R.string.server_errorUnknow, Toast.LENGTH_SHORT).show();
            }
        }


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

        Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show();
    }
});

}

我还尝试了什么: Android OAuth Retrofit Access Token Request

并尝试其他类型,但没有一种可以使用。

任何人都可以帮我解决这个问题吗?我想通过改造来实现这一点。

1 个答案:

答案 0 :(得分:-1)

使用此库https://github.com/pakerfeldt/okhttp-signpost

public class ApiClient {
    public static Retrofit build() {
        //untuk oauth ver 1 methode
        OkHttpOAuthConsumer consumer = new OkHttpOAuthConsumer(Constant.CONSUMER_KEY, Constant.CONSUMER_SECRET);
        consumer.setTokenWithSecret("", "");

        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new SigningInterceptor(consumer))
                .build();

        Retrofit.Builder builder = new Retrofit.Builder()
                .baseUrl(Constant.BASE_URL_WEATHER)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create());

        Retrofit retrofit = builder.build();
        return retrofit;
    }
}