カスタムプログラムでのPHP利用

カスタムプログラムとは、PHPスクリプトをスパイラル環境上に用意されたPHPサーバで実行させることが出来る機能です。管理画面上では「開発」→「カスタムプログラム」メニューよりアクセスできます。カスタムプログラムは以下の様な特徴を持っています。

  • HTML無しの単独プログラムとして実行可能
  • 管理画面から直接実行できる(引数指定も可能)
  • 定期実行
  • オープンAPIとして利用可能

PHPスクリプトの即時実行

カスタムプログラムでは、PHPスクリプトを登録して実行できます。PHP実行環境がなくても、スパイラル内でPHPスクリプトの実行が完結します。「基本設定」画面にPHPスクリプトを登録して即時実行が可能です。

即時実行

PHPスクリプトの定期実行

「定期実行」画面から「月」「日 / 曜日」「時」「分」を組み合わせてタイミングを指定して実行させることが可能です。

定期実行

実行結果は以下のように「実行ログ」画面から確認することが出来ます。

実行ログ

定期実行の通知メール

通知メールでも実行結果を確認することが可能です。設定によりPHPの定期実行時に通知メールを送信します。

設定方法としては、「定期実行」画面において定期実行の通知にチェックを入れます。

定期実行の通知

また、「管理グループ」→「通知メール受信設定」→「PHPエラー通知メール」画面において、定期実行の通知を「受け取る」に設定します。

定期実行のエラー通知

エラーが発生した場合には、こちらの設定のみでエラー通知が配信されます。

オープンAPIとして利用する

登録されたカスタムプログラムはオープンAPIという形で外部から実行することも可能です。

オープンAPIとは、APIシークレットを利用することなくトークンのみでアクセス可能なユーザ独自のプログラムをAPIとして提供する機能です。APIトークンのみで実行可能だという性質上、秘匿性の高い情報のやりとりには適していません。スパイラルがシステムで提供しているAPIとの違いなどはスパイラルAPIを参照下さい。

オープンAPI

オープンAPIとして利用するには、カスタムプログラムの「基本設定」画面においてオープンAPIを「許可する」にチェックを入れて保存します。

オープンAPI

許可されたカスタムプログラムは、以下の様にAPIトークンやカスタムプログラムタイトル(と必要であれば引数やコールバック関数名)をパラメータに指定してGETメソッドで呼び出すことが出来ます。

https://xxx.smp.ne.jp/api/service/custom_program/run/request?spiral_api_token=APIトークン&title=カスタムプログラムタイトル&callback=コールバック関数名

なお、ここで利用するAPIトークンに関しては、セキュリティの観点からオープンAPI呼び出し専用に作成したAPIトークンを利用することをおすすめします。

以下にオープンAPIを使った場合の簡単なサンプルを示します。ここではJavaScriptを使ってオープンAPIの実行結果を処理してHTMLに反映しています。

カスタムプログラム: openapisample

<?php
 $SPIRAL->setApiTokenTitle("sample");
 $args = $SPIRAL->getArgs();
 $db = $SPIRAL->getDataBase("member");
 $db->addEqualCondition("id", $args[0]);
 $db->addSelectFields("email");
 $result = $db->doSelect();
 
 echo $result["data"][0]["email"];
?>

オープンAPIを呼び出すクライアントプログラム

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>Open API Sample</title>
</head>
<body>
<h3>オープンAPI呼び出し結果</h3>
<div id="apiresult">オープンAPIを呼び出します</div>
<script type="text/javascript">
  // カスタムプログラム実行完了後に呼ばれる関数
  function onComplete(_result) {
    if (!_result || (_result.code != 0)){
      alert('実行に失敗しました。');
    } else {
      document.getElementById("apiresult").innerHTML = _result.output;
    }
  }
</script>

<!-- titleのカスタムプログラムを実行します -->
<script type="text/javascript" src="https://xxx.smp.ne.jp/api/service/custom_program/run/request?spiral_api_token=00000000KrJb7fe999032bcf729fc85099afcc4a433exxxxxxxx&title=openapisample&arg=1&callback=onComplete"></script>
</body>
</html>