Skip to content

UCP checkout 向け決済ハンドラの参考実装 (mock) #51

Description

@nanasess

概要

EC-CUBE 本体のエージェントコマース対応のうち、UCP (Universal Commerce Protocol) checkout における決済ハンドラの公開された参考実装 (mock) を本サンプルプラグインに用意する。

本体 (EC-CUBE/ec-cube) 側では、エージェント経由のチェックアウトをセッション/フォームに依存しない形で処理する基盤を実装しており、決済の具象は決済プラグイン側に置く設計になっている。本サンプルプラグインはダミーゲートウェイを持つため、実 PSP に依存しない UCP 決済ハンドラの参考実装として最適。

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 経由で CartOrder → shopping flow を再利用する。
  • したがって既存の CreditCard クラスを流用するのではなく、エージェント用ハンドラを新設し、既存の足回り (ダミーゲートウェイ・ConfigOrderTraitPaymentStatus 遷移・PurchaseFlow commit/rollback) を共有する。
  • 実 PSP SDK 不要 (mock)。eccube-api4 非依存 (UCP インバウンド認証は本体側で RFC 9421 署名により処理。決済ハンドラは認証と無関係)。

本体側の前提インターフェイス

やること

  • (前提) 本プラグインの 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 のみ扱う)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions