Проверка подлинности WP Rest API OAuth1 в Android с использованием библиотеки залпа - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь отправить GET-запрос на API Wordpress rest из моего приложения для Android.В почтальоне я отправляю запрос POST и GET, который работал, но когда я отправляю запрос с теми же заголовками, я получаю com.android.volley.AuthFailureError .

Вот мой код

 public void getSlides(final onSlideReceived onSlideReceived) {
    JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET,
            BASE_URL + "slider", null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            Toast.makeText(context, response.toString(), Toast.LENGTH_LONG).show();
            Log.i(ITAGSLIDE, "onResponse: "+response);

            onSlideReceived.onReceived(slides);
        }
    } , new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(context, error.toString(), Toast.LENGTH_SHORT).show();
            Log.e(ETAGSLIDE, "onErrorResponse: "+error.toString() );
        }
    }){

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String,String> headers = new HashMap<>();

            Map<String,String> params = new HashMap<>();
            params.put("oauth_consumer_key",CONSUMER_KEY);
            params.put("oauth_nonce", OAUTH_NONCE);
            params.put("oauth_signature_method",OAUTH_SIGNATURE_METHOD);
            params.put("oauth_timestamp",OAUTH_TIMESTAMP);
            params.put("oauth_token", OAUTH_TOKEN);
            params.put("oauth_version",OAUTH_VERSION);
            String encodedParams = mapToStringAnd(params);

            String string_to_sign = "";
            try {
                string_to_sign = (new StringBuilder("GET&"))
                        .append(URLEncoder.encode(
                        BASE_URL+"slider", "utf-8")).append("&")
                        .append(URLEncoder.encode(encodedParams, "utf-8")).toString();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            Log.d("string to sign", string_to_sign);

            try {
                Mac mac = Mac.getInstance("HMAC-SHA1");
                String secret = CONSUMER_SECRET + "&" + OAUTH_TOKEN_SECRET;
                Log.d("secret", secret);

                mac.init(new SecretKeySpec(secret.getBytes("utf-8"), "HMAC-SHA1"));
                OAUTH_SIGNATURE = Base64.encodeToString(mac.doFinal(string_to_sign.getBytes("utf-8")), 0).trim();
                Log.d("signature", OAUTH_SIGNATURE);
            } catch (NoSuchAlgorithmException | InvalidKeyException | UnsupportedEncodingException e) {
                e.printStackTrace();
            }


            String query =
                    "oauth_consumer_key=\""+CONSUMER_KEY+"\""+
                    ",oauth_token=\""+OAUTH_TOKEN+"\""+
                    ",oauth_signature_method=\""+OAUTH_SIGNATURE_METHOD+"\""+
                    ",oauth_timestamp=\""+OAUTH_TIMESTAMP+"\""+
                    ",oauth_nonce=\""+OAUTH_NONCE+"\""+
                    ",oauth_version=\""+OAUTH_VERSION+"\""+
                    ",oauth_signature=\""+OAUTH_SIGNATURE+"\"";

            Log.d("query","OAuth "+query);

            headers.put("Authorization","OAuth "+query);
            return headers;
        }
    };

    request.setRetryPolicy(new DefaultRetryPolicy(18000,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    Volley.newRequestQueue(context).add(request);

}

Наконец, вот мой запрос заголовка, который я получаю в logcat:

OAuth oauth_consumer_key = "*****", oauth_token = "******", oauth_signature_method = "HMAC-SHA1 ", oauth_timestamp =" 1545421361 ", oauth_nonce =" 8.308277993153459E7 ", oauth_version =" 1.0 ", oauth_signature =" ******* "

Где моя ошибка?Как мне отправить запрос на получение ответа?Большое спасибо за любую помощь.

...