Architecture
Webhook events
The Adyen App implements the following Saleor sync webhooks related to transactions:
PAYMENT_GATEWAY_INITIALIZE_SESSION
TRANSACTION_INITIALIZE_SESSION
TRANSACTION_PROCESS_SESSION
TRANSACTION_CHARGE_REQUESTED
TRANSACTION_CANCEL_REQUESTED
TRANSACTION_REFUND_REQUESTED
Furthermore, it's also prepared to handle async Adyen webhooks.
The Adyen App follows the flow described in detail in the Saleor Payment App documentation.
Limitations
This section contains known limitations of this App.
Maximum timeout for Adyen calls is 15 seconds
Saleor synchronous webhooks have a maximum response time limit of 20 seconds. The app restricts the Adyen response time to 15 seconds to allow graceful error handling. If Adyen surpasses this limit, the App will return a FAILURE status with an appropriate error message (Timeout Error).
Maximum timeout for Saleor API calls is 5 seconds
The app restricts Saleor API response time to 5 seconds for TransactionInitializeSession
and TransactionProcessSession
subscriptions. If Saleor API surpasses this limit, the App will gracefully continue processing.
If such timeout happens, the created TransactionItem
will not have the metadata from Adyen on additionalDetails
object, which includes payment method type, credit card brand, etc.
Granted refunds vs manual refunds
There are differences in how refunds are handled depending on wether an OrderGrantedRefund
was created in Saleor and a refund via transactionRequestRefundForGrantedRefund
mutation was requested, or a "manual refund" sent via transactionRequestAction
mutation was requested. The differences is in how lineItems
are reported to Adyen
Manual refund
A manual refund is initiated using the transactionRequestAction
mutation.
When manual refund is requested, the app will send lineItems
to Adyen if the amount
is equal to or greater than Order's total gross amount.
In other cases app will not send lineItems
to Adyen.
Granted refund
Added in Saleor 3.15A granted refund is initiated using the transactionRequestRefundForGrantedRefund
mutation.
When granted refund is requested, app will map grantedRefund.lines.orderLines
to lineItems
reported to Adyen. Additionally, if grantedRefund.shippingCostIncluded
is set to true, the app will include a shipping line in the lineItems sent to Adyen.