使用urlencoded通过Retrofit POST从Linkedin获取access_token

时间:2018-01-12 07:40:26

标签: android retrofit linkedin

我找不到任何关于从Linkedin api获取access_token的解决方案。这是我的代码:

import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface RetrofitServiceforLinkedin {

        @FormUrlEncoded
        @POST ("uas/oauth2/accessToken")
        Call<LinkedinResponse> getDataLinkedinAccessTokenviaRest(
                  @Field ("code") String code);   
}

LinkedinResponse.class

public class LinkedinResponse {
    private DataLinkedinAccessToken data;
    public DataLinkedinAccessToken getData() {
            return data;
    }
    public void setData(DataLinkedinAccessToken data) {
            this.data = data;
    }
}

DataLinkedinAccessToken.class

public class DataLinkedinAccessToken {
    String access_token;
    String expires_in;
    public String getAccess_token() {
            return access_token;
    }
    public String getExpires_in() {
            return expires_in;
    }

}

在Fragment类中我基本上使用RetrofitService获取了AccessToken。

  private void getLinkedinAccessToken(String authorization_code) {
            Log.i("ACCESS", authorization_code);
            Call<LinkedinResponse> call = RestClientLinkedin.getRetrofitService().getDataLinkedinAccessTokenviaRest(authorization_code);//
            Log.i("ACCESS", authorization_code + "  : NO PROBLEM");
            call.enqueue(new Callback<LinkedinResponse>() {
                    @Override//
                    public void onResponse(Call<LinkedinResponse> call, Response<LinkedinResponse> response) {
                            Log.i("ACCESSenönce", response.body() + "  : is response null?");
                            if (response.body() != null) {                                        dataLinkedinAccessToken.add(response.body().getData());
                                    Log.i("ACCESSönce", response.body().getData().toString());
                                    access_tokenLinkedin = response.body().getData().getAccess_token();
                                    Log.i("ACCESSson", access_tokenLinkedin);
//logtime
            }
                    }

所以access_tokenLinkedin是空的吗?我找不到任何解决方案。

1 个答案:

答案 0 :(得分:0)

我找到了答案。 Linkedin api通过autorization_code交换提供access_token。所以应该做的第一件事是通过使用来交换它们 UrlEncoded html POST如下。

   public interface RetrofitServiceforLinkedin {

    @FormUrlEncoded
    @POST ("uas/oauth2/accessToken")
    Call<LinkedinResponse> getDataLinkedinAccessTokenviaRest(
              @Field ("grant_type") String grant_type,
              @Field ("code") String code,
              @Field ("redirect_uri") String redirect_uri,
              @Field ("client_id") String client_id,
              @Field ("client_secret") String client_secret
    );

}