カオナビAPI Ver.2.0のtokenを取得する PHP+cURLのサンプルプログラム
2025/01/31
カオナビAPIのtoken、シート情報を取得する PHP+cURLのサンプルプログラム
カオナビAPI Ver.2.0の tokenとシートの情報を PHPの cURLを使用して取得するサンプルプログラムを作りました。
カオナビ API Ver.2.0 マニュアル
https://developer.kaonavi.jp/api/v2.0/index.html
カオナビAPI Ver.2.0のマニュアルですが、「Request samples」には、コマンドラインで実行する cURLのサンプルコマンドはありましたが、PHPのプログラムとして cURLを組み込む場合のサンプルプログラムがありませんでしたので作成してみました。
ただ、この記事は下記の条件を満たす方向けになりますので、非常にターゲットは狭いであろうと思っています。
・カオナビ APIを使用する方
・PHPで作成する方
・cURLで作成する方
PHPの cURLを使ってカオナビAPIの tokenを取得するサンプルプログラム
// 「カオナビ」APIで使用する情報を設定
$url = "https://api.kaonavi.jp/api/v2.0/token";
$username = "dummy_consumer_key"; // 各自の情報を設定
$password = "dummy_consumer_secret"; // 各自の情報を設定
$postData = ["grant_type" => "client_credentials"];
// cURLを実行
$getCurlRes = getCurl($url, $username, $password, $postData);
// cURLの実行結果を取得
$token = $getCurlRes["access_token"];
print_r($token);
// cURLを利用して APIにアクセスし結果を取得する関数
function getCurl($url=null,$username=null,$password=null,$postData=null,$headerData=null){
$option = [
CURLOPT_RETURNTRANSFER => true, //文字列として返す
CURLOPT_TIMEOUT => 3000, // タイムアウト時間
];
// 認証するための ID、PASS(KEY、SECRET)がある場合はそれを指定
if($username && $password){
$option[CURLOPT_USERPWD] = $username . ":" . $password;
}
// headerの指定がある場合はそれを指定
if($headerData){
$option[CURLOPT_HTTPHEADER] = $headerData;
}
// POST する値がある場合はそれを指定
if($postData){
$option[CURLOPT_POSTFIELDS] = $postData;
}
// cURLのセッションを初期化しオプションを指定
$ch = curl_init($url);
curl_setopt_array($ch, $option);
// cURLを実行
$json = curl_exec($ch);
// 実行結果の各値を取得
$info = curl_getinfo($ch);
$errorNo = curl_errno($ch);
$errorMsg = curl_error($ch);
// cURLの実行結果を判定
if ($errorNo !== CURLE_OK) {
// 「CURLE_OK(0)」以外のエラーコード
// エラーコードによって処理を分岐する場合はここに分岐処理を作成する
return "error";
}
// ステータスコードを判定
if ($info['http_code'] !== 200) {
// 200以外のステータスコードは正常な値を取得できていないためエラー処理をする
return "error";
}
// 実行結果は JSON形式で取得するため配列に変換して戻す
return json_decode($json, true);
}
実際に分かってしまえばシンプルなソースになりますが、cURLのオプションとして「CURLOPT_USERPWD」や「CURLOPT_POSTFIELDS」を指定する点が分かりにくかったですね。
cURLのオプションの「CURLOPT_USERPWD」「CURLOPT_POSTFIELDS」
その cURLのオプションの「CURLOPT_USERPWD」「CURLOPT_POSTFIELDS」や、それ以外のオプションについて詳細を確認したい場合は、下記の PHPマニュアルの「curl_setopt」を参照してください。
https://www.php.net/manual/ja/function.curl-setopt.php
cURLを実行した際に発生するエラーナンバー
cURLを利用して APIにアクセスする処理は「getCurl」として関数化していますので、カオナビ API以外の APIへアクセスする際も汎用的に使用できるかと思います。
その際「$errorNo = curl_errno($ch);」で取得しているエラーナンバーとしてどのような値があるのかについて詳細を確認したい場合は、下記の PHPマニュアルの「curl_errno」を参照してください。
https://www.php.net/manual/ja/function.curl-errno.php
また、上記のサンプルプログラムは、httpのレスポンスとして受信するヘッダ情報を元にエラー処理を分岐させるような処理は作成していません。
もし、それらを実装したい方は下記の記事が参考になるかと思います。
https://ondotori.webstorage.jp/docs/api/reference/api_sample.html
また、cURLの関数に関しては下記に改めて解説した記事を書きましたので、併せて参考にしてください。
「PHPで APIにアクセスする際などに使用する cURLのサンプルプログラム」
カオナビ APIの「Request samples」として Linux系(Mac)でコマンドで実行する際のサンプルとして下記が提示してあります。
curl -X POST https://api.kaonavi.jp/api/v2.0/token \ -u 'dummy_consumer_key:dummy_consumer_secret' \ -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' \ -d 'grant_type=client_credentials'
cURLのコマンドのオプションとして記述がある「-X」「-u」「-H」「-d」はそれぞれ下記の意味になっています。
「-X」
HTTPメソッドの指定で「POST」「GET」などを指定する
「-u」
「--user」と記述することもできて、ユーザID、PASSを指定する
ID、PASSは「:(コロン)」で区切る
「-H」
HTTPヘッダーを指定する
「-head」「--head」と記述することもできる
「-d」
HTTP Bodyにパラメーターを設定して POSTする場合の値を指定する
これらについては下記のサイトを参考にしています。
https://qiita.com/shtnkgm/items/45b4cd274fa813d29539
ちなみに、Linux(Mac)系では、それぞれの値を囲むのは「’(シングルクォート)」「”(ダブルクォート)」のどちらを使用しても問題ありません。
ですが、Windows系では「’(シングルクォート)」を使用すると正しく処理が実行されずにエラーになりますので注意が必要です。「”(ダブルクォート)」を使用しましょう。
先の項目で取得した Tokenを利用してカオナビAPIのシートのレコードを取得するサンプルプログラム
Tokenを取得したのち、その Tokenを利用して、登録してあるシートのレコードを取得する処理は下記のようになります。
// 「カオナビ」APIで使用する情報を設定 $url = "https://api.kaonavi.jp/api/v2.0/sheets/9999"; // 9999 の部分は取得対象のシートIDを指定 $headerData = [ "Content-Type: application/json", "Kaonavi-Token: " . $getCurlRes["access_token"], // Tokenは 前項で取得した Tokenを指定する ]; // cURLを実行(cURLは Tokenを取得したときに使用した関数を使用) $getCurlRes = getCurl($url, "", "", "", $headerData); // cURLの実行結果を取得 $token = $getCurlRes["access_token"]; print_r($getCurlRes);
ヘッダー情報に前項で取得した Tokenを指定して、cURLでアクセスすることでシート情報を取得することができます。
また、この処理で取得するシートの情報は結構階層が多い多段階の配列になっています。
そのため、「print_r」「var_export」などを使用して配列の構造を表示させながら、必要な項目の値を取得するといいでしょう。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
QRコード作成ライブラリ「cakePHP-QR-Code-Helper」をPHPで使うカスタマイズ
CakePHP2用のQRコード作成ライブラリ「cakePHP-QR-Code-Helper」をプレーンのPHPでも使うためのカスタマイズ方法を解説。1ファイルを設置するだけでQRコードが作れるため使い勝手がいい。
-
-
PHPのソースで見慣れない記号が出てきた・アロー演算子(->)、ダブルアロー演算子(=>)
PHPのプログラムソースには見慣れない記号が出てきます。その意味や調べ方です。
-
-
ECCUBEのポイント設定、ポイント付与率を一括で変更する方法解説
ECCUBEの商品個別に設定してあるポイントを一括で変更する方法を解説。ECCUBEには商品個別のポイントを一括して変更する機能がありません。SQLを作成して一括置換!
-
-
PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較
PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。
-
-
ECCUBE mtb_constants initパラメータ設定の項目を追加する方法
ECCUBEのパラメータ設定で設定できる項目を追加する方法を説明します。
-
-
路線・駅検索をPHPで実装する方法解説。GoogleMapsの緯度経度から計算し検索
路線・駅検索の仕組みの構築は大変。登録する側も最寄り駅が多い場合は大変。なので簡易に実装するため緯度経度に基づき直線距離を計算する処理を考案して実装して、その処理を解説。
-
-
PHPで月末から1ヶ月後「+1 month」を算出すると想定する日付にならない場合がある
PHPでは月末の1ヶ月後が想定した日付にならない場合がある。原因はバグではなくPHPの1ヶ月後の定義によるもの。なので必要とする日付を定義しそれに合わせてDateTime、modifyを使用して算出方法を解説している。
-
-
ECCUBEの管理画面のSSL設定をインストール後に変更する方法
ECCUBEをインストールした後から管理画面のSSL設定を変更する方法を解説します。config.phpファイルのHTTPS_URLとADMIN_FORCE_SSLの値を変更すればOK。
-
-
ECCUBEを開発環境から本番ドメインに変更でエラーが・パス変更について
レンタルサーバでサーバ会社から割り当てられたURLで開発し、本番公開時にドメインを当てたらエラーが!そんな場合の対処方法の解説。対処方法は簡単ですが管理画面からは対応不可。
-
-
PHP画面が真っ白 header(“Location: $url”);
PHPの開発で header(“Location: $url”);を使うと画面が真っ白になる不具合が出る場合もあります。