首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >付款交易适用于订购软件6的错误付款方法

付款交易适用于订购软件6的错误付款方法
EN

Stack Overflow用户
提问于 2022-09-24 12:24:27
回答 2查看 103关注 0票数 2

我注意到了Shopware与实际(最后)付款方式订单的奇怪行为,用户选择了这种方式并进行了付款。因此,也许有人可以向我解释它是如何工作的,因为现在我的集成插件(ERP,附属服务)有很多缺陷和瓶颈。因此,让我们开始吧(我们的目标是接收客户上次选择的last=actual支付方法):

  1. 在数据库中我们有表order。有id 0d624ffae665466db51f12eba0c1bc53的顺序。我能从这里得到关于最后一次付款和实际付款方式的信息吗?我想没有因为我没找到。好的,我们进入下一步,

  1. ,我们移到另一个表order_transaction。万岁!在这里,我发现所有的付款方法,客户使用时,他/她试图支付订单。好的,我们这里有

代码语言:javascript
运行
复制
id                                  order_id                          | created_at | updated_at
83042D493DC04A4290BE8D7F523DE32F    0D624FFAE665466DB51F12EBA0C1BC53  | 2022-08-25 09:04:38.474 |   2022-09-24 11:11:19.664
911DF5D15BC542E598C2F11AECDAFD61    0D624FFAE665466DB51F12EBA0C1BC53  | 2022-08-25 09:06:27.775 |   NULL

好的!根据我的逻辑,上一次在表中创建的付款方法是用户选择最后一次支付的方法。因此,我们在这里,我们找到了实际(最后)支付方法,用户选择并与此订单进行交易,它是911DF5D15BC542E598C2F11AECDAFD61 (因为它是在比83042D493DC04A4290BE8D7F523DE32F晚2分钟创建的。

现在,我的ERP系统或我想改变支付状态,因为它是邮政支付。客户支付了它,现在我们已经准备好将状态从Open更改为Paid。好的,我已经做过了,让我们看看发生了什么,数据库。我们的旅程转移到名为state_machine_history的新表。好的,让我们尝试使用最后一个事务id 911DF5D15BC542E598C2F11AECDAFD61找到我们的订单,现在我们就到了。

不幸的是我们什么也没找到。好了,振作起来!让我们尝试使用另一种支付方法83042D493DC04A4290BE8D7F523DE32F

是的,我们找到了7行(见截图)

所以我们所拥有的支付状态在错误的支付方法上被改变了,但是应该在最后的方法上被改变!现在我有很多问题,因为我的插件不能获得正确的支付状态为oder。也许我不明白该怎么做?如果有人能解释我这点,那就太好了。我的目标:我的插件应该得到正确的支付状态和正确的支付方式。现在我收到了错误的状态,当我使用类似这样的smth时,我们提到了here

代码语言:javascript
运行
复制
        $criteria
            ->addFilter(
                new EqualsFilter(
                    'orderNumber',
                    $orderNumber)
            )
            ->addAssociation('stateMachineState')
            ->getAssociation('transactions')
            ->addSorting(new FieldSorting('createdAt'));

        $order = $this->orderRepository->search($criteria, $context)->first();

更新:我已通过管理面板(http://url.com/admin)手动更改支付状态。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-25 16:17:10

ERP集成(Xentral shop模块)中存在的问题是:采用错误的付款方式获取订单,然后在错误的支付方式下改变付款状态。

谢谢你。您和您的comment帮助我修复它(only修复了Shopware中的Shopware)。所做的工作:

  1. 将手动支付状态更改为已取消(或失败)
  2. ,将支付状态更改为已支付(或其他您需要的)。在本例中,Shopware开始使用此代码

,并设置付款状态以维持用户选择的(实际)支付方法。

代码语言:javascript
运行
复制
// module/sw-order/view/sw-order-detail-details/index.js
transaction() {
    for (let i = 0; i < this.order.transactions.length; i += 1) {
        if (!['cancelled', 'failed'].includes(this.order.transactions[i].stateMachineState.technicalName)) {
            return this.order.transactions[i];
        }
    }
    return this.order.transactions.last();
}
票数 0
EN

Stack Overflow用户

发布于 2022-09-24 15:07:40

实例化FieldSorting时,您忽略了第二个参数。第二个参数是排序的方向,默认情况下它是上升的。因此,您现在实际上正在用最古老的创建日期来分割条目。你应该往降的方向排序:

代码语言:javascript
运行
复制
new FieldSorting('createdAt', FieldSorting::DESCENDING)

要么这样做,要么从集合中获取最后一个条目,而不是:

代码语言:javascript
运行
复制
$transaction = $order->getTransactions()->last();

您提到的另一件事是,当您在管理中更改事务状态时,似乎更改了错误的状态。

这是返回用于转换的事务的计算属性:

代码语言:javascript
运行
复制
// module/sw-order/view/sw-order-detail-details/index.js
transaction() {
    for (let i = 0; i < this.order.transactions.length; i += 1) {
        if (!['cancelled', 'failed'].includes(this.order.transactions[i].stateMachineState.technicalName)) {
            return this.order.transactions[i];
        }
    }
    return this.order.transactions.last();
}

注意,返回的第一个事务没有状态cancelledfailed,除非它是唯一的事务。因为这实际上是order_transaction中对于单个订单应该有多个条目的唯一情况。也就是说,当客户的付款失败或被取消时,他们决定使用不同的支付方法。这就是两种不同的支付方法的两个交易结束的时候,但是其中之一应该总是状态cancelledfailed。如果您最终得到了多个事务,但事实并非如此,那么问题就出了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73837195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档