Binance JEX APIで認証が通らない対処法とハマりやすいポイント(Python)

※この記事は10/3に作成されました。

こんにちは、ケネです。

Binance JEXのAPIでハマりやすいポイントをまとめました。

「Binance JEX」のAPI認証が通らず困っている方は参考にしてみてください。

以下の記事でETHでレバレッジ取引をしたい方日本の取引所FXが使いづらいと感じている方向けにBinance JEXの特徴、APIの使い方の概要を解説しています。

Binance JEXの仮想通貨FX(Futures)の特徴 – Node.jsで暗号資産アービトラージ

Binance JEXでAPIを使う手順 – Node.jsで暗号資産アービトラージ

  • まとめ
  • スポンサーリンク

    Binance JEX Signed Endpoint Security(認証ありAPI)のサンプルコード

    まずはサンプルコードを載せておきます。こちらをコピペすれば実行できます。

    なお、以下のサイトを一部参考にさせてもらっています。

    Python Connect to Binance API using requests | Lua Software Code

    Binance API用のコードですが、非常に参考になりました。
    (Binance JEXのAPIはBinanceのAPIに似ているためBinanceの情報が参考になります)

    #API KeyとSecret Keyを設定
    apikey = xxxxx
    secret = yyyyy
    #注文用の関数を定義
    def sendOrder(side, price, quantity):
    path = '/api/v1/contract/order';
    method = 'POST';
    timestamp = round(datetime.now().timestamp() * 1000)
    data = {
    "symbol": "ETHUSDT",
    "side": side,
    "type": "LIMIT",
    "quantity": quantity,
    "price": price,
    'recvWindow': 5000,
    "timestamp": timestamp
    }
    query_string = urlencode(data)
    signature = hmac.new(bytearray(secret.encode('utf-8')), query_string.encode('utf-8') , digestmod = hashlib.sha256 ).hexdigest()
    data['signature'] = signature
    headers = {
    'X-JEX-APIKEY': apikey
    }
    url = 'https://www.jex.com' + path
    res = requests.post(url, headers=headers, params=data)
    print(json.loads(res.text))
    #注文用の関数を実行
    sendOrder("BUY", 150, 0.01)

    Binance JEXでハマりやすいポイント

    続いて私がハマった2件のエラーの原因を解説していきます。

    エラーメッセージ(Invalid API-key, IP, or permissions for action)

    API key、IPアドレス、権限のいづれかが無効だというメッセージです。

    まずは、API Keyが間違っていないこと、(IPアドレスで制限をかけた場合)のIPアドレスが正しいこと、「利用する機能」にチェックされていることをJEXのAPI管理画面から確認しましょう。

    API Key Setting

    上記の3点が正しい場合、認証の設定値が誤っている場合がありますので、次の観点で確認してみてください。
    jex-official-api-docs/rest-api.md at master · JexApi/jex-official-api-docs · GitHubを参照

    • endpointがhttps://testnet.jex.com(テストサイトだとエラーになる)
    • パラメータをapplication/x-www-form-urlencoded形式で渡していない(JSONで渡すとエラーとなる)
    • tokenをheaderのX-JEX-APIKEYに設定していない
    • 作成したsignatureをパラメータにいれていない

    なお、APIドキュメントはできると読み取れますが、パラメータをURLのパラメータに設定するとうまく動きませんでした。
    サンプルコードの「query_string = urlencode(data)」のようにurlencode形式で設定すると認証が通りました。

    エラーメッセージ(Timestamp for this request is outside of the recvWindow)

    JEXではタイムスタンプをミリ秒まで設定する必要があります。

    なので、通常のPythonでのタイムスタンプ(秒までのUnixtime)の値を設定すると上記のメッセージが出力されます。

    もっとも簡単な対策はミリ秒(3桁の数字)を付与することです。

    サンプルコードでは1000倍することで000を付与しています。
    (「timestamp = round(datetime.now().timestamp() * 1000)」の箇所です)

    まとめ

    Binance JEXのAPI認証でハマりやすいポイントを解説しました。

    うまく認証できない方は参照してみてください。

    おわり

    Binanceはこちらから登録できます。紹介プログラムで10%のcommission feeを付与しましたのでお得に取引できます。→Binance口座開設

    www.kennejs.com

    www.kennejs.com

    コメント

    タイトルとURLをコピーしました