Payment processing begins when Shopify makes an HTTP call to your payments app, then your payments app communicates the result asynchronously back to Shopify by using one of our GraphQL mutations. The payment processing ends when the payment is finalized by using the paymentSessionResolve or paymentSessionReject mutation, indicating whether the payment was successful. Once you call either of these mutations, the payment state is final and can't be changed.

Payment processing relies on idempotent asynchronous communications over HTTP between Shopify and the payments app. It is crucial that your payments app supports a robust communication strategy by implementing a proper idempotency and retry policy strategy.