EC-CUBE / EC-CUBE/sample-payment-plugin
UCP checkout 向け決済ハンドラの参考実装 (mock)
- Dominant language
- PHP
- Stars
- 32
- Forks
- 14
- PR merge metrics
- No merged PRs in 30d
Description
## 概要
EC-CUBE 本体のエージェントコマース対応のうち、**UCP (Universal Commerce Protocol) checkout** における決済ハンドラの**公開された参考実装 (mock)** を本サンプルプラグインに用意する。
本体 (EC-CUBE/ec-cube) 側では、エージェント経由のチェックアウトをセッション/フォームに依存しない形で処理する基盤を実装しており、決済の具象は決済プラグイン側に置く設計になっている。本サンプルプラグインはダミーゲートウェイを持つため、実 PSP に依存しない **UCP 決済ハンドラの参考実装**として最適。
- 本体トラッキング: EC-CUBE/ec-cube#6574 (UCP checkout) / 共通基盤 EC-CUBE/ec-cube#6777
- 関連 (ACP 版): #52
> [!NOTE]
> **前提: 本サンプルプラグインの EC-CUBE 4.4 (Symfony 7 / PHP 8.2+ / Doctrine ORM 3 / attribute マッピング) 対応が必要。**
> 現状の `support-4.3` ブランチはアノテーションマッピング (`@ORM\...`) で、Doctrine ORM 3.x (`doctrine/annotations` 非同梱) の 4.4 ではエンティティをロードできない。4.4 対応は別途予定のため、本 issue の実装は 4.4 対応ブランチ上で行う。
## 設計方針
- エージェント決済は web の `PaymentMethodInterface` フロー (`verify()`/`apply()`/`checkout()` + form/twig/session/redirect) を**使わない**。本体は `Eccube\Service\AgentCommerce\AgentCheckoutPurchaseFlowAdapter` 経由で `Cart` → `Order` → shopping flow を再利用する。
- したがって既存の `CreditCard` クラスを流用するのではなく、**エージェント用ハンドラを新設**し、既存の足回り (ダミーゲートウェイ・`Config`・`OrderTrait`・`PaymentStatus` 遷移・`PurchaseFlow` commit/rollback) を共有する。
- 実 PSP SDK 不要 (mock)。**eccube-api4 非依存** (UCP インバウンド認証は本体側で RFC 9421 署名により処理。決済ハンドラは認証と無関係)。
## 本体側の前提インターフェイス
- 共通基底 `Eccube\Service\AgentCommerce\Payment\AgentCheckoutPaymentHandlerInterface` (`authorize()` / `capture()` / `supports()`) — EC-CUBE/ec-cube#6777 Phase 1b (PR #6825) で実装済。
- UCP 派生インターフェイス `UcpPaymentHandlerInterface` (token exchange 相当の `exchangePaymentToken()` を追加) — 本体 EC-CUBE/ec-cube#6574 で定義予定。
## やること
- [ ] (前提) 本プラグインの EC-CUBE 4.4 対応ブランチ上で作業する
- [ ] `UcpPaymentHandlerInterface` を実装する **mock ハンドラ**を追加 (token exchange を擬似実行 → authorize/capture → `PaymentStatus` 遷移 → `PurchaseFlow::commit()`、失敗時 rollback)
- [ ] tagged service として登録し、本体 UCP discovery の `payment_handlers` (逆ドメイン名キーのレジストリ) へ寄与
- [ ] `Config` にエージェント決済用のダミー設定 (エンドポイント/キー等) を必要に応じて追加
- [ ] `OrderTrait` に UCP 決済トークン/認可 ID 等の保持フィールドを必要に応じて追加
- [ ] mock ハンドラの単体テスト (authorize/capture 成功・失敗、在庫超過等のビジネス系結果)
- [ ] (4.4 対応後) E2E テスト
## スコープ外
- 実 PSP との接続・本番決済 (本 issue は mock 参考実装に限定)
- 特定 PSP の内部仕様 (公開可能な汎用 mock のみ扱う)
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.