現在、支払い方法が前払い銀行振り込みだけですので。。もう少しお客様が安心できるように。。ということで、コンビニ後払いなどの導入が出来ないか検討しています。
しかし、決済代行になるわけで代行手数料が結構きつい。。そこは手数料負担をしてもらうことにすると、システムがきつい。。
EC-CUBEの合計金額に応じた手数料計算
こちらのエントリーのようなシステムにしたいっ!!
(`o´)ゞ 改造、カスタマイズいきますっ!!
正直、今までの中でも一、二を争うくらいスマートじゃないソースです。。(爆
かなり適当。
一応出来上がりは。。基本手数料+(小計+送料)*加算手数料率。。です。
■<DATAベース>以下のSQLをDBに対して実行(下二つは。。不要?!かも)
「加算手数料率」のテーブル追加。
ALTER TABLE dtb_payment ADD (
charge_rate numeric
);ALTER TABLE dtb_order ADD (
charge_rate numeric
);ALTER TABLE dtb_order_temp ADD (
charge_rate numeric
);
<追記>小数点以下が必要な場合MySQLデータベースでは decimal(10,2) など。。
◇管理画面◇
■</html/admin/basis/payment.php>
$col = “payment_id, payment_method, charge, rule, upper_rule, note, deliv_id, fix, charge_flg, charge_rate“;
■</data/Smarty/templates/admin/basis/payment.tpl>
<td width=”60″>手数料(%)</td>
<!–{if !$arrPaymentListFree[cnt].charge_rate}–>
<td align=”center”>-</td>
<!–{else}–>
<td align=”right”><!–{$arrPaymentListFree[cnt].charge_rate|escape|number_format}–></td>
<!–{/if}–>
■</html/admin/basis/payment_input.php>
$objFormParam->addParam(“加算手数料率”, “charge_rate”,
PERCENTAGE_LENPRICE_LEN, “n”, array(“EXIST_CHECK”, “NUM_CHECK”, “MAX_LENGTH_CHECK”));
■</data/Smarty/templates/admin/basis/payment_input.tpl>
<tr class=”fs12n”>
<td width=”100″ bgcolor=”#f0f0f0″>加算手数料率</td>
<td width=”340″ bgcolor=”#ffffff”>
<!–{if $charge_flg == 2}–>
設定できません
<!–{else}–>
<!–{assign var=key value=”charge_rate”}–>
<span class=”red12″><!–{$arrErr[$key]}–></span>
<input type=”text” name=”<!–{$arrForm[$key].keyname}–>” value=”<!–{$arrForm[$key].value|escape}–>” size=”10″ class=”box10″ maxlength=”<!–{$arrForm[$key].length}–>” style=”<!–{$arrErr[$key]|sfGetErrorColor}–>” />
%
<!–{/if}–>
</td>
</tr>
◇フロント・ショッピング◇
■</html/shopping/payment.php>
順番変えて「売り切れチェック」の前にデータ取得を。
で、ファンクションの中で手数料計算。。
。。文字列のまま計算してしまってます。。いいのか??(爆
// 店舗情報の取得-0:順序格上
$arrInfo = $objSiteInfo->data;
// 購入金額の取得-0:順序格上
$total_pretax = $objCartSess->getAllProductsTotal($arrInfo);
// 送料の取得-0:追加
$arrData = sfGetOrderTemp($uniqid);
$arrData = sfTotalConfirm($arrData, $objPage, $objCartSess, $arrInfo, $objCustomer, $objCampaignSess);
$deliv_fee = $arrData[‘deliv_fee’];
/* 支払い方法文字列の取得 */
function lfGetPaymentInfo($payment_id) {
global $total_pretax; //小計参照取得
global $deliv_fee; //送料参照取得
$objQuery = new SC_Query();
$where = “payment_id = ?”;
$arrRet = $objQuery->select(“payment_method, charge, charge_rate”, “dtb_payment”, $where, array($payment_id));
$arrRet[0][‘charge’] = $arrRet[0][‘charge’]+ceil(($total_pretax+$deliv_fee)*$arrRet[0][‘charge_rate’]/100); //基本手数料+<切上:(小計+送料)*加算手数料率>
if($arrRet[0][‘charge’] == “”) {
$arrRet[0][‘charge’] = ‘0’; //NULLの時はゼロ
}
return (array($arrRet[0][‘payment_method’], $arrRet[0][‘charge’]));
}
送料に手数料を掛けたくない場合は、取得部分や計算部分変数を消す。。
固定手数料の場合は、率をゼロ。 変動のみ手数料は逆に固定手数料をゼロ。
金額いくらからいくらは300円。いくらからいくらは500円みたいな段階式は。。考えてない(爆
なんとか。。動いてはいるようだ。。っていうか、ホントはもっとスマートに出来るんぢゃね??
数日間の試行錯誤のし過ぎで、頭がくらくらします。。カテゴリのリスト表示はまだ完璧に出来ていないことを考えると、動いているだけマシ?! スマートなイイ方法あったら教えて~っ!!
余談)試行錯誤で支払い方法復活させたり削除したり。。面倒なので管理画面から行えるようにした(W
改造は自己責任で。。
</html/shopping/payment.php ※※追記>
手数料「0」の時NULLになるようなので条件文追加
<小数点以下設定のため多少改造>
コメント
[…] お客様からのお支払い方法が「銀行振り込み(先振込み)」しか設定できていません。。… […]
すいません。
このスクリプトは、EC-CUBEのVER:2.01でも動作しますか?
こんにちは
スクリプトと呼べるか謎ですが。。
2系は全然使っておりませんので機能するかなど、記述場所など。。判りません。
実は、使っているのが今のところ1.3.0の改造版なので1.4.X系も??なんです。
お役に立てずスミマセン