やりたいこと
GoogleAppsScript(GAS)においてHMAC-SHA256形式でキーを使って署名をしたい
要するに、Node.js v10.15.3における
var sign = crypto.createHmac('sha256', secretKey).update(text).digest('hex');
この行に相当するものをGASでも実装したい
背景
GMOコインのAPIを使って、仮想通貨の自動売買ボットを作成するため。
今回はドルコスト平均法を実装しようとしていて、常設化の必要はなく、定期実行を行えればいいのでGASを使用。
仮想通貨取引所はwebAPIを使用、練習するいい機会な気がする(お金入れなくても使えるし)
問題点
GASでrequire();が使えない? (あまり詳しくはわからないので知っている方いたらぜひ教えてください🤲)
var crypto = require('crypto'); var sign = crypto.createHmac('sha256', secretKey).update(text).digest('hex');
なのでこのコードをGASに最適化したい。
やったこと
共通部分
var secretKey = 'YOUR_SECRET_KEY'; var timestamp = Date.now().toString(); var method = 'METHOD'; var path = '/v1/PATH';
GAS
var text = timestamp + method + path; var signature = Utilities.computeHmacSha256Signature(text, secretKey); var sign = signature.reduce(function(str,chr){ chr = (chr < 0 ? chr + 256 : chr).toString(16); return str + (chr.length==1?'0':'') + chr; },'');
対応するNode.js
var crypto = require('crypto'); var reqBody = {}; var text = timestamp + method + path + JSON.stringify(reqBody); var sign = crypto.createHmac('sha256', secretKey).update(text).digest('hex');
出力値(例)
12345abcde6f7g890h12ij3klm456n7890op12345q6r78s9t01234567u8v9wx2
signの出力値はこんな感じの英小文字と数字64文字で出力されました
補足
サンプルコードのrequest()に対応するGASはUrlFetchApp.fetch(url,options)で書ける

最後に
細かい挙動はGMOコインのAPIをみてください。
GASのリファレンスはこちら
他に参考にしたサイト
APIがある仮想通貨取引所
参考 BitMEXwww.bitmex.comなど
コメントを残す