我要与之交互的API要求提供“密钥”,“现成”和“签名”,以下是其构建方式:
”签名是通过在随机数+ HTTP方法+ requestPath + JSON有效负载(串联的字符串中没有'+'符号)的连接上使用Bitso API Secret创建SHA256 HMAC生成的,并十六进制编码输出。值应与Authorization标头中的nonce字段相同。requestPath和JSON有效负载当然必须与请求中使用的完全相同。“
问题是当我尝试发送json负载时。如果我将json有效负载作为字典发送,则程序会说不能将其串联在一起,当我将其作为字符串发送时,服务器响应会表明现时无效。
我应该如何构建json有效负载?
这是我的代码,将有效载荷作为字符串发送:
import time
import hmac
import hashlib
import requests
bitso_key = "xxxxxxxxxx"
bitso_secret = "xxxxxxxxxxxxxxxxxxxxxxxx"
nonce = str(int(round(time.time() * 1000)))
http_method = "POST"
request_path = "/v3/orders/"
json_payload = """{'book':'xrp_mxn','side':'sell','type':'market','major':'0.5'}"""
print(json_payload)
# Create signature
message = nonce+http_method+request_path+json_payload
print(message)
signature = hmac.new(bitso_secret.encode('utf-8'),message.encode('utf-8'),hashlib.sha256).hexdigest()
# Build the auth header
auth_header = 'Bitso %s:%s:%s' % (bitso_key, nonce, signature)
# Send request
response = requests.get("https://api.bitso.com/v3/orders/", headers={"Authorization": auth_header})
print (response.content)
这是回应:
b'{"success":false,"error":{"code":"0201","message":"Nonce o credenciales inv\\u00e1lidas"}}'
如果我将它作为字典发送:
json_payload = {'book':'xrp_mxn','side':'sell','type':'market','major':'0.5'}
这是回应:
message = nonce+http_method+request_path+json_payload
TypeError: can only concatenate str (not "dict") to str
这是api的文档页面:https://bitso.com/api_info#place-an-order
答案 0 :(得分:0)
您不能使用dict
连接字符串,但是可以使用json
库将dict
转换为json字符串:
import json
import time
nonce = str(int(round(time.time() * 1000)))
http_method = "POST"
request_path = "/v3/orders/"
payload = {'book': 'xrp_mxn', 'side': 'sell', 'type': 'market', 'major': '0.5'}
json_payload = json.dumps(payload)
message = nonce + http_method + request_path + json_payload
print(message)
您得到:
1568403950209POST/v3/orders/{"major": "0.5", "type": "market", "book": "xrp_mxn", "side": "sell"}
答案 1 :(得分:0)
当user2864740和Laurent LAPORTE评论该代码出了什么问题时,是将字符串编码为JSON格式,而且我使用的代码来自API官方文档中的旧版本,因此我检查了较新的版本和格式将字典转换成JSON并完成。