決済プラグイン

出典: Live Commerceドキュメント

このページでは決済プラグインの開発方法について解説します。


目次

プラグインファイルのアップロードディレクトリ

[公開ディレクトリ]/resources/plugin/PP/


最小ファイル構成


[] >> フォルダを意味する

[plugin_folder]
├[catalog]  -------------- > カタログ側フォルダ
    ├[main]
        ├[lang]
            ├[ja] ------------ > カタログ側の支払手続きで使われるファイルの分離された言語データ
                ├ confirmation.txt ------------ > 注文内容最終確認画面で表示される文言を指定する
                ├ desc.txt         ------------ > 決済方法画面の選択肢の下に表示される説明文の文言を指定する
                ├ email.txt        ------------ > 注文メールに転記する文言を指定する
                ├ name.txt         ------------ > 決済方法の名称を指定する
        ├ xxxx.php ----------- > カタログ側の支払手続きで表示される決済プラグイン本体ファイル
├[js] ------------------- > javascriptを保存するディレクト(デフォルトは空)
├[lib] ------------------- > ライブラリーファイル(デフォルトは空)
├[main]------------------- > 管理側フォルダ
    ├ xxxx.php ----------- > 管理画面の設定を行う決済プラグイン本体ファイル
├info.php ---------------- > プラグインに関する情報を記述する
├icon.gif ---------------- > プラグインアイコン(横23px - 縦16px)

コーディグルール

Zendコーディグ規約に準拠させること。

ファイルの文字コード:UTF-8
ファイルの改行コード: LF


ただし、以下のファイルはshift_jisとする。

  • confirmation.txt
  • desc.txt
  • email.txt
  • name.txt

プラグインの作成手順

大まかな手順は次の通りです。


  1. info.php にプラグイン情報を記述する。
  2. info.phpに記述した内容に沿って開発する。
  3. 開発したプラグインをアップロードし、プラグインを有効化する。


ここでは、例として sample という名前配送プラグインを開発する手順を説明します。 プラグイン名は半角英数で必ず作成しなければなりません。


1.info.php にプラグイン情報を記述する

sampleフォルダを作成し、info.php ファイルを新規作成し次のソースの記述を行います。

name==><img src="/resources/plugin/PP/sample/icon.gif" /> <a href="http://www.live-commerce.com">デモ用決済プラグイン</a>
entry_file==>sample/main/sample.php
description==>これはデモ用の決済プラグインです。この部分にこのプラグインの説明文を簡潔に記します。
version==>1.0
author==>ここにあなたの名前(ニックネーム)を記します。
faq==> FAQのURLが公開されている場合は記入します。初期状態は空白 ※
install==> インストール方法のURLが公開されている場合は記入します。初期状態は空白 ※
doc==> ドキュメントのURLが公開されている場合は記入します。初期状態は空白 ※
screen==> スクリーンショットのURLが公開されている場合は記入します。初期状態は空白 ※
community==> ユーザー間のコミニティーのURLが公開されている場合は記入します。初期状態は空白 ※
svn==> Subversionリポジトリを公開している場合はSubversionのURLを記入します。初期状態は空白 ※
bug==> バグ報告先のURLを公開している場合は記入します ※
download==> バージョンを管理しているURLを記入します。初期状態は空白 ※

それぞれのパラメータの意味

name
管理画面のプラグイン管理リストで表示される名前と、アイコンです。プラグイン名の部分をリンクさせることができます。
entry_file
entry_fileのパラメータには必ず プラグイン名/main/プラグイン名.php このような書式になっている必要があります。この書式で指定したパスのPHPファイルに送料を算出するプログラムを記述します。
description
管理画面のプラグイン管理リストで表示される説明文です。何のプラグインなのか分かる説明文を記述します。
version
バージョン管理している場合はバージョンを記述します。空でも可。
author
作者名を記述します。


次に、フォルダを作成して開発前の準備を整えます。以下のような構成になっている必要があります。

[sample]
├[catalog]
    ├[main]
        ├[lang]
            ├[ja]
                ├ confirmation.txt(デフォルトは空)
                ├ desc.txt(デフォルトは空)
                ├ email.txt(デフォルトは空)
                ├ name.txt(デフォルトは空)
        ├ sample.php
├[js] ------------------- > javascriptを保存するディレクト(デフォルトは空)
├[lib] ------------------- > ライブラリーファイル(デフォルトは空)
├[main]
    ├ sample.php
├info.php
├icon.gif


2.開発する

決済プラグインの開発部分は主にカタログ側(決済方法選択部分)と管理側(決済の設定を行う)の2つが必要になります。最初に管理側から開発を行います。

カタログ側(決済方法選択部分)の開発

管理側の開発を行うには mainフォルダ内にプラグイン名.phpを作成し、次のコードを記述します。


[銀行振り込みの決済プラグイン例]

/**
 * Live Commerce, Open Source E-Commerce Solutions
 * http://www.live-commerce.com
 * Copyright (c) 2009 DigitalStudio Inc, http://www.ds-style.com
 *
 * 決済プラグイン 銀行振り込み
 *
 * カスタマイズについての詳細は以下を参照のこと。
 * http://www.live-commerce.com/wiki/index.php/決済プラグイン
 *
 * LICENSE: ライセンス情報
 *
 * @package  Live Commerce
 * @copyright  Copyright (c) 2009, DigitalStudio
 * @license    http://www.live-commerce.com/about/gpl/   GPL License
 * @version    $Id:$
 * @link       http://www.live-commerce.com
 * @since      File available since Release 1.0
 * @deprecated Class deprecated in Release 1.0
 */
 
/**
 * invokeStart
 *
 *  プラグインが有効化されたときに実行したスクリプトを記述します。
 *  プラグインを管理すためのデータベースが必要な場合は、クエリーを記
 *  述してテーブル作成を行います。
 *  実行するスクリプトがある場合は return true の前に記述します。
 *
 * @param    none
 * @return   bool
 */
function invokeStart()
{
    $ret = BanktransferTable::create();
    return $ret;
}
 
/**
 * invokeStarterLibrary
 *
 *  invokeStartで実行するときに利用するファイルをインクルードします。
 *  ファイルはlibフォルダに設置したファイル名を配列で登録します。
 *
 * @param    none
 * @return   array
 */
function invokeStarterLibrary()
{
    $lib = array('BanktransferTable.php');
    return $lib;
}
 
/**
 * invokeRegisterPluginName
 *
 *  管理画面のメニュータブにマウスオーバーした時にプルダウンメニューに
 *  表示される名称
 *
 * @param    none
 * @return   string
 */
function invokeRegisterPluginName()
{
    $pluginDisplayName = "<font color=\"red\">[決済]銀行振込</font>";
    return $pluginDisplayName;
}
 
/**
 * invokeRegisterPlugin
 *
 *  管理画面に表示されるメニュータブの位置
 *  メニュー番号
 *  0 => ホーム  1=>商品管理  2=>注文管理  3=>顧客管理  4=>ページ管理  
 *  5=>サイト設定  6=>機能管理  7=>ローカライズ  8=>テーマ管理  9=>レポート
 *
 *  プルダウンメニューに表示しない場合は空でよい。このスクリプトでは
 *  管理機能は必要ないので空。
 *    
 * @param    none
 * @return   array
 */
function invokeRegisterPlugin()
{
    $tab = array('6');
    return $tab;
}
 
/**
 * invokeJs
 *
 *  invokeOutputで実行するときに利用するJavascriptファイルをインクルードします。
 *  ファイルはjsフォルダに設置したファイル名を配列で登録します。
 *
 * @param    none
 * @return   array
 */
function invokeJs()
{
    $js = array('banktransfer.js');
    return $js;
}
 
/**
 * invokeCss
 *
 * invokeOutputで実行するときに利用するCSSファイルをインクルードします。
 * ファイルはcssフォルダに設置したファイル名を配列で登録します。
 *
 * @param    none
 * @return   array
 */
function invokeCss()
{
    $css = array('banktransfer.css');
    return $css;
}
 
/**
 * invokeLibrary
 *
 * invokeOutputで実行するときに利用するスクリプトファイルをインクルードします。
 * ファイルはlibフォルダに設置したファイル名を配列で登録します。
 *
 * @param    none
 * @return   array
 */
function invokeLibrary()
{
    $lib = array('Constant.php', 'BanktransferAdminForm.php', 'PluginListTable.php', 'BanktransferTable.php');
    return $lib;
}
 
/**
 * invokeOutput
 *
 * このプラグインを管理するためのAdmin用の設定表示画面のHTMLを登録します。
 * ファイルはlibフォルダに設置したファイル名を配列で登録します。
 *
 * @param    none
 * @return   string
 */
function invokeOutput()
{
    if (isset($_SERVER["REQUEST_METHOD"]) && $_SERVER["REQUEST_METHOD"] == "POST") {
        BanktransferAdminForm::update();
        return;
    }
 
    BanktransferAdminForm::outputAdminHtml();
}
 
/**
 * invokeStopLibrary
 *
 *  プラグインを無効にするときに利用するスクリプトファイルをインクルードします。
 *  ファイルはlibフォルダに設置したファイル名を配列で登録します。
 *
 * @param    none
 * @return    array
 */
function invokeStopLibrary()
{
    $lib = array('Constant.php', 'BanktransferTable.php');
    return $lib;
}
 
/**
 * invokeStop
 *
 * プラグインが無効化されたときに実行したスクリプトを記述します。
 * データベースを作成した場合は、削除クエリーなどを記述します。
 *
 * @param    none
 * @return    bool
 */
function invokeStop()
{
    $ret = BanktransferTable::drop();
    return $ret;
}
 
/**
 * invokeDevice
 *
 *  このプラグインの有効デバイスを指定する。この関数は省略可
 *  省略した場合は、PC,携帯のそれぞれでtrueとして返す(両デバイスで対応可)
 *  例)携帯のみに対応させる場合は $array = array('pc' => false,'mobile' => true, 'iPhone' => false); とする。
 *
 * @param    none
 * @return    array
 */
function invokeDevice()
{
    //このプラグインの利用端末先を判定する
    $array = array('pc' => true,'mobile' => true, 'iPhone' => true);
    return $array;
}

invokeStart(プラグインの有効化)

管理画面にあるプラグイン管理ページでプラグインを有効化するリンクをクリックしたときに、実行されるスクリプトを記述します。何も行わないときはreturn trueのみ記述します。このプラグイン専用にデータベースを作成する必要がある時は、データベースの作成するクエリー文をreturn true の前に記述します。

function invokeStart()
{
    return true ;
}

invokeStarterLibrary(プラグイン有効化時のインクルードスクリプト)

invokestater_library関数はinvokeStart関数が実行されるときにインクルードされるファイルを配列で登録します。この関数はプラグインを有効化したときに実行したいスクリプトを記述するため利用されます。

//aaaa.phpとbbbb.phpをインクルードしたい場合はは次のように記述します。aaaa.phpとbbbb.phpはlibフォルダ内に設置します。

function invokeStarterLibrary()
{
    $lib = array('aaaa.php','bbb.php');
    return $lib;
}

invokeRegisterPluginName(タブメニューの名称)

この関数は管理画面でプラグインを管理したい場合に、管理画面タブメニューをマウスオーバーした時に表示されるプルダウンメニューの表示名です。この関数で記述した名称はinvokeRegisterPlugin関数でタブ表示が指定されていないと表示されません。

管理画面のプルダウンメニュー
管理画面のプルダウンメニュー
//プルダウンメニューに”デモプラグイン”と表示したい場合は、次のように記述します。
//決済プラグインだとわかりやすくする為に、明示的にフォントタグを挿入しています。

function invokeRegisterPluginName()
{
    return '<font color=\"red\">[決済]銀行振込</font>';
}

invokeRegisterPlugin(タブメニューの位置)

invokeRegisterPlugin関数は管理画面にあるメニュータブのどの位置のタブにプルダウンメニューを表示させるかを指定します。 管理メニューのないプラグインの場合記述する必要はありません。

タブメニューの番号は次の通りです。


  0 => ホーム 1=>商品管理 2=>注文管理 3=>顧客管理 4=>ページ管理 
 5=>サイト設定 6=>機能管理 7=>ローカライズ 8=>テーマ管理 9=>レポート


管理画面のヘッダーのタブメニュー配置


機能管理のタブにプルダウンメニューを追加する場合は配列で次のように記述します。 複数のタブに登録する場合はカンマ(,)で続けてタブの番号を指定します。

function invokeRegisterPlugin()
{
    $Tab = array('6');
    return $Tab;
}

invokeJs(インクルードするJSスクリプト)

invokeOutputで実行されるときに利用するJavascriptファイルを配列で登録します。登録したファイルはHTMLタグのhead内に<script language... と記述されたコードがインクルードされます。 jsvascriptファイルはjsフォルダに設置します。


//sample1.jsとsample2.jsを呼び出す場合

function invokeJs()
{
    $JS = array(sample.js','sample.js');
    return $JS;
}


HTMLソース表示例

							
<script type="text/javascript" src="http://your_site/resources/plugin/GP/sample/js/sample1.js"></script>
<script type="text/javascript" src="http://your_site/resources/plugin/GP/sample/js/sample2.js"></script>

invokeCss(インクルードするCSSスクリプト)

invokeOutputで実行されるときに利用するcssファイルを配列で登録します。登録したファイルはHTMLタグのhead内に<link href... と記述されたコードがインクルードされます。 cssファイルはcssフォルダに設置します。


//aaaa.cssとbbbb.cssを呼び出す場合

function invokeCss()
{
    $CSS = array('aaaa.css','bbbb.css');
    return $CSS;
}


HTMLソース表示例

							
<link href="http://your_site/resources/plugin/GP/sample/css/aaaa.css"  rel="stylesheet" type="text/css" />
<link href="http://your_site/resources/plugin/GP/sample/css/bbbb.css"  rel="stylesheet" type="text/css" />

invokeLibrary(プラグイン利用時のPHPインクルードスクルプト)

invokeOutputで実行されるときに利用するスクリプトファイルを配列で登録します。登録したファイルはinvokeOutput関数の実行時にインクルードされます。


invokeOutput関数で実行時に利用したい独自のPHPのライブラリーや、単独で用意したクラスなどを読み込みさせる場合に利用します。 インクルードさせるファイルはlibフォルダに設置します。


//constant.php、helper.php、action.phpの3つのファイルをインクルードします。

function invokeLibrary()
{
    $lib = array("constant.php","helper.php","action.php");
    return $lib;
}

invokeOutput(プラグイン管理のHTMLビュー)

この関数は追加したプラグインを制御するための管理画面の表示ビューです。 HTMLタグを記述して、必要なデータを登録する処理を行います。データを登録するときはinvokeStart関数で必要なデータベースを作成しておきます。管理画面を作成しない場合は何も記述する必要はありません。


ここでは、HTML部分のソースが多いため、直接invokeOutputには記述せずに、view という関数を新たに作成してこの関数の中にHTML部分を記述し、 invokeOutputにてviewを出力するような形で記述してみます。


//admin.phpの一番下の行に次のソースを記述します。

function view(){
?>
<!--ここにHTMLソースを記述していきます。 -->
<h3>Sample-1</h3>
<form name="sample_plugin_form" action="<?php echo $_SERVER['REQUEST_URI'] ; ?>" method="post">
<div class="box">
<table width="100%" border="0">
  <tr>
    <td width="200">Name1</td>
    <td><input type="text" name="data1" id="data1" /><span class="form_dsc">Name1の説明</span>
    </td>
  </tr>
  <tr>
    <td>name2</td>
    <td><input type="text" name="data2" id="data2" /><span class="form_dsc">Name2の説明</span></td>
  </tr>
</table>
</div>

<h3>Sample-2</h3>
<div class="box">
<table width="100%" border="0">
  <tr>
    <td width="200">Name3</td>
    <td><label><input type="radio" name="data3" id="radio" value="1" /> 
      select1</label>
    <label><input type="radio" name="data3" id="radio" value="2" /> 
    select2</label>
    
    <span class="form_dsc">Name3の説明</span>
    </td>
  </tr>
  <tr>
    <td>name4</td>
    <td><input type="text" name="data4" id="data4" /><span class="form_dsc">Name4の説明</span></td>
  </tr>
</table>
</div>

<div class="action">
<input type="submit" name="" value="Submit" />
</div>
</form>
<?php
	}
?>

これは次のように表示されます。

プラグインの管理画面の表示例
プラグインの管理画面の表示例


次に、invokeOutput関数には次のように記述します。viewがコールされ、HTML部分が表示されます。

function invokeOutput()
{
    view();
}

プラグイン内のスクリプトのアクション結果を出力する

記述したスクリプトに対して結果メッセージを画面上に出力するときは、次のソースコードをh1タグの前に記述します。

結果メッセージ表示例

<div class="msg_success">更新しました。</div>
<div class="msg_error">更新に失敗しました。</div>
<div class="msg_worning">予期せぬエラーが発生しました。</div>


div タグのクラス要素

msg_success
成功時に利用するCSSクラス名
msg_error
スクリプトでエラーがある場合に利用するCSSクラス名
msg_worning
エラー以外に発生したエラーの場合に利用するCSSクラス名


結果メッセージの表示例

結果メッセージの表示例
結果メッセージの表示例


プログラムの記述例

function view(){
//ここにはPHPスクリプトを記述するか、invokeLibraryでインクルードしたファイルににスクリプト記述します。
//exmple script
    if(isset($_POST['data1'])){
        $name1 = $_POST['data1'];
        if(!empty($name1)){
            echo '<div class="msg_success">更新しました。</div>';
        }else{
            echo '<div class="msg_error">更新に失敗しました。</div>';
        }
     }
....

invokeStopLibrary(プラグイン無効化時のインクルードスクリプト)

この関数はプラグインを無効にするときに利用したいスクリプトファイルをインクルードするための関数です。 インクルードするファイルはlibフォルダに設置したファイル名を配列で登録します。ない場合、配列は空のままです。

//constant.php、helper.php、action.phpの3つのファイルをインクルードします。

function invokeStopLibrary()
{
    $lib = array('constant.php','helper.php','action.php');
    return $lib;
}

invokeStop(プラグインの無効時の実行スクリプトを記述する)

プラグインを無効化したときに実行したいスクリプトを記述します。 データベースを作成した場合は、削除クエリーなどをreturn true の前に記述します。

function invokeStop()
{
    return true ;
}

invokeDevice(プラグインの有効なデバイスを指定する)

このプラグインを利用するデバイス(端末)を指定します。この関数は省略できます。省略した場合は全デバイスで有効となります。

function invokeDevice()
{
    //このプラグインの利用端末先を判定する
    $array = array('pc' => true,'mobile' => true, 'iPhone' => true);
    return $array;
}

mobile=> true で返した場合は、次のユーザーエージェントをヘッダに含む場合有効としています。

  • DoCoMo
  • SoftBank
  • J-PHONE
  • KDDI

iPhone => true で返した場合は、次のユーザーエージェントをヘッダに含む場合有効としています。

  • iPhone

これらのユーザーエージェントが含まれない場合はこのプラグインは実行されません。