You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Shopware 6中订单的最新(实际)交易状态?

获取Shopware 6订单最新交易状态的正确方式

你的问题出在直接用first()获取交易时,无法保证拿到的是最新的交易记录——订单存在多笔交易(比如取消后重新发起支付)时,first()返回的可能是较早创建的交易,导致拿到过时的状态(比如示例中的Cancelled而非最终的Paid)。

解决思路就是按交易的createdAt字段倒序排序,取排序后的第一个交易,就能得到最新的交易状态,具体代码如下:

// 从订单中取出所有交易集合
$transactions = $order->get('transactions');

// 按createdAt倒序排序,确保最新的交易排在最前面
$sortedTransactions = $transactions->sort(function ($transactionA, $transactionB) {
    return $transactionB->getCreatedAt()->getTimestamp() - $transactionA->getCreatedAt()->getTimestamp();
});

// 获取最新交易的技术状态名称
$latestPaymentStatus = $sortedTransactions->first()->get('stateMachineState')->get('technicalName');

如果使用Shopware的集合扩展方法,也可以更简洁地实现:

$sortedTransactions = $transactions->orderBy('createdAt', 'DESC');
$latestPaymentStatus = $sortedTransactions->first()->get('stateMachineState')->get('technicalName');

这样就能确保获取到的是订单当前的实际交易状态,不会因为交易顺序问题拿到错误结果。

内容的提问来源于stack exchange,提问作者Stepan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:21:35