Amazon Pay与Adobe Commerce无头集成:调用CompleteCheckoutSession GraphQL报InvalidCheckoutSessionStatus错
Amazon Pay + Adobe Commerce (无头GraphQL) InvalidCheckoutSessionStatus 422错误排查方案
问题场景
使用Amazon Pay 5.14.1版本与Adobe Commerce无头GraphQL架构集成,流程如下:
- 跳转至Amazon页面完成登录、配送地址选择、支付信息确认
- 重定向回Magento结算页面后,配送地址和支付方式已自动填充
- 点击“下单”调用
completeCheckoutSessionGraphQL端点时,返回错误:
{ "reasonCode": "InvalidCheckoutSessionStatus", "message": "You tried to call an operation on a Checkout Session that is in a state where that operation is not allowed", "status": 422 }
订单被取消,错误触发点在Amazon\Pay\Model\CheckoutSessionManagement类的completeCheckoutSession方法。
排查与解决步骤
1. 确认Checkout Session状态流转合规性
Amazon Pay Checkout Session有严格的状态机约束,仅特定状态下允许调用complete操作:
- 在
Amazon\Pay\Model\CheckoutSessionManagement::completeCheckoutSession方法中添加日志,调用Amazon Pay的Get Checkout Session API获取当前session的实时状态,对比官方状态机规则,确认是否处于可调用complete的状态(通常需为Open或PaymentSelected状态)。 - 排查是否存在session被提前标记为
Completed/Canceled的情况(比如重定向回调中误触发了complete操作)。
2. 检查重定向回调的session处理逻辑
从Amazon重定向回Magento的回调(对应Amazon\Pay\Controller\Checkout\ReturnAction)是状态变更的关键节点:
- 确认回调仅同步Amazon端的配送地址、支付方式到Magento Quote,未提前调用Amazon Pay的Complete Checkout Session API。
- 验证回调中是否正确更新了本地session的状态,避免本地状态与Amazon端不一致。
3. 核对GraphQL请求参数有效性
- 确认调用
completeCheckoutSession时传入的checkoutSessionId为当前会话的有效ID,未使用过期或已处理的session ID。 - 检查请求中的
storeId是否与当前店铺匹配,用户上下文(如customer session)是否保持连续,避免因会话丢失导致session状态校验失败。
4. 验证Amazon Pay配置与API权限
- 确认Adobe Commerce中Amazon Pay的沙箱/生产环境配置与商户账户一致,未混用不同环境的API密钥、商户ID。
- 检查Amazon Pay商户账户的API权限,确保允许调用
Complete Checkout Session接口;同时验证Webhook配置是否正常,是否能实时接收session状态变更通知,避免本地状态滞后。
5. 排查Magento Quote与订单前置状态
- 在调用
completeCheckoutSession前,确认Magento Quote未被锁定、未转换为订单,且所有结算前置步骤(配送方式验证、税费计算、优惠券校验等)已完成无错误。 - 检查是否有第三方扩展(如订单管理、风控类)干扰了Quote或Amazon Session的状态。
内容的提问来源于stack exchange,提问作者Amit Sankhala
相关产品推荐
相关产品推荐

