shish пре 1 месец
родитељ
комит
71d93e8f72

+ 8 - 0
app-hd/controllers/PurchaseClearController.php

@@ -210,6 +210,10 @@ class PurchaseClearController extends BaseController
                 $order->orderSn = $newOrderSn;
                 $order->save();
                 OrderCgClearClass::updateClearSnByClearId($id, $newOrderSn);
+
+                // 将老单号与订单 ID 的映射存入 Redis,有效期 24 小时 (86400秒)
+                $redisKey = 'hd_clear_old_sn_map_' . $oldOrderSn;
+                Yii::$app->redis->executeCommand('SETEX', [$redisKey, 86400, $id]);
             }
             $order->changePrice = 2;
             $order->save();
@@ -349,6 +353,10 @@ class PurchaseClearController extends BaseController
                 $order->orderSn = $newOrderSn;
                 $order->save();
                 OrderCgClearClass::updateClearSnByClearId($order->id, $newOrderSn);
+
+                // 将老单号与订单 ID 的映射存入 Redis,有效期 24 小时 (86400秒)
+                $redisKey = 'hd_clear_old_sn_map_' . $oldOrderSn;
+                Yii::$app->redis->executeCommand('SETEX', [$redisKey, 86400, $order->id]);
             }
             $order->changePrice = 2;
             $order->save();

+ 17 - 0
biz-hd/purchase/classes/PurchaseClearClass.php

@@ -97,6 +97,16 @@ class PurchaseClearClass extends BaseClass
     public static function thirdPay($payWay, $orderSn, $totalFee, $attach, $transactionId)
     {
         $info = self::getByCondition(['orderSn' => $orderSn], true);
+        $isOldSnPay = false; // 标记是否使用了老单号支付
+        if (empty($info)) {
+            // 尝试从 Redis 读取老单号映射,防止用户支付了已失效的旧单号导致回调找不到订单
+            $redisKey = 'hd_clear_old_sn_map_' . $orderSn;
+            $orderId = Yii::$app->redis->executeCommand('GET', [$redisKey]);
+            if (!empty($orderId)) {
+                $info = self::getById($orderId);
+                $isOldSnPay = true; // 确认为老单号支付
+            }
+        }
         if (empty($info)) {
             $msg = "没有找到清算订单 orderSn:{$orderSn} {$attach}";
             noticeUtil::push($msg, '15280215347');
@@ -113,6 +123,13 @@ class PurchaseClearClass extends BaseClass
         //临时解决微信一秒内通知二次问题
         $id = $info->id;
         $info = self::getLockById($id);
+
+        // 如果是老单号支付,将数据库中的 orderSn 修正为实际支付的老单号,并同步更新关联表的 clearSn
+        if ($isOldSnPay) {
+            $info->orderSn = $orderSn;
+            OrderCgClearClass::updateClearSnByClearId($id, $orderSn);
+        }
+
         $info->payWay = $payWay;
         $info->onlinePay = dict::getDict('onlinePay', 'yes');
         $info->thirdNo = $transactionId;