Zaifのtrade APIを使って新規注文・現物売買のPHPサンプルコードおよび実行結果 †trade APIを使用することにより、Zaif
で新規注文をすることができます。 当サイトに記載されている会社名、製品名などは一般に各社または団体の商標または登録商標です。 関連記事 †
trade APIを使用 †本APIを使用するには、Zaif の口座開設が必要となります。
現物取引注文(新規注文)のサンプルコード †<?php // API doc : http://techbureau-api-document.readthedocs.io/ja/latest/trade/2_individual/7_trade.html // zaif trade api url $zaif_api_url = "https://api.zaif.jp/tapi"; // api method name $method = "trade"; // Please set API_KEY and API_SECRET_KEY $API_KEY = ""; $API_SECRET_KEY = ""; // proxy settings $proxy = ""; $proxy_port = ""; // currency pairs $currency_pairs = array( "bch_btc" ,"bch_jpy" ,"bitcrystals_btc" ,"bitcrystals_jpy" ,"btc_jpy" ,"cicc_btc" ,"cicc_jpy" ,"eth_btc" ,"eth_jpy" ,"fscc_btc" ,"fscc_jpy" ,"jpyz_jpy" ,"mona_btc" ,"mona_jpy" ,"ncxc_btc" ,"ncxc_jpy" ,"pepecash_btc" ,"pepecash_jpy" ,"sjcx_btc" ,"sjcx_jpy" ,"xcp_btc" ,"xcp_jpy" ,"xem_btc" ,"xem_jpy" ,"zaif_btc" ,"zaif_jpy" ,"erc20.cms_jpy", "mosaic.cms_jpy" ); // check arguments if (!check_arguments($argc, $argv, $currency_pairs)) { usage(); die(1); } if($argv[1] == "list") { // show currency_pairs foreach($currency_pairs as $cur) { printf("%s" . PHP_EOL, $cur); } exit(0); } // check amount and price if (!is_numeric($argv[3])) { fputs(STDERR, "amount: " . $argv[3] . " is not numeric." . PHP_EOL); exit(1); } if (!is_numeric($argv[4])) { fputs(STDERR, "price: " . $argv[4] . " is not numeric." . PHP_EOL); exit(1); } // show order request printf("action : %s" . PHP_EOL, $argv[1]); printf("currency pair : %s" . PHP_EOL, $argv[2]); printf("amount * price : %f * %f = %f" . PHP_EOL, $argv[3], $argv[4], $argv[3] * $argv[4]); print("----------------------------------------" . PHP_EOL); // yes or no if (!yes_no()) { exit(0); } $nonce = time(); $body = http_build_query( array( "nonce"=>$nonce, "method"=>$method, "action"=>$argv[1], "currency_pair"=>$argv[2], "amount"=>$argv[3], "price"=>$argv[4] ) ); $signature = hash_hmac("sha512", $body, $API_SECRET_KEY); $headers = array( "Sign: {$signature}", "Key: {$API_KEY}" ); $curl = curl_init(); if ($curl == FALSE) { fputs(STDERR, "[ERR] curl_init(): " . curl_error($curl) . PHP_EOL); die(1); } // curl set options curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // set proxy server settings if (!empty($proxy) && !empty($proxy_port)) { curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, 1); curl_setopt($curl, CURLOPT_PROXY, $proxy . ":" . $proxy_port); curl_setopt($curl, CURLOPT_PROXYPORT, $proxy_port); } curl_setopt($curl, CURLOPT_URL, $zaif_api_url); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $body); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($curl); if ($response == FALSE) { fputs(STDERR, "[ERR] curl_exec(): " . curl_error($curl) . PHP_EOL); die(1); } // json decode $json_decode = json_decode($response, true); if ($json_decode == NULL) { fputs(STDERR, "[ERR] json_decode(): " . json_last_error_msg() . PHP_EOL); die(1); } curl_close($curl); print_r($json_decode); exit(0); //------------------------------ // function //------------------------------ function check_arguments($argc, $argv, $currency_pair) { if (($argc != 2) and ($argc != 5)) { return FALSE; } $opts = $currency_pair; array_push($opts, "list", "bid", "ask"); if (!in_array($argv[1], $opts)) { return FALSE; } return TRUE; } function usage() { fputs(STDERR, "Usage: php order.php ACTION CURRENCY_PAIR AMOUNT PRICE" . PHP_EOL . "ACTION:" . PHP_EOL . " - list : show all currency pair code" . PHP_EOL . " currency pair code : show specified currency pair trades" . PHP_EOL . " - bid : buy action" . PHP_EOL . " - ask : sell action" . PHP_EOL . "CURRENCY_PAIR : Trade currency pair code" . PHP_EOL . " show currency pair : php order.php list" . PHP_EOL . "AMOUNT : order quantity" . PHP_EOL . "PRICE : order price" . PHP_EOL . PHP_EOL . "e.g. : php order.php list" . PHP_EOL . " show all currency pair code" . PHP_EOL . "e.g. : php order.php bid eth_jpy 0.1 50000" . PHP_EOL . " buy order, 0.1 amount and price 5000JPY" . PHP_EOL . PHP_EOL); } function yes_no() { while (TRUE) { print("OK? [yes/no] :"); $ok = trim(fgets(STDIN)); if(!strcasecmp($ok, "yes")) { $ok = TRUE; break; } elseif(!strcasecmp($ok, "no")) { print("Order canceled." . PHP_EOL); $ok = FALSE; break; } else { print("Please check the input." . PHP_EOL); } } return $ok; } APIキー, APIシークレットキー †上記サンプルコード内にある、以下の部分ですが、APIキーの設定が必要となります。 $API_KEY = "APIキーを設定してください"; $API_SECRET_KEY = "APIシークレットキーを設定してください。"; 以下の記事を参考にAPIキーを取得してください。 APIキーを生成すると以下のスクリーンショットのように2つのAPIキーが表示されます。 本サンプルコードの使い方 †オプションを渡さず本サンプルコードを実行すると使用方法が表示されます。 $ php zaif_order.php Usage: php zaif_order.php ACTION CURRENCY_PAIR AMOUNT PRICE ACTION: - list : show all currency pair code currency pair code : show specified currency pair trades - bid : buy action - ask : sell action CURRENCY_PAIR : Trade currency pair code show currency pair : php zaif_order.php list AMOUNT : order quantity PRICE : order price e.g. : php zaif_order.php list show all currency pair code e.g. : php zaif_order.php bid eth_jpy 0.1 50000 buy order, 0.1 amount and price 5000JPY
実行結果 †以下に本サンプルコードを実行し、ETH/JPYの売り注文、買い注文をした時の出力です。 bid 買い注文 †$ php order.php bid eth_jpy 0.004 50000 action : bid currency pair : eth_jpy amount * price : 0.004000 * 50000.000000 = 200.000000 ---------------------------------------- OK? [yes/no] :yes Array ( [success] => 1 [return] => Array ( [received] => 0 [remains] => 0.004 [order_id] => 1111111 [funds] => Array ( [jpy] => 0.00018044 <省略> ) ) ) ZaifのWebページを確認すると買い注文がされているのが確認できます。 ask 売り注文 †$ php order.php ask eth_jpy 0.004 55000 action : ask currency pair : eth_jpy amount * price : 0.004000 * 55000.000000 = 220.000000 ---------------------------------------- OK? [yes/no] :yes Array ( [success] => 1 [return] => Array ( [received] => 0 [remains] => 0.004 [order_id] => 2222222 [funds] => Array ( [jpy] => 200.00018044 <省略> ) ) ) ZaifのWebページを確認すると売り注文がされているのが確認できます。 注意点 †本サンプルコードを公開した時点では、以下のエラーが多発しました。 Array ( [success] => 0 [error] => trade temporarily unavailable. ) 以上、trade APIを使用し現物・新規注文をするサンプルコードおよび実行例でした。 |