このエントリーをはてなブックマークに追加


coincheckの新規注文API(orders)の現物注文サンプルコード(PHP)

PHPを使って Coincheck のBTC現物注文・新規注文APIのサンプルコードを以下に記します。


当サイトに記載されている会社名、製品名などは一般に各社または団体の商標または登録商標です。
当サイトの資料により直接的および間接的障害が生じても一切責任を負いません。
あらかじめご了承ください。



スポンサーリンク

関連記事

新規注文APIの仕様

残高APIはPrivate APIのため、 Coincheck の口座開設が必要となります。
本PHPサンプルコードでは、BTCの現物売買のサンプルコードを公開しています。
order_typeを変更すればレバレッジ取引にでも使用できます。

新規注文APIの仕様(Coincheck APIページから抜粋)

新規注文
取引所に新規注文を発行します。

たとえば、10 BTC を 30000 JPY/BTC で買いたい場合は、以下のように指定します。
rate: 30000, amount: 10, order_type: "buy", pair: "btc_jpy"

買い注文の場合、指定した価格よりも低い価格での売り注文が既に存在していれば、その売り注文を安い順に決済します。売り注文が足りなかった場合は未決済の注文として残ります。売り注文の場合も同様です。

注文方法について

order_type は全部で8つあります。

"buy" 指値注文 現物取引 買い
"sell" 指値注文 現物取引 売り
"market_buy" 成行注文 現物取引 買い
"market_sell" 成行注文 現物取引 売り
"leverage_buy" 指値注文 レバレッジ取引新規 買い
"leverage_sell" 指値注文 レバレッジ取引新規 売り
"close_long" 指値注文 レバレッジ取引決済 売り
"close_short" 指値注文 レバレッジ取引決済 買い
<省略>

POST /api/exchange/orders

PARAMETERS

*pair 取引ペア。現在は "btc_jpy" のみです。
*order_type 注文方法
rate 注文のレート。(例)28000
amount 注文での量。(例)0.1
market_buy_amount 成行買で利用する日本円の金額。(例)10000
position_id 決済するポジションのID
stop_loss_rate 逆指値レート ( 逆指値とは? )
<省略>

新規注文APIサンプルソースを使用する前の準備

本サンプルソースには、$ACCESS_KEY, $SECRET_ACCESS_KEY にAPIキーを設定していません。
APIキーを準備してください。

// Please set ACCESS_KEY and SECRET_ACCESS_KEY
$ACCESS_KEY = "";
$SECRET_ACCESS_KEY = "";

APIキーの作成に関しては以下の記事を参考にしてください。

本サンプルソースを実行するには、APIキーのパーミッションとして「新規注文」にチェックが必要です。

01.png
 

APIキーを作成すると、以下のスクリーンショットのように「アクセスキー」「アクセスシークレットキー」が作成されるので、
サンプルソースの $ACCESS_KEY, $SECRET_ACCESS_KEY に設定してください。

02.png
 

新規注文API・BTC現物売買 PHPサンプルソース

以下に Coincheck の残高APIを呼び出すサンプルソースを記します
上記に記述しましたが、「アクセスキー」「アクセスシークレットキー」を準備してください。

このサンプルコードでは、注文入力を行い(order_ui.php)、新規注文を行う(new_order.php)の2つのサンプルコードファイルから構成されています。
また、新規注文を行う(new_order.php)サンプルコードでは、POSTするデータ形式をクエリー文字列または、JSONを選択できるようになっています。
POSTする注文内容は、クエリー文字列でもJSONでも問題なく動作しました。
JSONの場合は、ヘッダーに Content-Type: application/json が必要になります。

注文入力

order_ui.phpはBTCの数量、価格等を入力するファインクション群のサンプルコードです。

<?php
//----------------------------------------
// order ui functions
//----------------------------------------
function order_ui() {
    $rate   = input_rate();
    $amount = input_amount();
    $order_type = input_buy_sell();
    printf( "Rate[BTC/JPY] : %d" . PHP_EOL .
            "Amount[BTC]   : %f" . PHP_EOL .
            "Price[JPY]    : %f" . PHP_EOL .
            "Order type    : %s" . PHP_EOL
            , $rate, $amount, $rate*$amount, $order_type);
    if(!yes_no_quit()) {
        die(0);
    }
    $order = array('rate'=>$rate,
                    'amount'=>$amount,
                    'order_type'=>$order_type);
    return $order;
}
//----------------------------------------
function input_amount() {
    while(TRUE) {
        print("Amount[BTC](quit if empty): ");
        $n = trim(fgets(STDIN));
        if(empty($n)) {
            print("Quit." . PHP_EOL);
            die(0);
        } elseif(!is_numeric($n)) {
            printf("[ERROR] " . $n . " is not numeric." . PHP_EOL);
        } else {
            break;
        }
    }
    return $n;
}
//----------------------------------------
function input_rate() {
    while(TRUE) {
        print("Rate[BTC/JPY](quit if empty): ");
        $rate = trim(fgets(STDIN));
        if(empty($rate)) {
            print("Quit." . PHP_EOL);
            die(0);
        } elseif(!ctype_digit($rate)) {
            printf("[ERROR] " . $rate . " is not integer." . PHP_EOL);
        } else {
            break;
        }
    }
    return $rate;
}
//----------------------------------------
function input_buy_sell() {
    while(TRUE) {
        print("Order type [buy/sell](quit if empty): ");
        $type = trim(fgets(STDIN));
        if(empty($type)) {
            print("Quit." . PHP_EOL);
            die(0);
        } elseif(!strcasecmp($type, "buy")) {
            break;
        } elseif(!strcasecmp($type, "sell")) {
            break;
        } else {
            print("Please check the input." . PHP_EOL);
        }
    }
    return strtolower($type);
}
//----------------------------------------
function yes_no_quit() {
    while (TRUE) {
        print("OK? [yes/no/quit] :");
        $ok = trim(fgets(STDIN));
        if(!strcasecmp($ok, "yes")) {
            $ok = TRUE;
            break;
        } elseif(!strcasecmp($ok, "no")) {
            print("Order canceled." . PHP_EOL);
            $ok = FALSE;
            break;
        } elseif(!strcasecmp($ok, "quit")) {
            print("Quit." . PHP_EOL);
            $ok = FALSE;
            break;
        } else {
            print("Please check the input." . PHP_EOL);
        }
    }
    return $ok;
}

BTC現物注文・サンプルコード

以下のサンプルコードでは、上記のorder_ui.phpを呼び出し、注文内容を入力後、
BTCの売買発注を行うサンプルコードになります。

<?php
// API doc : https://coincheck.com/ja/documents/exchange/api#order-new
// API url : https://coincheck.com/api/exchange/orders

// order ui
require("./order_ui.php");

// Please set ACCESS_KEY and SECRET_ACCESS_KEY
$ACCESS_KEY = "";
$SECRET_ACCESS_KEY = "";

// BTC/JPY only
$currency_pair = "btc_jpy";

// proxy settings
$proxy      = ""; 
$proxy_port = ""; 

// coincheck order api url
$url =  "https://coincheck.com/api/exchange/orders";
// Post data type
$json = FALSE;  // $json ? POST data is JSON : POST data is Query string

// input order
$order = order_ui();

// post data
$postdata_array = array(
	"rate" => $order["rate"],
	"amount" => $order["amount"],
	"order_type" => $order["order_type"],
	"pair" => $currency_pair);
if($json) {
    $postdata = json_encode($postdata_array);   // POST data is JSON
} else {
    $postdata = http_build_query($postdata_array);  // POST data is Query string
}

// create signature
$nonce = time();
$message = $nonce . $url . $postdata;
$signature = hash_hmac("sha256", $message, $SECRET_ACCESS_KEY);

// header
$headers = array(
    "ACCESS-KEY: {$ACCESS_KEY}",
    "ACCESS-SIGNATURE: {$signature}",
    "ACCESS-NONCE: {$nonce}",
    );
if ($json) { // $json ? POST data is JSON : POST data is Query string
    array_push($headers, "Content-Type: application/json");
}

$curl = curl_init();
if ($curl == FALSE) {
    fputs(STDERR, "[ERR] curl_init(): " . curl_error($curl) . PHP_EOL);
    die(1);
}
// 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, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);


$response = curl_exec($curl);
if ($response == FALSE) {
    fputs(STDERR, "[ERR] curl_exec(): " . curl_error($curl) . PHP_EOL);
    die(1);
}
curl_close($curl);

// 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);
}

// output json_decode
print_r($json_decode);

exit(0);

 実行例

以下に、上記サンプルコードを実行した結果を記します。

BTCの注文内容を入力している時の出力です。

$ php new_order.php 
Rate[BTC/JPY](quit if empty): 300000
Amount[BTC](quit if empty): 0.005
Order type [buy/sell](quit if empty): buy
Rate[BTC/JPY] : 300000
Amount[BTC]   : 0.005000
Price[JPY]    : 1500.000000
Order type    : buy
OK? [yes/no/quit] :yes

以下、yesを入力しEnterキーを押すことにより注文が発注されました。

Array
(
    [success] => 1
    [id] => 999999999
    [amount] => 0.005
    [rate] => 300000.0
    [order_type] => buy
    [pair] => btc_jpy
    [created_at] => 2017-??-??T00:00:00.000Z
    [market_buy_amount] => 
    [stop_loss_rate] => 
)

以下、 Coincheck のWeb画面です。
発注されているのが確認できます。
キャンセルする場合は、Webページでキャンセルしてくださいね。

03.png

新規注文APIのエラーについて

以下によく発生すると思われるエラーについて記します。

invalid authentication エラーになった場合

以下のようにERRORが出た場合は、APIキーの設定に誤りがないか確認してください。

$ php balance.php
[ERROR] : invalid authentication

This api is not permitted... エラーになった場合

APIキーの設定を確認してください。
新規注文にチェックが入っていないためパーミッションエラーとなっています。

$ php balance.php
[ERROR] : This api is not permitted, Please set permission. https://coincheck.com/api_settings

注文エラー

その他にも以下のように残高不足などのエラーも出力されます。

  • 最低量を下回っている場合のエラー出力
    $ php new_order.php 
    Rate[BTC/JPY](quit if empty): 900000
    Amount[BTC](quit if empty): 0.001
    Order type [buy/sell](quit if empty): buy
    Rate[BTC/JPY] : 900000
    Amount[BTC]   : 0.001000
    Price[JPY]    : 900.000000
    Order type    : buy
    OK? [yes/no/quit] :yes
    Array
    (
        [success] => 
        [error] => Amount 量が最低量(0.005 BTC)を下回っています
    )
  • 所持金が足りない場合のエラー出力
    $ php new_order.php 
    Rate[BTC/JPY](quit if empty): 1000000
    Amount[BTC](quit if empty): 1
    Order type [buy/sell](quit if empty): sell
    Rate[BTC/JPY] : 1000000
    Amount[BTC]   : 1.000000
    Price[JPY]    : 1000000.000000
    Order type    : sell
    OK? [yes/no/quit] :yes
    Array
    (
        [success] => 
        [error] => Amount BTC の所持金額が足りません
    )

以上、 Coincheck の新規注文APIを使ってBTC新規注文をするサンプルコードおよび実行結果でした。


スポンサーリンク

添付ファイル: filenew_order.php.zip 265件 [詳細] fileorder_ui.php.zip 258件 [詳細] file03.png 291件 [詳細] file02.png 314件 [詳細] file01.png 299件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-12-24 (日) 02:40:39