2007年10月02日

合計金額に応じた手数料


[ EC-CUBEっぽいの ]

現在、支払い方法が前払い銀行振り込みだけですので。。もう少しお客様が安心できるように。。ということで、コンビニ後払いなどの導入が出来ないか検討しています。

しかし、決済代行になるわけで代行手数料が結構きつい。。そこは手数料負担をしてもらうことにすると、システムがきつい。。

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_LEN PRICE_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>

合計金額に応じた手数料:管理画面1 合計金額に応じた手数料:管理画面2

◇フロント・ショッピング◇
■</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になるようなので条件文追加


<小数点以下設定のため多少改造>

投稿者 こてつ : 2007年10月02日 20:40 | トラックバック
ブックマーク :

はてなブックマークに登録 livedoorクリップに登録 Buzzurlに登録 Yahoo!ブックマークに登録 users

最近の検索テーマ - 旬?!ワード
バリカー  交換  ドアノブ  追伸  outlook  ボラード  改造  喉の腫れ  RAZO  ヌレンザ  ケンドル  移行  outlook2003  構文チェック  悪性リンパ腫とは  ドアノブ交換  かっけ  undisclosed-recipients  firefox  コカコーラシート  悪性リンパ腫  モノ  カーフィッティング  java  html 
[PR] 
[PR] 
トラックバック
このエントリーのトラックバックURL:
(このブログへの記事紹介・リンクがない場合トラックバックできません。)
http://good-match.net/mt/mt-5t5b5.cgi/1348

このリストは、次のエントリーを参照しています: 合計金額に応じた手数料:

» コンビニ後払い from Soliloquy of Webmas
お客様からのお支払い方法が「銀行振り込み(先振込み)」しか設定できていません。。... [続きを読む]

トラックバック時刻: 2007年10月18日 13:32


すいません。
このスクリプトは、EC-CUBEのVER:2.01でも動作しますか?

投稿者 初心者 : 2008年03月08日 09:01

こんにちは
スクリプトと呼べるか謎ですが。。

2系は全然使っておりませんので機能するかなど、記述場所など。。判りません。

実は、使っているのが今のところ1.3.0の改造版なので1.4.X系も??なんです。

お役に立てずスミマセン

投稿者 こてつ : 2008年03月08日 12:14

コメントしてください




保存しますか?