EC-CUBEに定期購読(継続課金)機能を追加する。
予めまとめてお金を払っておいて、雑誌が発行される度に郵送で送られてくるものです。
今日はこの定期購読をEC-CUBEをカスタマイズして実現する際の手順について書きます。
定期購読をショッピングサイト(EC-CUBE)で実現する場合、その顧客がどの商品をどれくらいの期間購読している(支払い済み)なのかをデータとして持っている必要があります。
また商品の属性として「定期購読商品」という属性と「購読期間」という属性が必要になります。
また、代金の支払いに関しても、「一括前払い」「毎月自動課金」などがあります。
「一括前払い」であればあまり問題はありませんが、携帯の公式サイトの様に毎月定額を課金するとなると、少しハードルが上がります。
銀行引き落としの場合は、お客様に引き落とし手続きを行って頂く(書類への記入捺印)必要があり、かつ運営者側も銀行への手続きが必要になり、小額商品の場合現実的ではありませんます。
こういった場合、各決済代行会社が提供しているクレジットカード決済の「洗替」というサービスを利用します。
これは決済代行会社が毎月まとめてオーソリ(枠確認)を行い、まとめて決済してくれるものです。
具体的には継続課金をしている顧客のリストと決済金額のリストを決済代行会社の管理画面からアップロードしてまとめて処理します。
この洗替の良いところは、一定金額を保障してもらえる点です。
通常のクレジットカード決済では枠が足りずに決済出来ないタイミングであったとしても決済が可能な事です。
これによりスムーズな決済が毎月でき、確実に代金を回収出来ます。
これらの機能をEC-CUBEで実現する場合、通常のEC-CUBE公式決済モジュールの追加とは別に洗替用のプログラムを追加する必要があります。
また、毎月の処理業務を軽減する為に、洗替リストの自動抽出機能を追加します。
EC-CUBEをカスタマイズする際の具体的な作業概要としては、以下の通りです
データベースに項目追加
- dtb_products、dtb_order、dtb_order_detailに「定期商品フラグ」と「購読期間」、「課金形態」カラムを追加します。
- データベースがPostgreSQLの場合、「vw_」で始まる商品データのviewの定義に追加したカラムを追加します。
商品登録プログラム、テンプレートを編集。
購入処理、テンプレートを編集
- /data/class/pages/shopping/以下の、LC_Page_Shopping_Payment.php、LC_Page_Shopping_Confirm.phpに追加したカラムを処理に追加します。
- LC_Page_Shopping_Payment.phpでは継続課金商品の有無によって処理を振り分けます。
- カート内に継続課金商品があるかどうかをチェックする関数も追加します。
- /data/class/pages/shopping/以下の、LC_Page_Shopping_Complete.phpに、定期購読商品の受注確定処理を追加します。
- 定期購読商品があるかどうかのチェック関数を追加し、あった場合の処理を分岐させます。
- 定期購読商品があった場合、受注情報を通常商品と定期購読商品の2つに分け登録します。
- /data/Smarty/template/default/shopping/以下のファイルに追加した項目を追加します。また、定期課金処理
※洗替処理については決済代行会社によってカスタマイズ内容が変わってきますので省略します。
受注管理を編集
- /data/class/pages/admin/order/以下の既存ファイルに定期購読商品の受注情報を除外する処理を追加します。
- /data/class/pages/admin/order/以下のファイルを丸ごとコピーして定期購読商品の受注情報のみを表示、編集する様に変更します。
- /html/admin/order/以下のindex.php以外のファイルをコピーしてファイル名を変更(頭にteiki_とか付けます)。作成したファイルで呼び出すクラスファイルを上記で作成した定期購読商品用のクラスファイルを呼び出す様に変更します。
- /data/Smarty/templates/default/admin/order/subnavi.tplに定期購読商品受注用のメニュー項目を追加します。
- /data/Smarty/templates/default/admin/order/以下のsubnavi.tpl以外のファイルをコピーし、定期購読関連の項目を表示、編集する様に追加。上記で作成した定期購読商品用のクラスファイルで呼び出します。
- 月一回のタイミングで実行するバッチファイルを作成します。
- 受注ステータス、購読期間が該当する受注情報を検索し、対象レコードを受注日等を変更してコピーします。
上記以外にもエラー処理や課金状態での処理の分岐等、細かい作業は多々ありますが、大雑把に書くとこんな感じです。
また、商品の特性や運用側の運用フローに合わせる場合も管理画面や支払い方法の登録画面の作り方も変わってきます。
物販以外でも、コンテンツ販売サイト等でも活用できるのではないでしょうか?
機会があれば是非チャレンジしてみてください。