【问题标题】:Blockchain info wallet check payment区块链信息钱包支票付款
【发布时间】:2017-12-15 17:48:41
【问题描述】:

我正在尝试创建付款账单并通过电报机器人发送给我的客户: 我正在使用区块链 API V2-https://blockchain.info/api/api 接收。我的代码是:

xpub='***'
keyk='02e57f1***'
url='https://api.blockchain.info/v2/receive?xpub='+str(xpub)+'&callback=https%3A%2F%2Fdoors03.ru&key='+keyk
x=requests.get(url)
r=x.json()
r=r['address']

r - 是一个地址。 我把它寄给我的客户(顺便说一句,有什么方法可以发送带有确切付款金额的地址)。在我想检查是否收到付款后:

data={ "Content-Type": "text/plain","key":keyk,"addr":r,"callback":"https%3A%2F%2Fdoors03.ru","onNotification":"KEEP", "op":"RECEIVE"}
r = requests.post(url, data=data)

这是响应 - u'{\n "message" : "Internal handlers error"\n}' 我做错了什么?如何检查付款?如何发送精确的 btc 或 ethereum 总和的地址?

【问题讨论】:

标签: python api request blockchain blockchain.info-api


【解决方案1】:

抱歉,我没有足够的声誉来发表评论,所以这是 我唯一的选择。 @egorkh 你解决了这个问题吗?也许 您收到了来自 blockchain.info 支持的解释?我有 向他们发送了一个关于此的问题,但他们回答的时间太长了。

更新:终于,我找到了解决方案。

就我而言,“Internal handlers error”消息的原因是对其 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)

【讨论】:

  • 嗨,您可以通过这种方式检查余额blockchain.info/rawaddr/1D*** 1D*** - 是您要检查的地址。现在我正在寻找以太坊地址的解决方案。这个不行
  • 我删除内容类型并粘贴链接而不进行任何编码。还是一样的错误(
  • @egorkh 好吧,在使用他们的 api 一个月后,我发现他们的服务器肯定有问题,而且支持并不是最好的帮助。我可以建议您使用restlet-client extension 测试原始请求。只需将我的test case 导入为“Restlet 客户端存储库”并设置正确的 api 密钥和回调。您应该会收到适当的回复。
猜你喜欢
  • 2010-09-30
  • 1970-01-01
  • 2013-09-07
  • 2017-12-17
  • 2012-02-28
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多