WIN-2308041133\Administrator 1 روز پیش
والد
کامیت
ad4f4a59c1
2فایلهای تغییر یافته به همراه107 افزوده شده و 0 حذف شده
  1. 105 0
      app/api/controller/Shop.php
  2. 2 0
      app/api/route/shop.php

+ 105 - 0
app/api/controller/Shop.php

@@ -10,6 +10,8 @@ use app\model\api\StoreCart;
 use app\model\api\PayTrade;
 use app\model\api\UserAddress;
 use app\model\api\StoreProductAttrValue;
+use app\model\api\UserScoreDetail;
+use app\model\api\User as UserModel;
 use app\Request;
 use library\services\UtilService;
 use think\facade\Db;
@@ -184,6 +186,9 @@ class Shop extends BaseController
             ['status', ''],
         ], $request);
 
+        $post['page'] = (int)$post['page'];
+        $post['pageSize'] = (int)$post['pageSize'];
+
         $where = [
             ['uid', '=', $request->user['uid']]
         ];
@@ -279,4 +284,104 @@ class Shop extends BaseController
 
         return app('json')->success('确认收货成功');
     }
+
+    /**
+     * 积分支付
+     * @param Request $request
+     */
+    public function scorePay(Request $request)
+    {
+        $post = UtilService::getMore([
+            ['order_id', '', 'empty', '参数错误'],
+        ], $request);
+
+        // 查询订单
+        $orderData = Db::name('store_order')
+            ->where('order_id', $post['order_id'])
+            ->where('uid', $request->user['uid'])
+            ->find();
+
+        if (empty($orderData)) {
+            return app('json')->fail('订单不存在');
+        }
+
+        if ($orderData['status'] != 0) {
+            return app('json')->fail('订单状态错误');
+        }
+
+        if ($orderData['paid'] == 1) {
+            return app('json')->fail('订单已支付');
+        }
+
+        // 查询支付流水
+        $payTradeData = Db::name('pay_trade')
+            ->where('o_id', $orderData['id'])
+            ->where('code', 'shop_order')
+            ->find();
+
+        if (empty($payTradeData)) {
+            return app('json')->fail('支付流水不存在');
+        }
+
+        if ($payTradeData['status'] == 1) {
+            return app('json')->fail('订单已支付');
+        }
+
+        // 检查用户积分
+        $userData = (new UserModel)->where('uid', $request->user['uid'])->find();
+        if (empty($userData)) {
+            return app('json')->fail('用户不存在');
+        }
+
+        if ($userData['score'] < $orderData['pay_price']) {
+            return app('json')->fail('积分不足,当前积分:' . $userData['score'] . ',需要:' . $orderData['pay_price']);
+        }
+
+        // 开启事务
+        Db::startTrans();
+        try {
+            // 扣除积分
+            $scoreResult = (new UserScoreDetail)->payScore(
+                $request->user['uid'],
+                floatval($orderData['pay_price']),
+                'outcome_score',
+                '订单支付:' . $orderData['order_id'],
+                ['o_id' => $orderData['id']],
+                '',
+                '商城订单积分支付,支出' . $orderData['pay_price'] . '积分'
+            );
+
+            if (!$scoreResult) {
+                Db::rollback();
+                return app('json')->fail('积分扣除失败');
+            }
+
+            // 更新支付流水
+            $pay_json = json_encode([
+                'pay_type' => 'score',
+                'score' => $orderData['pay_price'],
+                'pay_time' => time()
+            ], JSON_UNESCAPED_UNICODE);
+
+            Db::name('pay_trade')->where('id', $payTradeData['id'])->update([
+                'status' => 1,
+                'pay_time' => time(),
+                'pay_json' => $pay_json
+            ]);
+
+            // 更新订单状态
+            Db::name('store_order')->where('id', $orderData['id'])->update([
+                'paid' => 1,
+                'pay_time' => time()
+            ]);
+
+            Db::commit();
+            return app('json')->success('积分支付成功');
+        } catch (DbException $e) {
+            @file_put_contents('quanju.txt', date('Y-m-d H:i:s') . ' [scorePay Error] ' . $e->getMessage() . ' File: ' . $e->getFile() . ' Line: ' . $e->getLine() . "\r\n", 8);
+
+            Db::rollback();
+            return app('json')->fail('支付失败');
+        }
+    }
 }

+ 2 - 0
app/api/route/shop.php

@@ -25,6 +25,8 @@ Route::group('shop', function () {
     Route::rule('cancelOrder', 'Shop/cancelOrder');
     //确认收货
     Route::rule('confirmOrder', 'Shop/confirmOrder');
+    //积分支付
+    Route::rule('scorePay', 'Shop/scorePay');
 })->middleware([
     AllowOriginMiddleware::class,
     SeretKeyMiddleware::class,