Я получаю gettibg {"type": "UNAUTHORIZED", "error_title": "Unauthorized"} во время нажатия на пост-запрос NEXMO - PullRequest
0 голосов
/ 06 ноября 2019

В этом я нажимаю NEXMO API для получения отчетов

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import net.minidev.json.JSONObject;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.io.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class POSTRequest {
    @Test
    public void RegistrationSuccessful()
    {
        RestAssured.baseURI ="https://api.nexmo.com";
        RequestSpecification request = RestAssured.given();
// Sending Request Parameters
        JSONObject requestParams = new JSONObject();
        requestParams.put("api_key", "xxxx"); // Cast
        requestParams.put("api_secret", "xxxx");
        requestParams.put("sig", "xxxxxxxxxxxxxxxx");

//Sending Request Body
RequestSpecification APIBOdy =request.body("{\n" +
        "  \"product\": \"SMS\",\n" +
        "  \"start_date\": \"2019-10-26T00:00:00+0000\",\n" +
        "  \"end_date\": \"2019-10-27T00:00:00+0000\",\n" +
        "  \"sms_type\":\"MT\"\n" +
        "}")
.header("Content-Type","application/json");
        APIBOdy.contentType(ContentType.JSON);
        Response response = request.post("/v1/reports/");

//Printing Response on console
        System.out.println(response.getBody().asString());

//Checking Status Code
        int statusCode = response.getStatusCode();
        Assert.assertEquals(statusCode, "201");
        String successCode = response.jsonPath().get("SuccessCode");
        Assert.assertEquals( "Correct Success code was returned", successCode, "OPERATION_SUCCESS");
    }
}

Ответ, который я получаю:

{"type": "UNAUTHORIZED", "error_title": "Unauthorized"}

java.lang.AssertionError: ожидается [201], но найдено [401] Ожидается: 201 Факт: 401

Даже когда я выполняю тот же запрос с тем же телом и параметрамив Почтальоне я получаю точный ответ.

1 Ответ

1 голос
/ 06 ноября 2019

Вы захотите использовать спецификацию v2 для своих нужд API отчетов, поскольку v1 не поддерживается. Это потребует внесения изменений в тело вашего запроса, а ваши средства авторизации см .: https://developer.nexmo.com/api/reports для получения полной информации

Некоторые основные моменты в спецификации о том, что ключ api / секрет api предназначены для передачи черезбазовая авторизация в заголовке в виде пары, соединенной двоеточием, поэтому ваш заголовок авторизации будет выглядеть следующим образом:

Basic API_KEY:API_SECRET

вам нужно будет преобразовать строку API_KEY: API_SECRET в base 64, что, конечно, можно сделать путем извлечения байтовиз строки и с использованием Convert.ToBase64String

var authBytes = Encoding.UTF8.GetBytes(apiKey + ":" + apiSecret);
var authString = Convert.ToBase64String(authBytes)

Также вам потребуется указать product, accountId и направление в теле запроса - а для запроса на создание отчета о публикации вам не понадобятся никакие параметры запроса.

В V1 я не вижу никаких указаний относительно того, как вы генерируете свою подпись, но вы должны использовать либо sig, либо ваш api secret, а не оба. Подробнее о генерации подписи смотрите: https://developer.nexmo.com/concepts/guides/signing-messages

, но реально вам не следует использовать V1, так как он не поддерживается.

надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...