shish 1 рік тому
батько
коміт
40c49436b8

+ 2 - 2
app-ghs/controllers/OrderController.php

@@ -817,8 +817,8 @@ class OrderController extends BaseController
 
                 $msg = $response['msg'] ?? '';
                 $retCode = $response['code'] ?? '';
-                $msg = $msg . "(付款码:{$authCode})" . '(' . $name . ')';
-                noticeUtil::push($msg . ' ' . $retCode . ' 编号007', '15280215347');
+                $fullMsg = $msg . "(付款码:{$authCode})" . '(' . $name . ')';
+                noticeUtil::push($fullMsg . ' ' . $retCode . ' 编号007', '15280215347');
                 util::success(['returnStatus' => 'FAILURE'], $msg);
             }
         } catch (\Exception $e) {

+ 51 - 5
app-hd/controllers/OrderController.php

@@ -9,6 +9,7 @@ use bizHd\custom\classes\CustomClass;
 use bizHd\goods\classes\GoodsClass;
 use bizHd\merchant\services\ShopService;
 use bizHd\order\classes\OrderClass;
+use bizHd\order\classes\OrderItemClass;
 use bizHd\order\classes\OrderSendClass;
 use bizHd\order\services\OrderService;
 use bizHd\product\classes\ProductClass;
@@ -20,6 +21,8 @@ use bizHd\work\classes\WorkClass;
 use bizHd\wx\classes\WxOpenClass;
 use common\components\dict;
 use common\components\dateUtil;
+use common\components\noticeUtil;
+use common\components\orderSn;
 use common\components\payUtil;
 use common\services\xhPayToolService;
 use Yii;
@@ -267,15 +270,53 @@ class OrderController extends BaseController
         header("Content-type: text/html; charset=utf-8");
         $get = Yii::$app->request->get();
         $id = isset($get['id']) ? $get['id'] : 0;
+        $version = $get['version'] ?? 0;
         $order = OrderClass::getById($id, true);
         OrderClass::valid($order, $this->mainId);
+
+        $shop = $this->shop;
+        $sj = $shop->merchantName;
+        $shopName = $shop->shopName;
+        $name = $shopName == '首店' ? $sj : $sj . '-' . $shopName;
+
         $authCode = (string)$get['authCode'] ?? '';
-        if (empty($authCode)) {
-            util::fail('没有获取到支付码');
-        }
+        if ($version > 0) {
+            if (empty($authCode)) {
+                $msg = '没有扫到付款码';
+                $remind = $msg . "(花掌柜端-付款码:{$authCode})" . '(' . $name . ')';
+                noticeUtil::push($remind . ' 编号005', '15280215347');
+                util::success(['returnStatus' => 'FAILURE'], $msg);
+            }
+            //微信文档说明 https://pay.weixin.qq.com/doc/v2/merchant/4011936234
+            $wxPattern = '/^(10|11|12|13|14|15)\d{16}$/';
+            //支付宝文档说明 https://opendocs.alipay.com/open/194/106039/
+            $aliPattern = '/^(25|26|27|28|29|30)\d{14,22}$/';
+            if (!preg_match($wxPattern, $authCode) && !preg_match($aliPattern, $authCode)) {
+                $msg = '付款码有问题';
+                $remind = $msg . "(花掌柜端-付款码:{$authCode})" . '(' . $name . ')';
+                noticeUtil::push($remind . ' 编号009', '15280215347');
+                util::success(['returnStatus' => 'FAILURE'], $msg);
+            }
 
+        } else {
+            if (empty($authCode)) {
+                util::fail('没有获取到支付码');
+            }
+        }
         $orderSn = $order->orderSn ?? '';
-        $subject = '购买花材';
+
+        $lsCodePayErrorKey = 'ls_code_pay_error_' . $id;
+        $hasFailPay = Yii::$app->redis->executeCommand('GET', [$lsCodePayErrorKey]);
+        //前面有付失败过,要重新生成单号
+        if (!empty($hasFailPay)) {
+            $oldOrderSn = $order->orderSn;
+            $orderSn = orderSn::getOrderSn();
+            $order->orderSn = $orderSn;
+            $order->save();
+            OrderItemClass::updateByCondition(['orderSn' => $oldOrderSn], ['orderSn' => $orderSn]);
+        }
+
+        $subject = '购买花材 ' . $orderSn;
         $totalFee = $order->mainPay ?? 0;
         $capitalType = dict::getDict('capitalType', 'xhOrder', 'id');
 
@@ -283,7 +324,6 @@ class OrderController extends BaseController
         $transaction = $connection->beginTransaction();
         try {
 
-            $shop = $this->shop;
             $merchantPrivateKeyPath = Yii::getAlias("@vendor/lakala") . '/production/api_private_key.pem';
             $lklCertificatePath = Yii::getAlias("@vendor/lakala") . '/production/lkl-apigw-v1.cer';
             $params = [
@@ -341,7 +381,13 @@ class OrderController extends BaseController
 
                 util::success(['returnStatus' => 'SUCCESS']);
             } else {
+                //标记有没付成功的次数,原因有可能是余额不足等
+                Yii::$app->redis->executeCommand('SETEX', [$lsCodePayErrorKey, 1200, 'hasFail']);
+
                 $msg = $response['msg'] ?? '';
+                $retCode = $response['code'] ?? '';
+                $fullMsg = $msg . "(花掌柜端-付款码:{$authCode})" . '(' . $name . ')';
+                noticeUtil::push($fullMsg . ' ' . $retCode . ' 编号008', '15280215347');
                 util::success(['returnStatus' => 'FAILURE'], $msg);
             }