代引き以外の支払方法で手数料を設定する方法

スポンサーリンク

Welcartでは、支払い方法への手数料としては代引き手数料のみがデフォルトで設定できます。しかし、他の支払い方法で手数料を加算したい場合も結構あります。

Welcartでは、代引き手数料の金額部分や文言にフィルターが用意されており、functions.phpにフィルターフックを設置して「代引き手数料」を書き換えする方法で、他の支払方法でも手数料を加算することが出来なくもないです。

そんなわけで、代金引換と併用出来るように配慮して、カスタマイズを行ってみました。

関連として、配送オプションで手数料を追加する方法は、以下の記事をご覧下さい。

配送オプションで料金を追加する方法 - 関連記事

もくじ

  1. 利用するフック
  2. functions.phpにフィルターフックを記述
  3. カスタマイズのアレンジ
  4. まとめ

1. 利用するフィルターフック

今回のフィルターフックでの書き換えは、全部で三箇所です。代引きの金額部分と、確認ページで出力される「代引き手数料」というテキスト部分、更にメール内での文言となります。

代引き手数料の金額部分

  • フックの記述・・・usces_filter_getCODFee
  • フックの場所・・・usc-e-shop/classes/usceshop.class.php

「代引き手数料」のテキスト部分

  • フックの記述・・・usces_filter_cod_label
  • フックの場所・・・usc-e-shop/theme/welcart_default/wc_templates/cart/wc_confirm_page.php

メールの文言

  • フックの記述・・・usces_filter_order_confirm_mail_meisai
  • フックの場所・・・usc-e-shop/functions/function.php

メールについては、ちょうどいい場所にフックがないため、「お支払い金額」の下に注意書きとして文字を入れるという、苦渋の対策です。

Welcartの注文メールで支払手数料の案内をする

支払設定のところで、今回設定したいコンビニ払いなどの決済種別を「後払い」ではなく「代金引換」とすれば、フックで「手数料」として明細に表示出来なくもないです。ただ、ポイント加算の時期は入金時でなくなるなど、ズレが生じることになります。

2. functions.phpにフィルターフックを記述

今回の例では、以下のようにしました。

  • Welcartの「基本設定」の「支払方法」で、「コンビニ払い」という支払方法名を設定。
  • 支払い方法で「コンビニ払い」が選択された際に、手数料200円を加算。

バックエンドでの設定はこのような感じです。

Welcartの支払方法を設定

設定が出来たら、以下のコードをfunctions.phpに記載します。

//コンビニ払いの時、手数料200円を加算
add_filter('usces_filter_getCODFee', 'my_filter_getCODFee', 10, 3);
function my_filter_getCODFee($fee, $payment_name, $amount_by_cod){
    if($payment_name == "コンビニ払い"){
            $fee = 200;
    }
    return $fee;
}
//コンビニ払いの時、手数料名称を出力
add_filter('usces_filter_cod_label', 'my_filter_cod_label', 10, 1);
function my_filter_cod_label(){
    global $usces_entries;
    if($usces_entries['order']['payment_name'] == "コンビニ払い"){
        $text = "コンビニ払い手数料";
    } else {
        $text = __('COD fee', 'usces');
    }
    return $text;
}
//メールで「コンビニ払い手数料」の金額を案内
add_filter('usces_filter_order_confirm_mail_meisai', 'my_order_confirm_mail_meisai', 10, 3);
function my_order_confirm_mail_meisai($meisai, $data, $cart){
    if($data[order_payment_name] == "コンビニ払い"){
        $meisai .= "※上記お支払い金額にはコンビニ払い手数料(" . usces_crform( $data['order_cod_fee'], true, false, 'return' ) . ")が含まれております。\r\n";
    }
    return $meisai;
}

これで完了です。

2015/5/19更新:まめきち様のコメントより、自動返信メールの文言変更用には以下のフックを追加する必要があるとのご指摘を賜りました。

add_filter(‘usces_filter_send_order_mail_meisai’,’my_order_confirm_mail_meisai’, 10, 3);

検証の余裕がある時にまた確認してみますが、取り急ぎここに追記という形でご容赦下さいませ。

顧客が「コンビニ払い」を選択した際、代引き手数料の金額とテキストが、フィルターによって変わって出力されるようになります。

Welcartで代引き以外で手数料

この画像の例では、コンビニ払い手数料にも課税されています(=手数料200円は税抜き価格)。

Welcartの基本設定で、「消費税区分」を「税別(外税)」としている場合は、課税対象をどの範囲にするのか、必ず確認しておきましょう。

Welcartの消費税設定

3. カスタマイズのアレンジ

定額の手数料ではなく、「商品合計金額の○%」等としたい場合は、以下のようにします。

例:支払い方法が「Paypal」の場合に、商品合計金額の3.5%を手数料とする

//Paypalの時、手数料3.5%を加算
add_filter('usces_filter_getCODFee', 'my_filter_getCODFee', 10, 3);
function my_filter_getCODFee($fee, $payment_name, $amount_by_cod){
    global $usces_entries;
    $total_items_price = $usces_entries['order']['total_items_price'];
    if($payment_name == "Paypal"){
            $fee = $total_items_price * 0.035;
    }
    return $fee;
}
//.....後略

Welcartで、商品合計の数%を支払手数料として加算

手数料は「商品合計」から計算されます。Welcartの「基本設定」の消費税設定が「税込」なら税込価格から3.5%、「税別」なら税別価格から3.5%です。

上の画像の例では、設定は以下のようになっています。

  • 税別価格の「商品合計」に、3.5%を加算
  • その後、送料も含めた全体の合計に消費税を加算

表示を「税別」としている場合には、Welcartの「基本設定」で、消費税の対象範囲を送料や手数料にも課しているか等々の設定にも気をつけ、きちんと計算された額になるかどうか、必ずテストしましょう。

4. まとめ

Welcartは、現時点では「代引きの手数料」の課金しか出来ない為、それ以外での支払い方法の手数料課金はやはりどこかしら無理はあります。

代引きは使わない場合でしたら、「代引き」関連の文言等を全てを書き換えても問題ないため、カスタマイズコードはもう少しシンプルなものになると思います。

この方法で、代引き以外の方法での手数料課金もとりあえずは出来なくもないので、もし困っている方がいらしたら試してみて下さい。

16 Responses to “代引き以外の支払方法で手数料を設定する方法”

  1. HASHI より:

    WelcartでのECサイト作成に挑戦しております。
    いろいろと貴重な記事があり、大変参考にさせていただいております。
    代引き以外の支払方法で手数料を設定できないか悩んでいて、とても助かりました。すんなりとまではいきませんでしたが、なんとか設定することが出来、ありがとうございました。
    厚かましいようで、申し訳ありませんが、さらに「代引きの手数料」を地域によって変更させることは可能でしょうか?
    いろいろとやってみたのですが、なかなかうまくいかずコメントを投稿させていただきました。

    • まめ子(管理人) より:

      usces_filter_getCODFeeは引数に注文者情報を引き渡していないので、まずは

      global $usces;
      $entry = $usces->cart->get_entry();

      などで注文者情報を呼び出す必要があると思います。その上で、こちらこちらの方法のように条件分岐をして、条件に当てはまる場合は$feeに必要な手数料を加算する式を書けばいいと思いますよ。

  2. HASHI より:

    早速のお返事ありがとうございました。
    “global $usces_entries;” かなと想像でやっていたのがいけなかったようで、教えていただいたものに入れ替えたところ、うまくいきました。

    勉強不足を痛感しております。
    書籍を購入しては勉強しているのですが、
    やはり自分でいろいろと書いてみたり、他の方のコードを見たりして勉強しないといけないなと思っております。

    なかなかうまくいかず悩んでおりましたが、おかげで様で解決できました。
    ありがとうございます。

    こちらのサイトには有用な記事が多く、勉強させて頂いております。
    本当にありがとうございました。

    • まめ子(管理人) より:

      うまく行ってよかったです。そうなんです、Welcartは金銭的なコストがかからない分、自分が勉強しなければならないという労力コストがかかるんですよね。Welcartのコードは非常に高度で複雑なので、最初はなかなか難しいですが、少しずつやっていけば多少のカスタマイズは簡単に出来るようになると思います。私もまだまだ勉強中です。頑張りましょう!

  3. Yuya より:

    大変有益な情報ありがとうございます。
    助かりました。

    ところで、例えば「銀行振込」を割引500円で設定したいという時は
    どのようにすれば宜しいのでしょうか?

    大変お忙しいとは思いますが、お時間がある時に
    少しご教授頂けると幸いです。

    • Yuya より:

      上記方法で試したところ、

      ◉代引き手数料の金額部分
      ◉「代引き手数料」のテキスト部分
      は問題なく出来ました。大変辺助かりました。

      ただし
      ◉メールの文言の部分が何度やっても、
      合計金額はちゃんと手数料が加算されて金額が表示されるのですが、
      「※上記お支払い金額にはコンビニ払い手数料が含まれております。

      が表示されるようになりません。

      どうしたもんでしょうか?

      • まめ子(管理人) より:

        割引の場合は、PHPの式をマイナスにすればいいと思います。
        メールの文言のところは、order_payment_nameが一致していないのではないでしょうか?予想ですが・・・

  4. Yuya より:

    お忙しい中ご回答頂きありがとうございます。
    少しずつ自分でもPHPをもう一度勉強しなおして、
    進めてみます。

    ところで、まめ子さまが作成されたwordpressテーマをダウンロードさせて頂きました。

    とても無料とも思えないwelcart用のテーマとは思えないほどの
    クオリティーで気に入っております。

    一点だけ気になった部分があるのですが、
    PCのブラウザ上では固定ページ、商品ページ含めて問題なく
    表示されているのですが、

    スマホで確認すると、
    全ての固定ページそして商品ページが
    「只今メンテナンス中です。しばらくお待ち下さい。」
    という文言が表示されてしまいます。

    なぜでしょうか?

    メンテナンスモードなどは使っていないのですが、
    PCのブラウザ上では問題なく表示されております。

    • まめ子(管理人) より:

      「只今メンテナンス中です。しばらくお待ち下さい。」という文言は配布テーマには含まれておりませんので、テーマとは関係がないのではないかと思われます。
      「メンテナンスモードを使っていて、PCではログインしているから見られる」的なことのようにも感じられますが、メンテナンスモードは使っていらっしゃらないとのことですので、にわかにはわからないですね・・・お役に立てずすみません。

  5. steven より:

    こんにちは、
    私もメールだけ表記ができません。
    上に表記いただいているコードの「コンビニ払い」を「コンビニ決済」に変えたのですが(コメントアウトを除いて5件あると思うのですが、5件とも変えました)、order_payment_nameの一致とはどこと一致させるのでしょうか?
    ご教授いただければありたがいです。
    よろしくお願いします。

  6. まめきち より:

    こんにちは
    いつも参考にさせていただいております。感謝申し上げます。

    さて、管理画面からのメールは問題ないのですが、このままですと自動返信メールにはフックの名称が異なるので表示がされません。
    my_order_confirm_mail_meisaiは共通なので、以下の1行の追加が必要と思います。

    add_filter('usces_filter_send_order_mail_meisai','my_order_confirm_mail_meisai', 10, 3);

    既知のことでしたら、失礼をお許しください。

    • まめ子(管理人) より:

      ご指摘有難うございます。このようにカスタマイズ箇所が多いと抜けのある時も普通にありますので、お気づきになりましたらいつでもご教示下さいませ~!

  7. まめきち より:

    すみません。
    先日のコードですが、書き込む時にタグcodeを使わなかったので、シングルクォートになっていません。このままコピペしても使えないと思うのでお手数かけて申し訳ないのですが、直していただけませんか。よろしくお願いします。

    • まめ子(管理人) より:

      了解致しました。わざわざお気遣い有難うございますm(_ _)m

  8. wel より:

    いつも参考にさせていただいております.
    こちらの手数料項目変更カスタマイズにおいて、コンビニ決算の動作が出来ましたが、代引き手数料項目名をpaypal手数と名称を変えるだけは可能でしょうか?
    ご指南頂けるとありがたいです。

    • まめ子(管理人) より:

      そのままPaypalに当てはまるようにすれば、出来ると思いますよ。

Copyright© 2017 Welcart カスタマイズ ブログ All Rights Reserved.