【Zaif(ザイフ) API】PHPで署名をHTTPリクエストする

まだまだ続く入門編。
APIの動きを理解したので、今度は、HTTPリクエストを実現するためのプログラミングについてです。

PHPを使った方法を説明します(私がPHPしかわからないからですが…)。
メインは、暗号化したデータをどうやって、HTTPリクエストするかという部分です。

PHPには、HTTPリクエストをするための「cURL(カール)」という関数が用意されています。

cURLは下記の順番で実行します。

//cURL セッションを初期化する
resource curl_init ([ string $url = NULL ] );

//cURL 転送用オプションを設定する
bool curl_setopt ( resource $ch , int $option , mixed $value );

//cURL セッションを実行する
mixed curl_exec ( resource $ch );

//cURL セッションを閉じる
void curl_close ( resource $ch );

curl_setoptには、たくさんのオプションがあり、これで何を設定したらよいのか迷ってしまいます。
今回は、アカウント情報取得のZaif(ザイフ)取引APIを使って説明します。
設定できるオプションは、こちらにあるので確認できます。

//API_KEY と API_SECRET_KEY
$API_KEY = 'zzzzzz-zzzzzz-zzzzzz-zzzzzz-zzzzzz';
$API_SECRET_KEY = 'aaaaaaa-aaaaaaa-aaaaaaa-aaaaaaa-aaaaaaa';

//zaif 取引API url
$zaif_api_url  = "https://api.zaif.jp/tapi";
// アカウント情報取得 method名
$method = "get_info";

//ナンス
$nonce = microtime(true);

//リクエストボディ
$body = http_build_query(
    array(
        "nonce"=>$nonce,
        "method"=>$method
    )
);

//HMAC署名
$signature = hash_hmac("sha512", $body, $API_SECRET_KEY);
$headers = array(
    "Sign: {$signature}",
    "Key: {$API_KEY}"
);

//cURL セッションを初期化
$curl = curl_init();

if ($curl == FALSE) {
    printf('<div>[ERR] curl_init(): ' . curl_error($curl) . '</div><div><a href="order.php">戻る</a></div>');
    die(1);
}

//curl set options設定
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_URL, $zaif_api_url);
curl_setopt($curl, CURLOPT_POST, TRUE);
//ヘッダーに署名とボディに平文を設定
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);

//cURL セッションを実行する
$response = curl_exec($curl);

//レスポンスをjson decode
$json_decode = json_decode($response, true);
if ($json_decode == NULL) {
    printf('<div>[ERR] json_decode: ' . curl_error($curl) . '</div><div><a href="order.php">戻る</a></div>');
    die(1);
}

cURL セッションを閉じる
curl_close($curl);

var_dump($json_decode);

リクエスト送信の流れは、下記のような感じになります。

  • $API_KEYと$API_SECRET_KEYは、Zaifの自分のアカウントから取得します。
  • エンドポイントやリクエストに必要な情報等は、Zaif api document v1.1.1 ドキュメント 現物取引APIから確認します。
  • 情報取得のmethodは、get_infoです。
  • リクエストボディを作成して、HMAC署名を行います。
  • cURL セッションを初期化
  • POSTでリクエストするので、CURLOPT_POSTを設定。
    CURLOPT_HTTPHEADERに署名を設定。
    CURLOPT_POSTFIELDSに署名前のリクエストデータを設定。
  • cURL セッションを実行
  • サーバーから帰ってきたレスポンスをjsonデコード。
  • cURL セッションを閉じる。
  • var_dumpで情報確認。

今回は、情報取得のmethodですが、methodが注文にかわれば、リクエストボディも注文用に変更になります。設定する内容は、APIドキュメントを見て確認する必要があります。
取引ロジックを考えれば自動売買もできるようになります。が、Zaifのサーバーが貧弱なのが問題です。

【Zaif(ザイフ) API】初心者のためのHMACを使った送受信入門

よかったらシェアしてね!
  • URLをコピーしました!
目次