我正在尝试使用retrofit调用Kraken API。我有一个工作版本,我想转换为改造版本,但我在传递 POST 参数时遇到了一些问题。AsyncHttpClient
如文档中所述,它需要:
- 2 个 HTTP 标头 :
API-Key
和API-Sign
. - 一个 POST 数据:
nonce
- 我正在调用的端点的 2 个输入参数:
start
和ofs
AsyncHttpClient版本(有效):
String start = String.valueOf(cal.getTimeInMillis() / 1000);
String key = properties.getProperty("KRAKEN_API_PUBLIC_KEY");
String nonce = String.valueOf(System.currentTimeMillis());
String path = "/0/private/TradesHistory";
RequestParams params = new RequestParams();
params.add("nonce", nonce);
params.add("start", start);
params.add("ofs", String.valueOf(offset));
String sign = calculateSignature(path, nonce, params.toString());
AsyncHttpClient client = new AsyncHttpClient();
client.addHeader("API-Key", key);
client.addHeader("API-Sign", sign);
client.post("https://api.kraken.com"+ path, params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
// works
}
});
改造版本(响应EAPI:Invalid key
):
String start = String.valueOf(cal.getTimeInMillis() / 1000);
String key = properties.getProperty("KRAKEN_API_PUBLIC_KEY");
String nonce = String.valueOf(System.currentTimeMillis());
String path = "/0/private/TradesHistory";
RequestParams params = new RequestParams();
params.add("nonce", nonce);
params.add("start", start);
params.add("ofs", String.valueOf(offset));
String sign = calculateSignature(path, nonce, params.toString());
KrakenService krakenService = KrakenService.retrofit.create(KrakenService.class);
Call<KrakenTrades> call = krakenService.getTradeHistory(key, sign, nonce, start, String.valueOf(offset));
call.enqueue(new Callback<KrakenTrades>() {
@Override
public void onResponse(@Nullable Call<KrakenTrades> call, @Nullable Response<KrakenTrades> response) {
// EAPI:Invalid key
}
});
服务 :
public interface KrakenService {
@FormUrlEncoded
@POST("private/TradesHistory")
Call<KrakenTrades> getTradeHistory(
@Header("API-Key") String apiKey,
@Header("API-Sign") String apiSign,
@Field("nonce") String nonce,
@Field("start") String start,
@Field("ofs") String ofs);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.kraken.com/0/")
.addConverterFactory(GsonConverterFactory.create())
.build();
}
只是电话不同,我错过了什么吗?我尝试使用@query
, @Body
,等@FieldMap
,@HeaderMap
但无法使其正常工作。
编辑:我刚刚尝试使用其他 API,如Poloniex,但遇到了同样的问题(无效密钥),但它仍然适用于基本的 HTTPClient。