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'
}]