Python3 Gemini 沙盒上的端点不匹配 API
Python3 Endpoint Mismatch on Gemini Sandbox API
我正在 Python3 中构建一个用于货币交易的算法交易应用程序。我正在尝试调用 Python3 中的 Gemini Exchange Sandbox API 来获取当前余额。每次我发送 post 请求时,我都会返回如下错误:
{
"result":"error",
"reason":"EndpointMisatch",
"message":"EndpointMisatch"
}
作为对此的回应,我将端点更改为“https://api.gemini.com/v1/balances”的生成 url,这导致了 InvalidSignature 错误。
我已经从沙箱中删除了我的 API 并创建了一个新沙箱以确保我有基金经理和交易员访问权限,无论是否有心跳都无济于事。文档在这里:https://docs.sandbox.gemini.com/rest-api/?python#error-codes
这是我的功能:
导入请求
导入 json
导入时间
导入 base64
导入 hmac
导入 hashlib
def checkBalance(self):
'''
function calls private gemini method
to return account balances. Update with
production or sandbox keys/secrets depending on
environment running.
'''
#set increment for unique session
nonce = int(round(time.time()*1000))
#sandbox api endpoint
url = 'https://api.sandbox.gemini.com/v1/balances'
#build the dict payload object
payload = {
'request':'v1/balances',
'nonce': nonce
}
#endcode payload as a json object for hashing
payload = str.encode(json.dumps(payload))
#base64 encode the payload
b64 = base64.b64encode(payload)
#create the signature using sandbox secret and encoded payload in sha384 hash
signature = hmac.new(str.encode(self.s_secret), b64, hashlib.sha384).hexdigest()
#build headers as required for contacting api endpoint
headers = {
'Content-Type':'text/plain',
'X-GEMINI-APIKEY': self.s_key,
'X-GEMINI-PAYLOAD': b64,
'X-GEMINI-SIGNATURE': signature
}
#retrieve data from POST request as response
response = requests.request("POST", url, headers=headers)
#return text of response
return response.text
我刚开始使用 b64、hmac 和 hashlib 库。预先感谢您的帮助。
经过多次测试,我发现了问题所在。我的有效负载数据字典将端点列为 'v1/balances' 而不是“/v1/balances”。我的新有效负载数据如下所示(创建了一个函数来处理随机数):
payload = dict(request = '/v1/balances', nonce = str(self.nonce()))
当我使用此信息更新负载并发布数据时,我的沙箱响应显示如下:
[{
'type': 'exchange',
'currency': 'BTC',
'amount': '1000',
'available': '1000',
'availableForWithdrawal': '1000'
},
{
'type': 'exchange',
'currency': 'USD',
'amount': '100000.00',
'available': '100000.00',
'availableForWithdrawal': '100000.00'
},
{
'type': 'exchange',
'currency': 'ETH',
'amount': '20000',
'available': '20000',
'availableForWithdrawal': '20000'
}]
我正在 Python3 中构建一个用于货币交易的算法交易应用程序。我正在尝试调用 Python3 中的 Gemini Exchange Sandbox API 来获取当前余额。每次我发送 post 请求时,我都会返回如下错误:
{
"result":"error",
"reason":"EndpointMisatch",
"message":"EndpointMisatch"
}
作为对此的回应,我将端点更改为“https://api.gemini.com/v1/balances”的生成 url,这导致了 InvalidSignature 错误。
我已经从沙箱中删除了我的 API 并创建了一个新沙箱以确保我有基金经理和交易员访问权限,无论是否有心跳都无济于事。文档在这里:https://docs.sandbox.gemini.com/rest-api/?python#error-codes
这是我的功能: 导入请求 导入 json 导入时间 导入 base64 导入 hmac 导入 hashlib
def checkBalance(self):
'''
function calls private gemini method
to return account balances. Update with
production or sandbox keys/secrets depending on
environment running.
'''
#set increment for unique session
nonce = int(round(time.time()*1000))
#sandbox api endpoint
url = 'https://api.sandbox.gemini.com/v1/balances'
#build the dict payload object
payload = {
'request':'v1/balances',
'nonce': nonce
}
#endcode payload as a json object for hashing
payload = str.encode(json.dumps(payload))
#base64 encode the payload
b64 = base64.b64encode(payload)
#create the signature using sandbox secret and encoded payload in sha384 hash
signature = hmac.new(str.encode(self.s_secret), b64, hashlib.sha384).hexdigest()
#build headers as required for contacting api endpoint
headers = {
'Content-Type':'text/plain',
'X-GEMINI-APIKEY': self.s_key,
'X-GEMINI-PAYLOAD': b64,
'X-GEMINI-SIGNATURE': signature
}
#retrieve data from POST request as response
response = requests.request("POST", url, headers=headers)
#return text of response
return response.text
我刚开始使用 b64、hmac 和 hashlib 库。预先感谢您的帮助。
经过多次测试,我发现了问题所在。我的有效负载数据字典将端点列为 'v1/balances' 而不是“/v1/balances”。我的新有效负载数据如下所示(创建了一个函数来处理随机数):
payload = dict(request = '/v1/balances', nonce = str(self.nonce()))
当我使用此信息更新负载并发布数据时,我的沙箱响应显示如下:
[{
'type': 'exchange',
'currency': 'BTC',
'amount': '1000',
'available': '1000',
'availableForWithdrawal': '1000'
},
{
'type': 'exchange',
'currency': 'USD',
'amount': '100000.00',
'available': '100000.00',
'availableForWithdrawal': '100000.00'
},
{
'type': 'exchange',
'currency': 'ETH',
'amount': '20000',
'available': '20000',
'availableForWithdrawal': '20000'
}]