抱歉,我没有足够的声誉发表评论,所以这是我唯一的选择。@egorkh 你解决了这个问题吗?也许您已经收到了来自 blockchain.info 支持的解释?我已经向他们发送了一个关于此的问题,但他们回答的时间太长了。
更新:最后,我找到了解决方案。
就我而言,“内部处理程序错误”消息的原因是对其 API 的错误解释。
因为他们没有在他们的 java-api 中实现balance_update请求,所以我自己做了,而且我做错了。
我已经把这个参数:
{"key":keyk,"addr":r,"callback":"https%3A%2F%2Fdoors03.ru","onNotification":"KEEP", "op":"RECEIVE"}
作为 post 参数,就像他们在 api 中提供的其他方法一样。在这些方法中,参数是 URLEncoded,就像你对回调链接所做的那样。但...
在此 HTML 请求中,它们必须以 json 格式以纯文本形式发送,无需任何特殊编码,如下所示:
Map<String, String> params = new HashMap<String, String>();
params.put("addr", address);
params.put("callback", callbackUrl);
params.put("key", apiCode);
params.put("onNotification", keepOnNotification? "KEEP" : "DELETE");
params.put("confs", Integer.toString(confirmationCount));
params.put("op", StringUtils.isBlank(operationType) ? "ALL" : operationType);
//parse parameters map to json string(that's optional: you can write it directly as string)
String body = new Gson().toJson(params);
if (requestMethod.equals("POST")) {
byte[] postBytes = body.getBytes("UTF-8");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "text/plain");
conn.setRequestProperty("Content-Length", String.valueOf(postBytes.length));
conn.getOutputStream().write(postBytes);
conn.getOutputStream().close();
}
您的错误的主要原因可能是您将 "Content-Type": "text/plain" 放入数据对象(, 可能还有编码的回调 url)。