I’m in the process of developing a payments application tailored for Shopify platforms, and I’ve encountered a specific issue that deviates from the expected functionality. While the majority of the app’s features operate seamlessly, there is a persistent challenge in the manual capture mode: orders that remain uncaptured indefinitely persist in an ‘Expiring’ state and do not transition to ‘Expired’, even after an extensive duration, notably exceeding a year.
The Shopify documentation on order statuses, accessible at https://help.shopify.com/en/manual/orders/manage-orders/order-status, suggests that orders should naturally progress to an ‘Expired’ state if the payment capture is not executed within the timeframe stipulated by the payment provider. This automatic transition is essential for our application, as it would enable our merchants to clearly discern that these uncaptured orders are beyond the capture window and can no longer be processed.
In an attempt to resolve this, I turned to the Payments App GraphQL API documentation, specifically the authorizationExpiresAt argument within the paymentSessionResolve mutation, which is detailed at https://shopify.dev/docs/api/payments-apps/2024-01/mutations/paymentSessionResolve#argument-authorizationexpiresat-authorizationexpiresat. Hoping this would be the key, I set the expiration to 30 minutes ahead, yet observed that the order status remained in the ‘Expiring’ state even after several hours had elapsed.
I am seeking insights on the correct implementation strategy to ensure that uncaptured orders are accurately marked as ‘Expired’ in our system. This clarity is crucial for our merchants to have a transparent understanding of the status of such orders, indicating that they are no longer eligible for payment capture. Could you provide guidance on the proper methodology to establish this expiration parameter effectively? Your expertise on this matter would be greatly appreciated.