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

疑問

※当サイトはアフィリエイト広告を利用しています

2020/9/16追記
  • Binance JEXはBinance Futures(先物取引)とは別のサービスです。
  • Binance JEXの出来高が少なくなっており、現状まともなサービスは提供されていません。

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

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

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

https://kennejs.com/entry/binance-jex-futures

https://kennejs.com/entry/binance-jex-api

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口座開設

https://kennejs.com/entry/binance-jex-futures

https://kennejs.com/entry/binance-jex-api

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です