[Python] Bitunix API Signature Failure with Python

Discussão em 'Python' iniciado por Stack, Maio 18, 2025.

  1. Stack

    Stack Membro Participativo

    I have a code snippet I am trying to prove works and allows me to connect to the bitunix futures API. I have an idea for a bot I want to write.

    Instructions for creating the signature: [https://openapidoc.bitunix.com/doc/common/sign.html]

    Api I want to call: [https://openapidoc.bitunix.com/doc/account/get_single_account.html]

    Here is the code I have written so far. I have a valid API key & secret (shown below as abc) but it continues to fail. I get the following error: I can reproduce this in the script as well as with Postman.


    Response: {'code': 10007, 'data': None, 'msg': 'Signature Error'}
    ​

    import requests
    import hashlib
    import uuid
    import time
    from urllib.parse import urlencode

    def sha256_hex(input_string):
    return hashlib.sha256(input_string.encode('utf-8')).hexdigest()

    def generate_signature(api_key, secret_key, nonce, timestamp, query_params):
    """
    Generate the double SHA-256 signature as per Bitunix API requirements.
    """
    # Concatenate nonce, timestamp, api_key, query_params, and an empty body
    digest_input = nonce + timestamp + api_key + query_params + ""

    # First SHA-256 hash
    digest = sha256_hex(digest_input)

    # Append secret_key to the digest
    sign_input = digest + secret_key

    # Second SHA-256 hash
    signature = sha256_hex(sign_input)

    return signature

    def get_account_info(api_key, secret_key, margin_coin):
    """
    Call the Bitunix 'Get Single Account' endpoint with proper signing.
    """
    # Generate nonce: 32-character random string
    nonce = uuid.uuid4().hex

    # Generate timestamp in YYYYMMDDHHMMSS format
    timestamp = time.strftime("%Y%m%d%H%M%S", time.gmtime())

    # Set query parameters
    params = {"marginCoin": margin_coin}
    query_string = urlencode(params)

    # Generate the signature
    signature = generate_signature(api_key, secret_key, nonce, timestamp, query_string)

    headers = {
    "api-key": api_key,
    "sign": signature,
    "timestamp": timestamp,
    "nonce": nonce,
    "Content-Type": "application/json"
    }

    base_url = "https://fapi.bitunix.com"
    request_path = "/api/v1/futures/account"
    url = f"{base_url}{request_path}?{query_string}"

    print(f"Query String: {query_string}")
    print(f"Digest Input: {nonce + timestamp + api_key + query_string + ''}") # Debugging digest input
    print(f"Signature: {signature}")
    print(f"URL: {url}")

    response = requests.get(url, headers=headers)
    return response.json()

    # Example usage
    if __name__ == "__main__":
    api_key = "your_api_key" # Replace with your actual API key
    secret_key = "your_secret_key" # Replace with your actual secret key
    margin_coin = "USDT" # Example margin coin

    result = get_account_info(api_key, secret_key, margin_coin)
    print("Response:", result)

    Continue reading...

Compartilhe esta Página