如何获取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
相关产品推荐
相关产品推荐

