銀行支払いの場合は購入処理後に「新規受付」→「入金待ち」になるように変更する。
このカスタマイズは一例になります。
プラグインによっては、うまく胃開かない可能性があるのでご「注意ください。
もっと良いカスタマイズ方法があれば、コメントください。
こんにちは!@vVv_kenshi_vVvです!
購入フローの確認
購入フローは、使用する複数クラスで構成されています。
購入フローの設定は基本的に下記ファイルで行ってます。
ファイルパス:eccube/app/config/eccube/packages/purchaseflow.yaml
詳細は公式のドキュメントを確認ください。
OrderUpdateProcessorの確認
通常の購入フローで「新規受付」に変更しているのは、こちらのファイルです。
ファイルパス:eccube/src/Eccube/Service/PurchaseFlow/Processor/OrderUpdateProcessor.php
PHP
<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
*
* http://www.ec-cube.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Eccube\Service\PurchaseFlow\Processor;
use Eccube\Entity\ItemHolderInterface;
use Eccube\Entity\Master\OrderStatus;
use Eccube\Entity\Order;
use Eccube\Repository\Master\OrderStatusRepository;
use Eccube\Service\PurchaseFlow\PurchaseContext;
/**
* 受注情報更新処理.
*/
class OrderUpdateProcessor extends AbstractPurchaseProcessor
{
/**
* @var OrderStatusRepository
*/
private $orderStatusRepository;
/**
* OrderUpdateProcessor constructor.
*
* @param OrderStatusRepository $orderStatusRepository
*/
public function __construct(OrderStatusRepository $orderStatusRepository)
{
$this->orderStatusRepository = $orderStatusRepository;
}
public function commit(ItemHolderInterface $target, PurchaseContext $context)
{
if (!$target instanceof Order) {
return;
}
$OrderStatus = $this->orderStatusRepository->find(OrderStatus::NEW);
$target->setOrderStatus($OrderStatus);
$target->setOrderDate(new \DateTime());
}
}
OrderUpdateProcessorの作成
本体の「OrderUpdateProcessor」をコピーしCustomizeでカスタマイズ
Payment::BANK_PAYMENTは、別途拡張して定数を追加したます。
PAID_WAIT_STATUSを配列にする事で、銀行振込以外でも入金待ちにしたい支払い方法追加可能としました。
PHP
<?php
namespace Customize\Service\PurchaseFlow\Processor;
use Eccube\Service\PurchaseFlow\Processor\AbstractPurchaseProcessor;
use Eccube\Entity\ItemHolderInterface;
use Customize\Entity\Master\OrderStatus;
use Customize\Entity\Payment;
use Eccube\Entity\Order;
use Eccube\Repository\Master\OrderStatusRepository;
use Eccube\Service\PurchaseFlow\PurchaseContext;
/**
* 受注情報更新処理.
*/
class OrderUpdateProcessor extends AbstractPurchaseProcessor
{
// 入金待ちにする注文ステータス
const PAID_WAIT_STATUS = [
Payment::BANK_PAYMENT,
];
/**
* @var OrderStatusRepository
*/
private $orderStatusRepository;
/**
* OrderUpdateProcessor constructor.
*
* @param OrderStatusRepository $orderStatusRepository
*/
public function __construct(OrderStatusRepository $orderStatusRepository)
{
$this->orderStatusRepository = $orderStatusRepository;
}
public function commit(ItemHolderInterface $target, PurchaseContext $context)
{
if (!$target instanceof Order) {
return;
}
$Payment = $target->getPayment();
// 支払い方法により、ステータスを変更する
if (in_array($Payment->getId(), self::PAID_WAIT_STATUS, true)) {
$OrderStatus = $this->orderStatusRepository->find(OrderStatus::PAID_WAIT);
} else {
$OrderStatus = $this->orderStatusRepository->find(OrderStatus::NEW);
}
$target->setOrderStatus($OrderStatus);
$target->setOrderDate(new \DateTime());
}
}
PurchaseFlowの設定変更
カスタマイズした「OrderUpdateProcessor」を読み込むように変更
Bash
services:
# Purchase Flow for Cart
eccube.purchase.flow.shopping.purchase:
class: Doctrine\Common\Collections\ArrayCollection
arguments:
- #
- '@Eccube\Service\PurchaseFlow\Processor\PreOrderIdValidator'
- '@Eccube\Service\PurchaseFlow\Processor\PointProcessor'
- '@Eccube\Service\PurchaseFlow\Processor\StockReduceProcessor'
- '@Eccube\Service\PurchaseFlow\Processor\CustomerPurchaseInfoProcessor'
# - '@Eccube\Service\PurchaseFlow\Processor\OrderUpdateProcessor'
# 支払い方法で初回ステータスを変更できるようカスタマイズ
- '@Customize\Service\PurchaseFlow\Processor\OrderUpdateProcessor'