@startuml !include theme.puml title Payment Integration - two-step flow skinparam SequenceBoxBorderColor # hide footbox participant Storefront #555 box "Vendure Server" #Lightblue participant "Shop API" as ShopAPI participant "Admin API" as AdminAPI participant PaymentMethodHandler end box participant "Payment Provider" as PaymentProvider #39a4ac Storefront -> ShopAPI: **addPaymentToOrder**\nmutation ShopAPI -> PaymentMethodHandler++ PaymentMethodHandler -> PaymentProvider: **createPayment()** note right: The Payment Provider\n**authorizes** the payment PaymentProvider --> PaymentMethodHandler: Transaction ID PaymentMethodHandler --> ShopAPI: creates new **Payment**\nfor the Order deactivate PaymentMethodHandler ShopAPI --> Storefront: Order in\n**PaymentAuthorized** state == Second step done via Admin UI / Admin API == AdminAPI -> PaymentMethodHandler: **settlePayment** mutation PaymentMethodHandler -> PaymentProvider: **settlePayment()** note right: The Payment Provider\n**captures** the payment PaymentProvider --> PaymentMethodHandler: Confirmation data PaymentMethodHandler --> AdminAPI: Order in\n**PaymentSettled** state @enduml