Preauthorized Payments
The payment token retrieved from the wallet provider can be used to initiate preauthorized wallet transactions over the Stitch API. The initiateTransaction API call is used to authorize an initial amount on the user's card.
A subsequent continueTransaction API call is used to capture an amount not exceeding the original authorization. Transactions can be automatically voided or manually cancelled using the cancelTransaction API.
An initial validateApplePayMerchant or verifySamsungPay API request is still applicable for web integrations. The subsequent authorisation and capture (or void) flow is identical across both integration shapes.
Preauthorization
To preauthorize a wallet payment Stitch API initiateTransaction mutation call is required in order to initiate the payment. The mutation must be called in the server-side payment creation API routes for each wallet provider.
The input variable object must be constructed distinctly for each wallet provider.
The following fields are required in addition to the variables specified for standard once-off payments.
- The
paymentMethods.<payment-method>.preAuthorization.enabledfield must be set totrue. - The
voidAtfield optionally specifies the datetime at which the preauthorization should be voided.
The fingerprint argument supplied to the create payment callback on the client side should be specified in the deviceInformation.fingerprint field. If this is unable to be provided, other fields within the deviceInformation object are required, including all of deviceId, ip and screenDimensions.
- Apple Pay
- Samsung Pay
- Google Pay
- The payment token must be Base64-encoded.
- The Apple Pay token is a JavaScript object.
- The Google Pay token is a serialized object. For Apple Pay and Google Pay payments, the payment token must be Base64-encoded. The Apple Pay payment token is a JavaScript object and is a serialised object for Google Pay.
Completion
To capture the preauthorized amount and complete a transaction, use the continueTransaction API. The continueTransaction API call requires a client token with the scope transaction_initiate.
- The
idfield must contain the transaction ID returned in theinitiateTransactionAPI response. - The
amountfield specifies the final amount to capture, up to the preauthorized value.
The capture amount in the continueTransaction API call must not exceed the original amount that was preauthorized in the initiateTransaction call. Attempting to capture an amount greater than that which was preauthorized will result in an API error being returned.
Cancellation
To cancel a transaction manually and void the initial authorization, use the cancelTransaction API. The cancelTransaction API call requires a client token with the scope transaction_cancel.
- Transactions are cancelled by default after 72 hours.
- A default
voidAtfor all transaction can be configured on your client. - If the
voidAtfield has been specified in theinitiateTransactionAPI call, then manually cancelling the transaction is not required, but can be actioned before the duration has elapsed.
Transaction Statuses
The table below describes the possible statuses for a transaction:
| Status | Description |
|---|---|
| TransactionPending | The transaction has been initiated, but an interaction is required for the transaction to be successfully completed. An associated reason will be returned with this status e.g. waitingForCapture if the payment is awaiting capture. |
| TransactionSuccess | The transaction has been successfully completed, and user's card has been charged. |
| TransactionFailure | The transaction failed to be charged on the user's card. An associated reason will be returned with this status. |
| TransactionCancelled | The transaction has been cancelled automatically or manually, and the preauthorization has been successfully voided. |
Querying Transactions
Transaction by ID
For implementing redundancy checks and logic, it is possible to query transaction statuses and details over the Stitch GraphQL API. Note that querying with the Stitch-provided id is the most performant, and the recommended approach.
Transaction by External Reference
Alternatively, querying by an externalReference is possible, and may be done with a filtering query, as follows:
Use the SamsungPayTransaction or GooglePayTransaction to query fields specific to Samsung Pay or Google Pay wallet payments. As an example, a query for an Apple Pay payment is shown.
Webhook Subscriptions
Wallet payments require that you subscribe to transaction webhooks to receive asynchronous updates on transaction status changes.
If the subscription is successfully created, the body returned by the request will look similar to the sample in the Example Response
tab in the widget above.
The webhook will contain important information regarding the transaction, including the selected wallet provider, the transaction retrieval reference number (RRN) (used for reconcilliation), external reference, and nonce.
For more information on receiving webhook events, listing active webhook subscriptions, unsubscribing from webhooks and validating signed webhook subscriptions, please visit the Webhooks page.
Webhook Statuses
When subscribed to the transaction webhook filter type, webhook updates will be sent whenever a transaction is updated to either of the following statuses:
TransactionSuccessTransactionFailureTransactionCancelled