NPカード用のプラグインが用意されてないため、取りあえず一時的データベースにカード情報等を保存するためのカスタマイズをしました。
カード情報等はあれなもんで、都度手動で削除するという運用です。
まず、ECCUBE 管理画面>基本情報管理>支払方法設定で、クレジットカード(NPカード)を追加する。
データベースに保存するカード情報は、
カードの種類「VISA/MasterCard/JCB/AMEX/DINERS」、カードの使用期限、
カードの番号、カードの名義人名、支払方法「一括払い・リボルビング払い・分割払い・ボーナス一括払い」、
があり、カードの種類で、使える支払い方法が異なってきますので、その分のカラムを「dtb_order」、「dtb_order_temp」(受注情報一時保存)に追加します。
「dtb_order_temp」情報を保持するためのカラムを追加。
//カードの名義人 ALTER TABLE dtb_order_temp ADD COLUMN cardname text; //カードの種類 ALTER TABLE dtb_order_temp ADD COLUMN cardbrand smallint; //カードの使用期限 年 ALTER TABLE dtb_order_temp ADD COLUMN card_yy smallint; //カードの使用期限 月 ALTER TABLE dtb_order_temp ADD COLUMN card_mm smallint; //カードの支払方法「VISA/MasterCard/JCB」 ALTER TABLE dtb_order_temp ADD COLUMN card_methods smallint; //カードの支払方法「AMEX」 ALTER TABLE dtb_order_temp ADD COLUMN card_methods_amex smallint; //カードの支払方法「DINERS」 ALTER TABLE dtb_order_temp ADD COLUMN card_methods_di smallint; //カードの支払方法 分割回数「VISA/MasterCard/JCB」 ALTER TABLE dtb_order_temp ADD COLUMN card_times smallint; //カードの支払方法 分割回数「AMEX」 ALTER TABLE dtb_order_temp ADD COLUMN card_times_amex smallint; //カードの番号 ALTER TABLE dtb_order_temp ADD COLUMN cardnumber text;
「dtb_order」情報を保持するためのカラムを追加。
//カードの名義人 ALTER TABLE dtb_order ADD COLUMN cardname text; //カードの種類 ALTER TABLE dtb_order ADD COLUMN cardbrand smallint; //カードの使用期限 年 ALTER TABLE dtb_order ADD COLUMN card_yy smallint; //カードの使用期限 月 ALTER TABLE dtb_order ADD COLUMN card_mm smallint; //カードの支払方法「VISA/MasterCard/JCB」 ALTER TABLE dtb_order ADD COLUMN card_methods smallint; //カードの支払方法「AMEX」 ALTER TABLE dtb_order ADD COLUMN card_methods_amex smallint; //カードの支払方法「DINERS」 ALTER TABLE dtb_order ADD COLUMN card_methods_di smallint; //カードの支払方法 分割回数「VISA/MasterCard/JCB」 ALTER TABLE dtb_order ADD COLUMN card_times smallint; //カードの支払方法 分割回数「AMEX」 ALTER TABLE dtb_order ADD COLUMN card_times_amex smallint; //カードの番号 ALTER TABLE dtb_order ADD COLUMN cardnumber text;
マスターテーブルを8つ追加
//カードの種類 CREATE TABLE mtb_card_brand ( id smallint, name text, rank smallint NOT NULL DEFAULT 0, PRIMARY KEY (id ) ); //カードの使用期限 年 CREATE TABLE mtb_card_yy ( id smallint, name text, rank smallint NOT NULL DEFAULT 0, PRIMARY KEY (id ) ); //カードの使用期限 月 CREATE TABLE mtb_card_mm ( id smallint, name text, rank smallint NOT NULL DEFAULT 0, PRIMARY KEY (id ) ); //カードの支払方法「VISA/MasterCard/JCB」 CREATE TABLE mtb_card_methods ( id smallint, name text, rank smallint NOT NULL DEFAULT 0, PRIMARY KEY (id ) ); //カードの支払方法「AMEX」 CREATE TABLE mtb_card_methods_amex ( id smallint, name text, rank smallint NOT NULL DEFAULT 0, PRIMARY KEY (id ) ); //カードの支払方法「DINERS」 CREATE TABLE mtb_card_methods_di ( id smallint, name text, rank smallint NOT NULL DEFAULT 0, PRIMARY KEY (id ) ); //カードの支払方法 分割回数「VISA/MasterCard/JCB」 CREATE TABLE mtb_card_methods_times ( id smallint, name text, rank smallint NOT NULL DEFAULT 0, PRIMARY KEY (id ) ); //カードの支払方法 分割回数「AMEX」 CREATE TABLE mtb_card_methods_times__amex ( id smallint, name text, rank smallint NOT NULL DEFAULT 0, PRIMARY KEY (id ) );
作成したテーブルに値を登録する。「システム設定>マスターデータ管理」で開くことになる。
//mtb_card_brand INSERT INTO mtb_card_brand (id, name, rank) VALUES (1, 'VISA', 0); INSERT INTO mtb_card_brand (id, name, rank) VALUES (2, 'MasterCard', 1); INSERT INTO mtb_card_brand (id, name, rank) VALUES (3, 'JCB', 2); INSERT INTO mtb_card_brand (id, name, rank) VALUES (4, 'AMEX', 3); INSERT INTO mtb_card_brand (id, name, rank) VALUES (5, 'DINERS', 4); //mtb_card_yy INSERT INTO mtb_card_yy (id, name, rank) VALUES (1, '2012', 0); INSERT INTO mtb_card_yy (id, name, rank) VALUES (2, '2013', 1); INSERT INTO mtb_card_yy (id, name, rank) VALUES (3, '2014', 2); INSERT INTO mtb_card_yy (id, name, rank) VALUES (4, '2015', 3); INSERT INTO mtb_card_yy (id, name, rank) VALUES (5, '2016', 4); INSERT INTO mtb_card_yy (id, name, rank) VALUES (6, '2017', 5); INSERT INTO mtb_card_yy (id, name, rank) VALUES (7, '2018', 6); INSERT INTO mtb_card_yy (id, name, rank) VALUES (8, '2019', 7); INSERT INTO mtb_card_yy (id, name, rank) VALUES (9, '2020', 8); //mtb_card_mm INSERT INTO mtb_card_mm (id, name, rank) VALUES (1, '1', 0); INSERT INTO mtb_card_mm (id, name, rank) VALUES (2, '2', 1); INSERT INTO mtb_card_mm (id, name, rank) VALUES (3, '3', 2); INSERT INTO mtb_card_mm (id, name, rank) VALUES (4, '4', 3); INSERT INTO mtb_card_mm (id, name, rank) VALUES (5, '5', 4); INSERT INTO mtb_card_mm (id, name, rank) VALUES (6, '6', 5); INSERT INTO mtb_card_mm (id, name, rank) VALUES (7, '7', 6); INSERT INTO mtb_card_mm (id, name, rank) VALUES (8, '8', 7); INSERT INTO mtb_card_mm (id, name, rank) VALUES (9, '9', 8); INSERT INTO mtb_card_mm (id, name, rank) VALUES (10, '10', 9); INSERT INTO mtb_card_mm (id, name, rank) VALUES (11, '11', 10); INSERT INTO mtb_card_mm (id, name, rank) VALUES (12, '12', 11); //mtb_card_methods INSERT INTO mtb_card_methods (id, name, rank) VALUES (1, '一括払い', 0); INSERT INTO mtb_card_methods (id, name, rank) VALUES (2, 'リボルビング払い', 1); INSERT INTO mtb_card_methods (id, name, rank) VALUES (3, '分割払い', 2); INSERT INTO mtb_card_methods (id, name, rank) VALUES (4, 'ボーナス一括払い', 3); //mtb_card_methods_amex INSERT INTO mtb_card_methods_amex (id, name, rank) VALUES (1, '一括払い', 0); INSERT INTO mtb_card_methods_amex (id, name, rank) VALUES (2, '分割払い', 1); INSERT INTO mtb_card_methods_amex (id, name, rank) VALUES (3, 'ボーナス一括払い', 2); //mtb_card_methods_di INSERT INTO mtb_card_methods_di (id, name, rank) VALUES (1, '一括払い', 0); INSERT INTO mtb_card_methods_di (id, name, rank) VALUES (2, 'リボルビング払い', 1); INSERT INTO mtb_card_methods_di (id, name, rank) VALUES (3, 'ボーナス一括払い', 2); //mtb_card_times INSERT INTO mtb_card_times (id, name, rank) VALUES (1, '2', 0); INSERT INTO mtb_card_times (id, name, rank) VALUES (2, '3', 1); INSERT INTO mtb_card_times (id, name, rank) VALUES (3, '5', 2); INSERT INTO mtb_card_times (id, name, rank) VALUES (4, '6', 3); INSERT INTO mtb_card_times (id, name, rank) VALUES (5, '10', 4); INSERT INTO mtb_card_times (id, name, rank) VALUES (6, '12', 5); INSERT INTO mtb_card_times (id, name, rank) VALUES (7, '15', 6); INSERT INTO mtb_card_times (id, name, rank) VALUES (8, '18', 7); INSERT INTO mtb_card_times (id, name, rank) VALUES (9, '20', 8); INSERT INTO mtb_card_times (id, name, rank) VALUES (10, '24', 9); //mtb_card_times_amex INSERT INTO mtb_card_times_amex (id, name, rank) VALUES (1, '3', 0); INSERT INTO mtb_card_times_amex (id, name, rank) VALUES (2, '5', 1); INSERT INTO mtb_card_times_amex (id, name, rank) VALUES (3, '6', 2); INSERT INTO mtb_card_times_amex (id, name, rank) VALUES (4, '10', 3); INSERT INTO mtb_card_times_amex (id, name, rank) VALUES (5, '12', 4); INSERT INTO mtb_card_times_amex (id, name, rank) VALUES (6, '15', 5); INSERT INTO mtb_card_times_amex (id, name, rank) VALUES (7, '18', 6); INSERT INTO mtb_card_times_amex (id, name, rank) VALUES (8, '20', 7); INSERT INTO mtb_card_times_amex (id, name, rank) VALUES (9, '24', 8);
「商品購入/お支払い方法・お届け時間等の指定」にカード情報を追加
data/class/pages/shopping/LC_Page_Shopping_Payment.phpに下記事項を追記
function init() { parent::init(); $this->tpl_onload = 'fnCheckInputPoint();'; $this->tpl_title = 'お支払方法・お届け時間等の指定'; $masterData = new SC_DB_MasterData_Ex(); $this->arrPref = $masterData->getMasterData('mtb_pref'); $this->arrCardbrand = $masterData->getMasterData('mtb_card_brand'); $this->arrCardyy = $masterData->getMasterData('mtb_card_yy'); $this->arrCardmm = $masterData->getMasterData('mtb_card_mm'); $this->arrCardmethods = $masterData->getMasterData('mtb_card_methods'); $this->arrCardmethodsamex = $masterData->getMasterData('mtb_card_methods_amex'); $this->arrCardmethodsdi = $masterData->getMasterData('mtb_card_methods_di'); $this->arrCardtimes = $masterData->getMasterData('mtb_card_times'); $this->arrCardtimesamex = $masterData->getMasterData('mtb_card_times_amex'); } function lfInitParam(&$objFormParam, $deliv_only, &$arrShipping) { $objFormParam->addParam('配送業者', 'deliv_id', INT_LEN, 'n', array('EXIST_CHECK', 'MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('ポイント', 'use_point', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK', 'ZERO_START')); $objFormParam->addParam('その他お問い合わせ', 'message', LTEXT_LEN, 'KVa', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('ポイントを使用する', 'point_check', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'), '2'); if ($deliv_only) { $objFormParam->addParam('お支払い方法', 'payment_id', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); } else { $objFormParam->addParam('お支払い方法', 'payment_id', INT_LEN, 'n', array('EXIST_CHECK', 'MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('ご利用クレジットカード', 'cardbrand', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('名義人', 'cardname', LTEXT_LEN, 'KVa', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('カード番号', 'cardnumber', CREDIT_NUM_LEN1, 'n', array('MIN_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('有効期限月', 'card_mm', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('有効期限年', 'card_yy', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('有効期限年', 'card_yy', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('お支払い方法(VISA/MasterCard/JCB)', 'card_methods', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('お支払い方法(AMEX)', 'card_methods_amex', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('お支払い方法(DINERS)', 'card_methods_di', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('分割回数(VISA/MasterCard/JCB)', 'card_times', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('分割回数(AMEX)', 'card_times_amex', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); foreach ($arrShipping as $val) { $objFormParam->addParam('お届け時間', 'deliv_time_id' . $val['shipping_id'], INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('お届け日', 'deliv_date' . $val['shipping_id'], STEXT_LEN, 'KVa', array('MAX_LENGTH_CHECK')); } } $objFormParam->setParam($arrParam); $objFormParam->convParam(); }
フロントページにカード情報入力欄を追記
data/Smarty/templates/default/shopping/payment.tpl
お届け時間の指定
の上に入力できるように下記を挿入
お届け時間の指定
「商品購入/ご入力内容のご確認」に カード情報を追加
data/class/pages/shopping/LC_Page_Shopping_Confirm.phpに下記を追記
function init() { parent::init(); $this->tpl_title = 'ご入力内容のご確認'; $masterData = new SC_DB_MasterData_Ex(); $this->arrPref = $masterData->getMasterData('mtb_pref'); $this->arrSex = $masterData->getMasterData('mtb_sex'); $this->arrMAILMAGATYPE = $masterData->getMasterData('mtb_mail_magazine_type'); $this->arrReminder = $masterData->getMasterData('mtb_reminder'); $this->arrCardbrand = $masterData->getMasterData("mtb_card_brand", array( "id", "name", "rank" ) ); $this->arrCardyy = $masterData->getMasterData("mtb_card_yy", array( "id", "name", "rank" ) ); $this->arrCardmm = $masterData->getMasterData("mtb_card_mm", array( "id", "name", "rank" ) ); $this->arrCardmethods = $masterData->getMasterData("mtb_card_methods", array( "id", "name", "rank" ) ); $this->arrCardmethodsamex = $masterData->getMasterData("mtb_card_methods_amex", array( "id", "name", "rank" ) ); $this->arrCardmethodsdi = $masterData->getMasterData("mtb_card_methods_di", array( "id", "name", "rank" ) ); $this->arrCardtimes = $masterData->getMasterData("mtb_card_times", array( "id", "name", "rank" ) ); $this->arrCardtimesamex = $masterData->getMasterData("mtb_card_times_amex", array( "id", "name", "rank" ) ); $this->httpCacheControl('nocache'); }
フロントページ「商品購入/ご入力内容のご確認」に
お支払方法でクレジットカード(NPカード)が選択されている場合のみ表示するよう
data/Smarty/templates/default/shopping/confirm.tplに追記
お支払方法・配送方法・その他お問い合わせ
お支払方法 | |
---|---|
ご利用クレジットカード | ※ご利用クレジットカードを選択して下さい。 |
カード番号 | ※カード番号を入力して下さい。 |
名義人 | ※カード名義人を入力して下さい。 |
有効期限 | 月/ 年※有効期限を入力して下さい。 |
お支払い詳細方法 | ※お支払い詳細方法を入力して下さい。 |
分割回数 | 回※分割払いの場合は分割回数を必ず入力して下さい。 |
配送方法 | |
その他お問い合わせ |
カード情報をメールに反映させる(カード番号は除いています。)
data/class/helper/SC_Helper_Mail.php に追加
//50行目あたりに追加 function __construct() { $masterData = new SC_DB_MasterData_Ex(); $this->arrMAILTPLPATH = $masterData->getMasterData('mtb_mail_tpl_path'); $this->arrPref = $masterData->getMasterData('mtb_pref'); $this->arrCardbrand = $masterData->getMasterData('mtb_card_brand'); $this->arrCardyy = $masterData->getMasterData('mtb_card_yy'); $this->arrCardmm = $masterData->getMasterData('mtb_card_mm'); $this->arrCardmethods = $masterData->getMasterData('mtb_card_methods'); $this->arrCardmethodsamex = $masterData->getMasterData('mtb_card_methods_amex'); $this->arrCardmethodsdi = $masterData->getMasterData('mtb_card_methods_di'); $this->arrCardtimes = $masterData->getMasterData('mtb_card_times'); $this->arrCardtimesamex = $masterData->getMasterData('mtb_card_times_amex'); } //181行目あたりに追加 // 都道府県変換 $arrTplVar->arrPref = $this->arrPref; // カード種類変換 $arrTplVar->arrCardbrand = $this->arrCardbrand; // カード有効期限(年)変換 $arrTplVar->arrCardyy = $this->arrCardyy; // カード有効期限(月)変換 $arrTplVar->arrCardmm = $this->arrCardmm; // 支払い詳細方法変換 $arrTplVar->arrCardmethods = $this->arrCardmethods; // 支払い詳細方法変換 $arrTplVar->arrCardmethodsamex = $this->arrCardmethodsamex; // 支払い詳細方法変換 $arrTplVar->arrCardmethodsdi = $this->arrCardmethodsdi; // 分割方法変換 $arrTplVar->arrCardtimes = $this->arrCardtimes; // 分割方法変換 $arrTplVar->arrCardtimesamex = $this->arrCardtimesamex; // カード名義変換 $arrTplVar->cardname = $arrOrder['cardname'];
PC用メール data/Smarty/templates/default/mail_templates/order_mail.tpl 34行目あたりに下記追加
ご利用カードの種類: 有効期限: 月/ 年 カードの名義: お支払い詳細方法: お支払い分割回数: 回
以上で完了ですが、クレジット情報を入力する画面では、ユーザビリティを考慮して
javascript等で、入力を制御するカスタマイズをしたほうがいいですね。 とりあえずは、クレジットカード(NPカード)のラジオボタンを押下時にクレジットカード情報入力フォームを 出す感じで運用しています。
カード情報の流出は大変なことになりますので、上記で運用する場合はくれぐれも注意して下さい。