EC-CUBE Lab
produced by Cajiya
EC-CUBEに関するカスタマイズ方法やトラブルへの対処方法を発信

ポイント付与を金額1,000円ごとの固定方式に変更するカスタマイズ方法

公開日: 2025年10月12日 | 更新日: 2025年11月03日
ポイント EC-CUBE 4系全般

要望や症状

EC-CUBEのデフォルト設定では、購入金額に対してポイント付与率(パーセンテージ)によってポイントが付与されます。しかし、この方式では「送料を除く購入金額(税抜)1,000円ごとに1ポイントを付与したい」といった固定ポイント付与方式を実現することができません。

デフォルトのポイント付与率設定画面では、あくまでも購入金額に対する割合でしかポイント計算ができず、また専用プラグインも見つからない状況です。このため、1,000円購入で1ポイント、2,000円購入で2ポイントといった金額区切りでの固定ポイント付与を行うには、カスタマイズが必要となります。

理由や原因

EC-CUBEのデフォルトポイント機能は、購入金額に対してパーセンテージベースでポイントを計算する仕組みになっているためです。金額区切りでの固定ポイント付与は標準機能に含まれていないため、PurchaseFlowのカスタマイズが必要となります。

ポイント付与処理は購入確定時のPurchaseFlowで実行されており、この部分をカスタマイズすることで任意の計算ロジックに変更することができます。

解決策

PurchaseFlowのポイント付与処理をカスタマイズして、1,000円ごとの固定ポイント付与方式に変更します。

カスタムポイント付与プロセッサーの作成

まず、独自のポイント付与ロジックを実装するプロセッサーを作成します。

// app/Customize/Service/PurchaseFlow/Processor/CustomPointProcessor.php
<?php

namespace Customize\Service\PurchaseFlow\Processor;

use Eccube\Annotation\CartFlow;
use Eccube\Annotation\ShoppingFlow;
use Eccube\Entity\ItemHolderInterface;
use Eccube\Entity\Order;
use Eccube\Service\PurchaseFlow\InvalidItemException;
use Eccube\Service\PurchaseFlow\ItemHolderPostValidator;
use Eccube\Service\PurchaseFlow\PurchaseContext;

/**
 * @CartFlow
 * @ShoppingFlow
 */
class CustomPointProcessor extends ItemHolderPostValidator
{
    public function validate(ItemHolderInterface $itemHolder, PurchaseContext $context)
    {
        if (!$itemHolder instanceof Order) {
            return;
        }

        // 送料を除く税抜き金額を計算
        $subtotalWithoutTax = $itemHolder->getSubtotal() - $itemHolder->getTax();
        
        // 1,000円ごとに1ポイント計算
        $points = intval($subtotalWithoutTax / 1000);
        
        // ポイント設定
        $itemHolder->setAddPoint($points);
    }
}

既存ポイントプロセッサーの無効化

デフォルトのポイント付与処理を無効化するため、サービス定義をオーバーライドします。

# app/Customize/Resource/config/services.yaml
services:
    # デフォルトポイントプロセッサーを無効化
    Eccube\Service\PurchaseFlow\Processor\PointProcessor:
        class: Customize\Service\PurchaseFlow\Processor\CustomPointProcessor
        tags:
            - { name: eccube.purchase_flow.cart }
            - { name: eccube.purchase_flow.shopping }

キャッシュクリア

設定を反映するために、キャッシュをクリアします。

bin/console cache:clear

動作確認

カスタマイズが正しく動作することを確認します。商品を1,000円分カートに追加して購入手続きを進め、確認画面で付与ポイントが「1ポイント」と表示されることを確認してください。同様に、2,500円の場合は「2ポイント」となることも確認できます。

より柔軟な設定について

さらに柔軟な設定を行いたい場合は、管理画面でポイント付与の基準金額や付与ポイント数を設定できるよう、設定エンティティとフォームを追加することも可能です。この場合は、管理画面でのカスタマイズも併せて行う必要があります。

免責事項

本記事に掲載しているコードや手順は、執筆時点での情報および特定の環境下での動作確認に基づいています。 EC-CUBEのバージョン、サーバー環境、導入済みプラグインとの競合などにより、予期せぬ不具合が発生する可能性があります。

本記事の内容を実行した結果、生じた損害(データの消失、サイトの停止、機会損失など)について、当サイトおよび管理者は一切の責任を負いかねます。 実装にあたっては、必ずバックアップを取得し、検証環境(テスト環境)での動作確認を行った上で、ご自身の責任において実施してください。

この記事は参考になりましたか?

著者プロフィール: 株式会社カジヤ

当社はWeb業界の専門家として、培った経験や技術、自社事業を通して得た知見を土台に、 お客様の事業の成長を後押しすることを提供価値として活動する、Web事業の成長支援会社です。 EC-CUBE公式のパートナー制度「EC-CUBE インテグレートパートナー」に登録してしており、上位11%にあたる「ゴールドランク」に認定された実績があり、新しい通販サイトの構築から、カスタマイズ、リニューアルまで幅広く対応します。

ポイント の関連記事

ポイント データ不整合 EC-CUBE 4系全般
商品の個別ポイント付与率が基本設定より優先される問題の解決方法

EC-CUBE 2系から移行したサイトで、管理画面の基本設定でポイント付与率を変更したにも関わらず、...

👍 0 / 👎 0 2025年09月24日
ポイント データ不整合 EC-CUBE 4系全般
EC-CUBE4系で特定の会員へ個別にポイント付与する方法

特定の会員に対して、購入履歴とは別に個別でポイントを付与したいという要望があります。 ### ...

👍 0 / 👎 0 2025年09月22日

EC-CUBE 4系全般 の関連記事

商品 データ不整合 EC-CUBE 4系全般
EC-CUBEで取り扱い終了商品の削除ができない理由と対応方法

EC-CUBEでは、取り扱いを終了した商品を削除したい場合に、削除ができない状態になることがあります...

👍 1 / 👎 0 2025年10月12日
インストール・セットアップ EC-CUBE 4系全般 設定変更
EC-CUBEサイトのドメイン変更時の設定変更方法

EC-CUBEで構築したサイトを新しいドメインで公開する際に、どのような設定変更が必要かわからない場...

👍 0 / 👎 0 2025年10月12日
メール通知 通知/コミュニケーション EC-CUBE 4系全般
メール件名のショップ名を英語表記に変更する方法

EC-CUBE 4系で、メール件名の先頭に自動挿入される店舗名を英語表記に変更したい場合があります。...

👍 0 / 👎 0 2025年10月12日
フロント共通 機能不動作 EC-CUBE 4系全般
CloudFrontを利用時にリンクのドメインがEC2のパブリックDNSになってしまう問題の解決方法

EC-CUBE 4.2をAWS ECS on EC2上で構築し、CloudFrontをCDNとして利...

👍 1 / 👎 0 2025年10月12日
サイト全体 500エラー EC-CUBE 4系全般
EC-CUBEでメモリ不足エラーが発生した場合の対処方法

EC-CUBEの運用中に以下のようなメモリ不足エラーが発生することがあります。 ### エラー...

👍 1 / 👎 0 2025年10月12日