合計金額に応じた手数料

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

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

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になるようなので条件文追加

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

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク

コメント

  1. […] お客様からのお支払い方法が「銀行振り込み(先振込み)」しか設定できていません。。… […]

  2. 初心者 より:

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

  3. こてつ より:

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

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

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

    お役に立てずスミマセン

Highslide for Wordpress Plugin