Я работаю над проектом, который требует использования 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? Я прочитал всю документацию несколько раз и не могу понять, как и почему это происходит.