NCMB php・GETを用いてオブジェクトの取得/シグネチャ(署名)作成とタイムスタンプ

NCMBのGETをPHPで実行するために苦労したことをまとめます。

記事内でできることは、NCMBのクラス内の全要素を抽出することです。

<?php

$method = 'GET';
$fqdn   = 'mbaas.api.nifcloud.com';
$api_version = '2013-09-01';
$path        = 'classes/あなたのクラスを';

// 日付はこんな感じで
date_default_timezone_set('UTC');
$t = new DateTime();
$timestamp =  $t->format(DateTime::ISO8601);
// 日付はこんな感じで

$application_key = 'アプリケーションキーを';
$client_key      = 'クライアントキーを';


$header_string  = "SignatureMethod=HmacSHA256&";
$header_string .= "SignatureVersion=2&";
$header_string .= "X-NCMB-Application-Key=".$application_key . "&";
$header_string .= "X-NCMB-Timestamp=".$timestamp;

$signature_string  = $method . "\n";
$signature_string .= $fqdn . "\n";
$signature_string .= "/" . $api_version . "/" . $path ."\n";
$signature_string .= $header_string;

//ここでシグネチャが完成
$signature =  base64_encode(hash_hmac("sha256", $signature_string, $client_key, true)); 

//title格納用のリスト
$titleList = array();

$ch1=curl_init(); //curl初期
$url = "クエリを行うクラスのURLを";

$opt=array(
    CURLOPT_URL=>"$url", //URLとクエリストリング
    CURLOPT_HTTPHEADER=>array( //HTTPヘッダ
        "X-NCMB-Application-Key:$application_key",
        "X-NCMB-Timestamp:$timestamp",
        "X-NCMB-Signature:$signature",
        "Content-Type: application/json",
    ),
    CURLOPT_RETURNTRANSFER=>true
);

curl_setopt_array($ch1,$opt); //オプションを設定
$result=curl_exec($ch1); //リクエスト送信
if (curl_errno($ch1)) {
    //エラー時の処理
} else {
    //成功時の処理
    $array = json_decode( $result , true );
    for($i=0; $i < count($array['results']) ; $i++){
        $titleI = $array['results'][$i]['title'];
        array_push($titleList, $titleI );
    }
}

curl_close($ch1);
?>

今回自分はクラス内のtitleというフィールドを配列に保存するといったものにしました。

署名作成までは下のコードで。

$method = 'GET';
$fqdn   = 'mbaas.api.nifcloud.com';
$api_version = '2013-09-01';
$path        = 'classes/あなたのクラスを';

// 日付はこんな感じで
date_default_timezone_set('UTC');
$t = new DateTime();
$timestamp =  $t->format(DateTime::ISO8601);
// 日付はこんな感じで

$application_key = 'アプリケーションキーを';
$client_key      = 'クライアントキーを';


$header_string  = "SignatureMethod=HmacSHA256&";
$header_string .= "SignatureVersion=2&";
$header_string .= "X-NCMB-Application-Key=".$application_key . "&";
$header_string .= "X-NCMB-Timestamp=".$timestamp;

$signature_string  = $method . "\n";
$signature_string .= $fqdn . "\n";
$signature_string .= "/" . $api_version . "/" . $path ."\n";
$signature_string .= $header_string;

//ここでシグネチャが完成
$signature =  base64_encode(hash_hmac("sha256", $signature_string, $client_key, true)); 

クラス内の全要素を引っ張っているのでクエリストリングがないです。下の参考サイトではそれがあるバージョンもあるので、欲しい方はリンクから飛んでください。

タイムスタンプを作成する際の注意点として、

・タイムゾーンをUTCとして

・ISO8601の形式でかく

// 日付はこんな感じで
date_default_timezone_set('UTC');
$t = new DateTime();
$timestamp =  $t->format(DateTime::ISO8601);
// 日付はこんな感じで

今回はクラス内のすべての要素を持ってきていて、細かく指定してクエリを行っていないので、いろいろと設定が楽でした。

・Register https://moneytyping.com/archives/815

・Get 今回の記事

が終わったので、次回以降いつかアップデートを書こうと思います。

https://qiita.com/nifcloud_mb/items/dee4558558e86175ccea

https://www.php.net/manual/ja/function.date.php

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です