前回記事はこちら
仮想通貨取引所のbitFlyerのHTTP Private APIにアクセスして、自分の資産残高を取得する。
バージョン情報
JavaScriptのフレームワークであるAngularを使用する
Angular: 5.2.9
crypto-js: 3.1.9-1
今回アクセスするAPIは認証が必要
第1回目、第2回目でアクセスした、認証が不要なPublic APIではなく、認証が必要なPrivate APIにアクセスする
Private APIの認証
https://lightning.bitflyer.jp/docs
Private APIの認証では、下記の情報をHTTPリクエストヘッダーに含める必要がある。
ACCESS-KEY
: 開発者ページで発行した API keyACCESS-TIMESTAMP
: リクエスト時の Unix TimestampACCESS-SIGN
: ACCESS-TIMESTAMP, HTTP メソッド, リクエストのパス, リクエストボディ を文字列として連結したものを、 API secret で HMAC-SHA256 署名を行った結果
下準備
HMAC-SHA256 署名を実施するのに必要なライブラリ、crypto-jsをインストールする。
$ npm i crypto-js
コード
Private API の一つにアクセスして、自分の資産残高を取得してみる
src/app/services/bitflyer.service.ts
// ...省略 import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; import { PrivateAPIKeySet } from '../private/private.component'; import * as crypto from 'crypto-js'; const URLS = { BASE: 'https://api.bitflyer.jp', GET_BALANCE: '/v1/me/getbalance' }; @Injectable() export class BitflyerService { constructor( private http: HttpClient, private action: BitflyerTickerActions ) {} getBalance = (keySet: PrivateAPIKeySet): void => { const timestamp = Date.now().toString(); const method = 'GET'; // ACCESS-TIMESTAMP, HTTP メソッド, リクエストのパス, // リクエストボディ を文字列として連結したもの const text = timestamp + method + URLS.GET_BALANCE; // HMAC-SHA-256で署名を作成する // keySet.secretはAPI secret const hmac = crypto.HmacSHA256(text, keySet.secret); // 署名をHEXでエンコード const sign = crypto.enc.Hex.stringify(hmac); const httpOptions = { headers: new HttpHeaders({ // keySet.keyはAPIキー 'ACCESS-KEY': keySet.key, 'ACCESS-TIMESTAMP': timestamp, 'ACCESS-SIGN': sign }) }; this.http .get(`${URLS.BASE}${URLS.GET_BALANCE}`, httpOptions) .subscribe(console.log); }; }
動作確認
上記のコードを実行すると、下記の結果(自分の資産残高)が帰ってくる。
[{ "currency_code": "JPY", "amount": 531.0, "available": 531.000000000000 }, { "currency_code": "BTC", "amount": 0.0000648, "available": 0.000064800000 }, { "currency_code": "BCH", "amount": 0.0, "available": 0.0 }, { "currency_code": "ETH", "amount": 0.0, "available": 0.0 }, { "currency_code": "ETC", "amount": 0.0, "available": 0.0 }, { "currency_code": "LTC", "amount": 0.0, "available": 0.0 }, { "currency_code": "MONA", "amount": 0.0, "available": 0.0 }, { "currency_code": "LSK", "amount": 0.0, "available": 0.0 }]
参考サイト
HMAC-SHA256 署名 プログラム・ソース・ソフトウェアの配布 PJC
base64ってなんぞ??理解のために実装してみた - Qiita