Coinbase API - передача между аккаунтами фактически не выполняется, несмотря на ответ 200 - PullRequest
0 голосов
/ 16 июня 2020

Я работаю над проектом, который требует использования Coinbase API v2 для перевода между двумя кошельками. Когда я вызываю API (https://api.coinbase.com/v2/accounts/: account_id / transaction ), я получаю код ответа 200 Success с пустым телом. Это было бы хорошо, но фактический перевод не происходит на моем счете. Документация API предполагает, что следует ожидать кода ответа 201 с квитанцией, отображающей всю соответствующую информацию о транзакции. Ничего из этого не происходит.

Ожидаемые аргументы:

  • Тип (в этом случае всегда будет «передача»)
  • Кому (учетная запись ID)
  • Сумма (двойное значение)
  • Валюта (Денежная единица переводимой суммы)

Я систематически менял каждую переменную моего запроса, каждый элемент тела / заголовка, изменение идентификаторов учетных записей (туда и обратно), ввод неверных валют, сумм и т. д. c. Каждый раз возвращается 404 Bad Request, сообщающее мне, где ошибка. Я также делаю несколько других вызовов API в других точках, каждый из которых требует заголовков авторизации, и они передают и возвращают ожидаемые данные. Это означает, что моя текущая настройка для выполнения вызовов API верна, по крайней мере, с точки зрения кода.

Вот мой текущий метод вызова:

Main:

    JSONObject j = APICallBuilder.convertCurrency(CurrencyHandler.findCurrencyID("ETH"), CurrencyHandler.findCurrencyID("BTC"), 54);
    System.out.println(j.toString(1));

CurrencyHandler:

    public static String findCurrencyID(String code) {
        String ID = "Invalid code";
        for(int i = 0; i < currencyArray.length; i++) {
            if(currencyArray[i].getCode().equals(code)) {
                ID = currencyArray[i].getID();
            }
        }
        return ID;
    }

Я получаю значение идентификатора непосредственно из https://api.coinbase.com/v2/accounts, и я уверен, что это правильно, так как неправильные значения (до или от) вызовут ответ 404 Bad Request. Я проверил это, сохранив тот же формат идентификаторов, но заменив один символ с другим символом (убедитесь, что символ находится между 0-f, как и исходный идентификатор).

Вызов API:

    public static JSONObject convertCurrency(String fromCode, String toCode, double amount) {
        String url = requests.getJSONObject("convert").getString("requestPath");
        String requestPath = "/v2/accounts/${var}/transactions";
        String method = "POST";
        String timestamp = getEpochTime();

        url = url.replace("${var}", fromCode);
        requestPath = requestPath.replace("${var}", fromCode);

        JSONObject bodyFormatter = new JSONObject();
        bodyFormatter.put("type", "transfer");
        bodyFormatter.put("to", toCode);
        bodyFormatter.put("amount", amount);
        bodyFormatter.put("currency", "USD");


        String body = bodyFormatter.toString();
        String header = HeaderGenerator.getHMACHeader(secretKey, timestamp, method, requestPath, body);

        RequestBody rb = RequestBody.create(JSON, bodyFormatter.toString());

        Request request = new Request.Builder()
                .addHeader(CB_ACCESS_KEY, accessKey)
                .addHeader(CB_ACCESS_SIGN, header)
                .addHeader(CB_ACCESS_TIMESTAMP, timestamp)
                .addHeader(CB_VERSION, getDate())
                .addHeader("Accept", "application/json")
                .addHeader("Content-Type", "application/json")
                .url(url)
                .post(rb)
                .build();

        Response res;
        JSONObject par = null;
        try {
            res = APICommunicator.sendRequest(request);
            String data = res.body().string();
            System.out.println(res.code());
            par = new JSONObject(data);
        } catch (IOException e) {
            e.printStackTrace();
            ErrorLogger.logException(e);
        }

        return par;
    }

Что-то не хватает мне в API? Я прочитал всю документацию несколько раз и не могу понять, как и почему это происходит.

...