如何解决 WooCommerce 虎皮椒微信支付插件重复状态更新问题

by

zhipeng

在我们的 WooCommerce 网站中,使用虎皮椒微信支付插件时,遇到了订单状态重复更新的问题。具体表现为订单状态在后台的“订单备注”中显示多次 处理中已完成 状态,并且每次支付完成时,都会记录多条微信支付成功的备注。

问题描述

在支付过程中,订单的状态多次更新,特别是微信支付完成后,订单状态显示:

  1. “正在处理” -> 已完成 记录重复。
  2. 同时出现多个微信支付成功的备注条目。

从截图中可以看到,多个支付成功的记录出现在同一个订单上,造成了重复的状态更新和日志记录。

问题根源分析

根据我们对虎皮椒插件的代码审查,问题的根源主要是并发调用造成的。尤其在以下两个场景下:

  1. 异步通知:微信支付平台会向 WooCommerce 服务器发送异步支付完成通知。每次收到通知时,都会触发 payment_complete(),将订单状态更新为已完成。
  2. 查询订单接口:同时,插件会每隔几秒轮询检查订单状态,发现支付完成后也会调用 payment_complete()

这导致了多次调用 payment_complete(),进而引发了多个订单状态更新。

解决方案

为了解决这一问题,我们采取了以下几个措施:

  1. 引入订单锁机制
    为了防止多个操作同时修改同一订单的状态,我们引入了订单锁机制。通过确保每次只有一个操作可以更改订单状态,避免了并发冲突。
  2. 加强状态判断
    在更新订单状态时,我们增加了更严格的判断逻辑。只有在订单尚未完成的情况下,才会触发状态更新。这样确保每个订单的状态变化是唯一的。
  3. 优化日志记录
    我们对支付流程中的每个环节都进行了详细的日志记录。通过记录每次状态更新,我们可以轻松地追踪到哪个环节发生了问题,帮助我们及时发现并解决问题。

最终效果

实施这些措施后,订单状态不再重复更新。每次支付完成时,订单状态准确地标记为“已完成”,且支付成功的备注只会记录一次。这样,我们的支付流程变得更加稳定和清晰。

相关文章

发表评论