首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bybit api连接"retCode":10004,“retMsg”:“错误标志!”

Bybit api连接"retCode":10004,“retMsg”:“错误标志!”
EN

Stack Overflow用户
提问于 2022-10-14 13:06:29
回答 1查看 234关注 0票数 0

根据官方文档边距/#t-构造等距,我试图获得帐户余额端点:GET /unified/v3/private/account/wallet/balance。但不管怎样,我得到了这样的回应:{"retCode":10004,"retMsg":"error sign!","result":null,"retExtInfo":null,"time":1665751778451}

代码语言:javascript
运行
复制
from urllib.parse import urlencode
import requests
import hashlib
import time
import hmac
import uuid

api_key = 'xxxxxxxxxxxx'
secret_key = 'xxxxxxxxxxxxxxxxxxxx'
httpClient = requests.Session()
recv_window = "5000"
url = "https://api.bybit.com"
    
def HTTP_Request(endPoint, method, payload):

    time_stamp = requests.get(url + "/v3/public/time").json()
    time_stamp = str(time_stamp["time"])
    
    signature = genSignature(params, time_stamp)
    
    headers = {
            'X-BAPI-SIGN-TYPE': '2',
            'X-BAPI-SIGN': signature,
            'X-BAPI-API-KEY': api_key,
            'X-BAPI-TIMESTAMP': time_stamp,
            'X-BAPI-RECV-WINDOW': recv_window
    }
    
    response = httpClient.request(method, url+endpoint+"?"+payload, headers=headers)
    print(response.text)


def genSignature(payload, time_stamp):
    # encoding list obj to url format str
    peyload_url_enc = urlencode(
        sorted(payload.items(), key=lambda tup: tup[0])
    )

    param_str = str(time_stamp) + api_key + recv_window + peyload_url_enc
    hash = hmac.new(
        key=bytes(secret_key, "utf-8"),
        msg=param_str.encode("utf-8"),
        digestmod="sha256"
    )
    
    signature = hash.hexdigest()
    return signature
    
    
endpoint = "/unified/v3/private/account/wallet/balance"
method = "GET"
params = {"coin": "USDT"}
HTTP_Request(endpoint, method, str(params))

问题似乎在genSignature中,但是无论我如何更改函数,错误仍然是一样的。

EN

回答 1

Stack Overflow用户

发布于 2022-10-14 16:22:58

多亏了这个储存库,我找到了另一种连接到Bybit的方法。因此,如果遇到类似的问题,请打开链接,还有一些创建不同post/get查询的示例。

我的工作变体:

代码语言:javascript
运行
复制
def bybit_spot_balance(AccessKey: str, SecretKey: str) -> dict:
    
    params = {
        "api_key": AccessKey,
        "timestamp": round(time.time() * 1000),
        "recv_window": 10000
    }

    # Create the param str
    param_str = urlencode(
        sorted(params.items(), key=lambda tup: tup[0])
    )

    # Generate the signature
    hash = hmac.new(
        bytes(SecretKey, "utf-8"),
        param_str.encode("utf-8"),
        hashlib.sha256
    )
    
    signature = hash.hexdigest()
    sign_real = {
        "sign": signature
    }

    param_str = quote_plus(param_str, safe="=&")
    full_param_str = f"{param_str}&sign={sign_real['sign']}"

    # Request information
    url = "https://api.bybit.com/spot/v3/private/account"
    headers = {"Content-Type": "application/json"}
    
    body = dict(params, **sign_real)
    urllib3.disable_warnings()

    response = requests.get(f"{url}?{full_param_str}", headers=headers, verify=False).json()

    return response
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74069706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档