3. Payment initiation

  1. The Participant initiates the payment transaction off-chain via a Web UI. The payment request is handled by a web server on the Participant’s node of the Corda business network and sent via Corda RPC to the custom Payment CorDapp installed on the Participant’s node.
  2. The Participant’s request is accepted by the CorDapp on the Participant’s node and is transformed to a payment instruction formatted according to the industry-accepted payment standard (ISO 20022 formatted XML representing a CustomerCreditTransferInitiation message) to be passed to Gevamu Payments SDK. Gevamu Payments SDK pre-validates the payment instruction and creates a state (or several states if multiple payments are instructed) with an attachment containing the original payment instruction. Every single payment gets it's own unique ID (UUID), which can be used to find it, if necessary.
  3. The payment instruction is sent to Gevamu Payments Gateway.
  4. The Gevamu Payments Gateway validates the payment instruction.
    The Payments Gateway checks if the Participant is authorized to submit this payment request, validating the payment instruction from the following aspects:
    • Node Identity – whether a payment request is received from the node that initially registered the Participant initiating the request.
    • Participant ID – whether the Participant is registered with the Payments network and if Participant ID is registered to the Participant’s node.
  5. If valid, the Payment Gateway sends the payment instruction to the external gateway of the PSP, updates the status of the payment instruction to Sent to Gateway and communicates it to the Participant.
    If not valid, a corresponding status is sent back to the Participant’s CorDapp.
  6. After the payment instruction is received by the PSP, it will return one of the following payment status:
    • Pending
    • Accepted
    • Rejected
  7. Once the PSP replies to the payment request, the returned payment status is propagated back to the Participant’s node. The updated status is made available as a new Corda state in the payment statuses chain.
    • The participant’s CorDapp may opt to subscribe to the payment state updates to be notified on Payment processing progress.
---
title: Initiate Payment
---
sequenceDiagram
    %% Participants
    participant pn as Participant Node
    participant gpg as Gevamu Payment Gateway
    participant psp as PSP/Bank

    pn ->> pn: Receive Payment instruction,  <br/> transform into ISO 20022 formatted XML
    pn ->> pn: SDK prevalidates XML

    %%prevalidation by SDK
    
    pn  ->>  pn: Create Corda state
    pn  ->> gpg: Payment request
    gpg ->> gpg: Validate payment request  <br/> (check node and Participant identity)

    %% after validation by Gateway

    gpg ->> psp: Payment instruction
    gpg ->> pn:  Update Corda state <br/> Payment Status: Sent to Gateway

    %% Pending Status by PSP
    alt PSP sets Payment status as Pending
    psp ->> gpg: Payment Status: Pending
    gpg ->> pn : Update Corda state <br/> Payment Status: Pending 
    
    %% Request has been processed by PSP 
    else PSP processes Payment Instruction
    psp ->> gpg: Payment Status: Accepted/Rejected
    gpg ->> pn : Update Corda state <br/> Payment Status: Accepted/Rejected 
    end
Mermaid diagram is loading...