Ver código fonte

商城重复通知解决

shish 3 anos atrás
pai
commit
3394ca1e35
1 arquivos alterados com 25 adições e 18 exclusões
  1. 25 18
      app-mall/controllers/NoticeController.php

+ 25 - 18
app-mall/controllers/NoticeController.php

@@ -116,26 +116,33 @@ class NoticeController extends PublicController
             payUtil::thirdPay($wxPay, $capitalType, $orderSn, $totalFee, $attach, $transactionId);
             $transaction->commit();
 
-            //打印小票和语音播报
-            $order = OrderClass::getByCondition(['orderSn' => $orderSn], true);
-            ShopExtClass::hdGatheringReport($order);
-            OrderClass::onlinePrint($order);
+            echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
 
-            $shopId = $order->shopId ?? 0;
-            $shop = ShopClass::getById($shopId, true);
-            if (in_array($order->fromType, [dict::getDict("fromType", "shop"), dict::getDict("fromType", "friend")])) {
-                //您有新的收入提醒
-                WxMessageClass::gatheringIncomeInform($shop, $order);
-            }
-            if ($order->fromType == dict::getDict("fromType", "mall")) {
-                //来自商城的新订单微信通知
-                WxMessageClass::hdNewOrderInform($shop, $order);
-            }
+            //解决重复通知
+            $cacheKey = 'mall_order_pay_' . $orderSn;
+            $has = Yii::$app->redis->executeCommand('GET', [$cacheKey]);
+            if (empty($has)) {
+                Yii::$app->redis->executeCommand('SETEX', [$cacheKey, 300, 'has']);
 
-            $shopExt = ShopExtClass::getByCondition(['shopId' => $shopId], true);
-            ShopExtClass::newWorkRemind($shopExt, $order);
+                //打印小票和语音播报
+                $order = OrderClass::getByCondition(['orderSn' => $orderSn], true);
+                ShopExtClass::hdGatheringReport($order);
+                OrderClass::onlinePrint($order);
 
-            echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
+                $shopId = $order->shopId ?? 0;
+                $shop = ShopClass::getById($shopId, true);
+                if (in_array($order->fromType, [dict::getDict("fromType", "shop"), dict::getDict("fromType", "friend")])) {
+                    //您有新的收入提醒
+                    WxMessageClass::gatheringIncomeInform($shop, $order);
+                }
+                if ($order->fromType == dict::getDict("fromType", "mall")) {
+                    //来自商城的新订单微信通知
+                    WxMessageClass::hdNewOrderInform($shop, $order);
+                }
+
+                $shopExt = ShopExtClass::getByCondition(['shopId' => $shopId], true);
+                ShopExtClass::newWorkRemind($shopExt, $order);
+            }
         } catch (\Exception $e) {
             $transaction->rollBack();
             Yii::error("失败原因:" . $e->getMessage());
@@ -150,7 +157,7 @@ class NoticeController extends PublicController
         //商户订单号
         $orderSn = $_POST['out_trade_no'];
 
-        $order = OrderClass::getByCondition(['orderSn'=>$orderSn], true);
+        $order = OrderClass::getByCondition(['orderSn' => $orderSn], true);
 
         $aliPId = '2021003122664465';
         $aliKey = 'MIIEpAIBAAKCAQEAnefrChYa5FUbGTlZNMTDNG531WrVP+TBPw3/hSmycRlBE/1sg9EryM0S3a9OQKQenRdYOoalqkkBuzt41ygJUC5hfNeaiV2OzphIiAyxUaiL1mSftP5B8joBN3HGG2AKbcvKlWcFoeiGY4ZmV/K0t3fqj/uPP6N/pEtnx6X4Ifgz4WGCDKUXKqT1Pyk2rqyIpel2EYk+HtC+9iicfac9kKQQiksDopb7sYosttdk64Dmjp2nMLDSpR+KOZUaqB39MEeHcJGeTzdVrp+Z9wW/NcJzSkSUb9juA0YjmogdbiKltykVHTbP6J0uPyByvzfyyY22QPqwNPiIPbCN6H543QIDAQABAoIBAQCO0+rOecYjSDO1siDVUTC8KTutR+/R1klRjojUWy3zjQNHYJAZ/0ZaX9wzttDSOWETeL0uWwJYL6coQxf/jVA3PWyirqYyn/R/PFFG9iwhj5HE/8lRvjXKMttM2lV2B34HaDE6yC/ZDmkYdsX1wSvjU81QJRuiVXIsGqSpep8hoVvVAn5sjvoC+zBSUaCsYy+7v7IXc6L8f/oLCBXY1r5j/+F/XFU1uFv4j162eRShQs6jQyVqQGLGCy4sSujj+8mpd6uCyJSIGJQHJlaN6cibTYStU/Z9+I/AP/+wQPVx31OwEC5J2xBfSHsezMsHSF7HQnfpQSz5AsOYZ3MOkiglAoGBAPV8sZz3C1gQ6WX5eKZE7PEUSxvAHsP+X6AAA6sWfH4cZq1uGJXgiDpTqN5dOqfNpNAU8gBDNTx4xUZ+cDuDH4WYxqkCe3CDdL97QmXDl2PnNvCKgHl735g3U1v3kCXgUAfBomc/xEIDguiEtsjPpknfjte/HmDE0zrWMOAQkJqXAoGBAKSrD5ryiVREpBmUohsI1g+e7BVR2nAtGYiquXIk2lkk5eQVO1yDh/LOU0jf8kI+UyRv16fANBjXqVc/twG016US5FNPV6fSllevsr0V020QemInO0+yJnTojSAfcayLroQId8Y3nPqVPpKMwvjvV7r50nGCCqXBtQsF4KITRzqrAoGAZBNyYNgBguRaEd1Sxw2gPmOUfvqiUCo6F4MJ+8xN8idn4FnaofcH8ic613PQPqpB/yYaxeqgIEfnvGY9ILXCuvbePfYqFmMwzALWvZ+v7uVKa2M7HstWCrq7O+m/lQFN/ut8ZnUDcBn4WwwHa/PjCYietetO2gpDRmAdSqrWGH8CgYBkwp+r6pkJzW60kHSZIlEKAe7oJMwLNC2ZqQ4MwGwzfBaH+E34kCuR8ZqYzyAIVOa/Nwi5By1Zvi1KzBwJmUUTJ3o7WCOE96EzSrmOZlqXNCwO/36Vh6dshhhE/birIlXJSP0xdzpBQy2ksyli9eGy8cdJ2Y72Wo+TjSclRbKiPQKBgQD1C/CJRQbahz6B3Sc4NOiFUQioM30qDKbDibzUq95u5PtQOx69+/h68tA2nj7ILZOXoh6/KF6LM9WK0QctY0HR5Uy4Uz8YkY/Y0L/LExSkNdpYqbpBc8DdIsKYHoMLNHDwc03tpINRLrmq00sD0907oeuY8/2l6P7XOZSnCvE5Fw==';