質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Bitcoin

Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

698閲覧

BitMEXへのリクエストが「その実行は失効している」と蹴られる。api-expires

NullPonTa

総合スコア4

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Bitcoin

Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/09/05 13:20

前提・実現したいこと

GoogleAppsScriptを使って仮想通貨取引サイトBitMEXのREST APIを使ったアプリケーションを作成しようとしています。
具体的に言うと、損益を取得しようとしています。

発生している問題・エラーメッセージ

いろいろなサイトを参考にして署名やapi-expiresの指定などをしたのですが、
api-expiresの時刻を300秒程度猶予をもたせているにも関わらず、下記のエラーが発生しています。

{"message":"This request has expired - `expires` is in the past. Current time: 1567689266","name":"HTTPError"}}

該当のソースコード

GoogleAppsScript

1function getBalance() { 2 var date = new Date(); 3 var base_url = "https://www.bitmex.com"; 4 var api_key = ""; 5 var api_secret = ""; 6 var api_expires = Math.floor(date.getTime()/ 1000) + 300; 7 var verb = "GET"; 8 var path = "/api/v1/user/margin?currency=XBt" 9 var tex = verb + path + String(api_expires); 10 var api_signature = Utilities.computeHmacSha256Signature(api_secret, tex); 11 var sign = api_signature.reduce(function(str,chr){ 12 chr = (chr < 0 ? chr + 256 : chr).toString(16); 13 return str + (chr.length==1?'0':'') + chr; 14 },''); 15 16 // https://www.bitmex.com/api/v1/user/margin?currency=XBt 17 // margin balance 18 var header = {'api-expires': api_expires, 19 'api-key': api_key, 'api-signature': sign,}; 20 21 var options = { 22 method: verb, 23 headers: header 24 }; 25 Logger.log(api_expires.toString()); 26 var res = UrlFetchApp.fetch(base_url + path, options); 27 var json = JSON.parse(res.getContentText()); 28 Logger.log(json)

試したこと

署名方法の変更やより猶予をもたせてみたりしてみましたが、変わりませんでした

補足情報(FW/ツールのバージョンなど)

GASのタイムゾーン設定は東京です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Logger.log(api_expires.toString());

この結果とレスポンスで返ってる値の比較はしたんだろうか。
もしこれで9時間ズレてるとかいうオチだったら何のためにログ出してるのかわかんないけど。

投稿2019/09/05 16:14

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NullPonTa

2019/09/06 07:14

しています。 下記のエラーで蹴られたときのLogとしては [19-09-06 16:13:01:938 JST] 1567754281 と出力されており、expiresは未来を取っていることになっています {"message":"This request has expired - `expires` is in the past. Current time: 1567753982","name":"HTTPError"}}
gentaro

2019/09/06 09:05

ココのコメントに書いても後から読んだ人に伝わらないので、出せる情報は質問文を編集してちゃんと追記しておいてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問