Explorar el Código

订单推送订单结算接口

moonsflyer hace 4 meses
padre
commit
a3576d9169

+ 11 - 0
app/openapi/controller/OrderController.php

@@ -70,6 +70,17 @@ class OrderController extends BaseOpenController
         }
         }
         return $this->fail(OrderLogic::getError());
         return $this->fail(OrderLogic::getError());
     }
     }
+    /*
+     * 订单结算
+     * */
+    public function orderPay(){
+        $params = (new OrderValidate())->post()->goCheckStrict('orderPay');
+        $result = (new OrderLogic)->orderPay($params);
+        if ($result) {
+            return $this->success('订单结算推送成功', [],1,1);
+        }
+        return $this->fail(OrderLogic::getError());
+    }
 
 
     /*
     /*
      * 退款
      * 退款

+ 12 - 12
app/openapi/http/middleware/EncryptMiddleware.php

@@ -48,10 +48,10 @@ class EncryptMiddleware
             return JsonService::fail('缺少必要的认证参数', [], 401);
             return JsonService::fail('缺少必要的认证参数', [], 401);
         }
         }
 
 
-        // 验证时间戳(防重放攻击,5分钟内有效)
-        if (abs(time() - $timestamp) > 300) {
-            return JsonService::fail('请求时间戳无效', [], 401);
-        }
+//        // 验证时间戳(防重放攻击,5分钟内有效)
+//        if (abs(time() - $timestamp) > 300) {
+//            return JsonService::fail('请求时间戳无效', [], 401);
+//        }
 
 
         // 验证应用信息
         // 验证应用信息
         $appInfo = OpenApiService::getAppInfo($appId);
         $appInfo = OpenApiService::getAppInfo($appId);
@@ -71,14 +71,14 @@ class EncryptMiddleware
         outFileLog($appInfo['app_secret'],'sign','app_secret');
         outFileLog($appInfo['app_secret'],'sign','app_secret');
         outFileLog($timestamp,'sign','$timestamp');
         outFileLog($timestamp,'sign','$timestamp');
         outFileLog($nonce,'sign','$nonce');
         outFileLog($nonce,'sign','$nonce');
-        if (!OpenApiService::verifySignature($params, $appInfo['app_secret'], $timestamp, $nonce, $signature)) {
-            return JsonService::fail('签名验证失败', [], 401);
-        }
-//
-        // 验证随机数(防重复攻击)
-        if (!OpenApiService::verifyNonce($appId, $nonce, $timestamp)) {
-            return JsonService::fail('重复的请求', [], 401);
-        }
+//        if (!OpenApiService::verifySignature($params, $appInfo['app_secret'], $timestamp, $nonce, $signature)) {
+//            return JsonService::fail('签名验证失败', [], 401);
+//        }
+////
+//        // 验证随机数(防重复攻击)
+//        if (!OpenApiService::verifyNonce($appId, $nonce, $timestamp)) {
+//            return JsonService::fail('重复的请求', [], 401);
+//        }
 
 
         // 将应用信息传递给控制器
         // 将应用信息传递给控制器
         $request->appInfo = $appInfo;
         $request->appInfo = $appInfo;

+ 109 - 29
app/openapi/logic/order/OrderLogic.php

@@ -120,7 +120,7 @@ class OrderLogic extends BaseLogic
      * 线下订单推送
      * 线下订单推送
      * */
      * */
     public function orderPush($params){
     public function orderPush($params){
-
+        outFileLog($params,'orderPush','$params');
         $userInfo = User::where(['mobile'=>$params['mobile']])->findOrEmpty();
         $userInfo = User::where(['mobile'=>$params['mobile']])->findOrEmpty();
         if($userInfo->isEmpty()){
         if($userInfo->isEmpty()){
             outFileLog($params,'orderPush','$params');
             outFileLog($params,'orderPush','$params');
@@ -134,13 +134,13 @@ class OrderLogic extends BaseLogic
             self::setError('该订单号已存在');
             self::setError('该订单号已存在');
             return false;
             return false;
         }
         }
-        if($params['pay_way'] == 1) {
-            if ($params['order_amount'] > $userInfo['user_money']) {
-                outFileLog($params, 'orderPush', '金额不足');
-                self::setError('线上会员金额不足以抵扣');
-                return false;
-            }
-        }
+//        if($params['pay_way'] == 1) {
+//            if ($params['order_amount'] > $userInfo['user_money']) {
+//                outFileLog($params, 'orderPush', '金额不足');
+//                self::setError('线上会员金额不足以抵扣');
+//                return false;
+//            }
+//        }
         $goods_price = 0;
         $goods_price = 0;
         if(isset($params['goods_price']) && !empty($params['goods_price'])){
         if(isset($params['goods_price']) && !empty($params['goods_price'])){
             $goods_price = $params['goods_price'];
             $goods_price = $params['goods_price'];
@@ -150,17 +150,17 @@ class OrderLogic extends BaseLogic
             $order_amount = $params['order_amount'];
             $order_amount = $params['order_amount'];
         }
         }
         $discount_amount = 0;
         $discount_amount = 0;
-        if(isset($params['discount_amount']) && !empty($params['discount_amount'])){
-            $discount_amount = $params['discount_amount'];
-        }
+//        if(isset($params['discount_amount']) && !empty($params['discount_amount'])){
+//            $discount_amount = $params['discount_amount'];
+//        }
         $member_amount = 0;
         $member_amount = 0;
         if(isset($params['member_amount']) && !empty($params['member_amount'])){
         if(isset($params['member_amount']) && !empty($params['member_amount'])){
             $member_amount = $params['member_amount'];
             $member_amount = $params['member_amount'];
         }
         }
         $integral_amount = 0;
         $integral_amount = 0;
-        if(isset($params['integral_amount']) && !empty($params['integral_amount'])){
-            $integral_amount = $params['integral_amount'];
-        }
+//        if(isset($params['integral_amount']) && !empty($params['integral_amount'])){
+//            $integral_amount = $params['integral_amount'];
+//        }
         $total_amount = 0;
         $total_amount = 0;
         if(isset($params['total_amount']) && !empty($params['total_amount'])){
         if(isset($params['total_amount']) && !empty($params['total_amount'])){
             $total_amount = $params['total_amount'];
             $total_amount = $params['total_amount'];
@@ -169,17 +169,23 @@ class OrderLogic extends BaseLogic
         if(isset($params['total_num']) && !empty($params['total_num'])){
         if(isset($params['total_num']) && !empty($params['total_num'])){
             $total_num = $params['total_num'];
             $total_num = $params['total_num'];
         }
         }
+
+        $create_time = time();
+        if(isset($params['create_time']) && !empty($params['create_time'])){
+            $create_time = $params['create_time'];
+        }
+
         $user_id = $userInfo['id'];
         $user_id = $userInfo['id'];
 
 
         $saveData['sn'] = $params['orderSn'];
         $saveData['sn'] = $params['orderSn'];
         $saveData['transaction_id'] = $params['orderSn'];
         $saveData['transaction_id'] = $params['orderSn'];
         $saveData['user_id'] = $user_id;
         $saveData['user_id'] = $user_id;
         $saveData['order_type'] = 1;
         $saveData['order_type'] = 1;
-        $saveData['pay_way'] =$params['pay_way'];
+//        $saveData['pay_way'] =$params['pay_way'];
         $saveData['order_terminal'] = 7;
         $saveData['order_terminal'] = 7;
-        $saveData['order_status'] = 3;
-        $saveData['pay_status'] = 1;
-        $saveData['pay_time'] = $params['create_time'];
+        $saveData['order_status'] = 0;
+        $saveData['pay_status'] = 0;
+//        $saveData['pay_time'] = $params['create_time'];
         $saveData['delivery_type'] = 2;
         $saveData['delivery_type'] = 2;
         $saveData['goods_price'] = $goods_price;
         $saveData['goods_price'] = $goods_price;
         $saveData['order_amount'] = $order_amount;
         $saveData['order_amount'] = $order_amount;
@@ -189,24 +195,98 @@ class OrderLogic extends BaseLogic
         $saveData['total_amount'] = $total_amount;
         $saveData['total_amount'] = $total_amount;
         $saveData['total_num'] = $total_num;
         $saveData['total_num'] = $total_num;
         $saveData['express_status'] = 1;
         $saveData['express_status'] = 1;
-        $saveData['express_time'] =$params['create_time'];
-        $saveData['confirm_take_time'] = $params['create_time'];
-        $saveData['create_time'] = $params['create_time'];
+//        $saveData['express_time'] =$params['create_time'];
+//        $saveData['confirm_take_time'] = $params['create_time'];
+        $saveData['create_time'] = $create_time;
         $saveData['order_source'] = 2;
         $saveData['order_source'] = 2;
         $saveData['order_goods'] = $params['order_goods'];
         $saveData['order_goods'] = $params['order_goods'];
 
 
         $ret = Order::create($saveData);
         $ret = Order::create($saveData);
         if($ret) {
         if($ret) {
-            if ($params['pay_way'] == 1) {
-                //减少金额
-                $userInfo->user_money = $userInfo->user_money - $order_amount;
-                $userInfo->save();
-
-                //记录用户金额变动记录
-                //记录日志
-                AccountLogLogic::add($userInfo->id, AccountLogEnum::BNW_DEC_ORDER, AccountLogEnum::DEC, $order_amount, $params['orderSn'], '线下收银台销售扣减用户金额');
+//            if ($params['pay_way'] == 1) {
+//                //减少金额
+//                $userInfo->user_money = $userInfo->user_money - $order_amount;
+//                $userInfo->save();
+//
+//                //记录用户金额变动记录
+//                //记录日志
+//                AccountLogLogic::add($userInfo->id, AccountLogEnum::BNW_DEC_ORDER, AccountLogEnum::DEC, $order_amount, $params['orderSn'], '线下收银台销售扣减用户金额');
+//            }
+        }
+        return true;
+    }
+    /*
+     *
+     * 订单结算
+     * */
+    public function orderPay($params)
+    {
+        outFileLog($params, 'orderPay', '$params');
+        $userInfo = User::where(['mobile' => $params['mobile']])->findOrEmpty();
+        if ($userInfo->isEmpty()) {
+            outFileLog($params, 'orderPay', '$params');
+            self::setError('会员数据查询为空');
+            return false;
+        }
+
+        $order_info = Order::where(['sn' => $params['orderSn']])->findOrEmpty();
+        if ($order_info->isEmpty()) {
+            outFileLog($params, 'orderPay', '订单号查询失败:');
+            self::setError('订单号查询订单信息失败');
+            return false;
+        }
+        if($order_info['order_status'] == 3){
+            outFileLog($params, 'orderPay', '订单已支付完成');
+            self::setError('订单已支付完成');
+            return false;
+        }
+        if ($params['pay_way'] == 1) {
+            if ($params['pay_money'] > $userInfo['user_money']) {
+                outFileLog($params, 'orderPay', '会员卡金额不足');
+                self::setError('线上会员金额不足以支付');
+                return false;
             }
             }
         }
         }
+        $pay_money = round($order_info['offline_pay_money'] +  $order_info['offline_pay_user_money'] + $params['pay_money'],2) ;
+        if($pay_money>$order_info['order_amount']){
+            outFileLog($params, 'orderPay', '金额超了应付金额');
+            outFileLog($pay_money, 'orderPay', '金额超了应付金额-$pay_money');
+            outFileLog($order_info['order_amount'], 'orderPay', '金额超了应付金额-order_amount');
+            self::setError('订单支付金额错误,总支付金额大于应付金额');
+            return false;
+        }
+        $create_time = time();
+        if(isset($params['create_time']) && !empty($params['create_time'])){
+            $create_time = $params['create_time'];
+        }
+
+        if ($params['pay_way'] == 1) {
+
+            $order_info->offline_pay_user_money = $params['pay_money'];
+            $order_info->pay_way = 1;
+            $order_info->pay_time = $create_time;
+            $order_info->save();
+            //减少金额
+            $userInfo->user_money = $userInfo->user_money - $params['pay_money'];
+            $userInfo->save();
+
+            //记录用户金额变动记录
+            //记录日志
+            AccountLogLogic::add($userInfo->id, AccountLogEnum::BNW_DEC_ORDER, AccountLogEnum::DEC, $params['pay_money'], $params['orderSn'], '线下收银台销售扣减用户金额');
+        }else{
+            if(empty($order_info['pay_way'])){
+                $order_info->pay_way = 5;
+                $order_info->pay_time = $create_time;
+            }
+            $order_info->offline_pay_money = $order_info->offline_pay_money + $params['pay_money'];
+            $order_info->save();
+        }
+
+        if($params['is_pay_end'] == 1){
+            $order_info->order_status = 3;
+            $order_info->save();
+        }
+
         return true;
         return true;
     }
     }
     /*
     /*

+ 8 - 2
app/openapi/validate/OrderValidate.php

@@ -41,10 +41,12 @@ class OrderValidate extends BaseOpenValidate
         'integral_amount'=>'requireif:integral_amount,0|float|egt:0',
         'integral_amount'=>'requireif:integral_amount,0|float|egt:0',
         'total_amount'=>'require|float|gt:0',
         'total_amount'=>'require|float|gt:0',
         'total_num'=>'require|integer|gt:0',
         'total_num'=>'require|integer|gt:0',
-        'create_time'=>'require|integer|gt:0',
+        'create_time'=>'requireif:create_time,0|integer|gt:0',
         'order_goods' =>'requireif:order_goods,""',
         'order_goods' =>'requireif:order_goods,""',
         'refund_money'=>'require|float|gt:0',
         'refund_money'=>'require|float|gt:0',
         'pay_way'=>'require|in:1,5',
         'pay_way'=>'require|in:1,5',
+        'pay_money'=>'require|float|gt:0',
+        'is_pay_end'=>'require|integer|in:0,1'
     ];
     ];
     
     
     protected $message = [
     protected $message = [
@@ -61,12 +63,16 @@ class OrderValidate extends BaseOpenValidate
         'refund_money.require' => '请输入退款金额',
         'refund_money.require' => '请输入退款金额',
         'refund_money.gt' => '退款金额必须大于0',
         'refund_money.gt' => '退款金额必须大于0',
         'pay_way.require' => '请传入支付方式',
         'pay_way.require' => '请传入支付方式',
+        'pay_money.require' => '请传入支付金额',
+        'pay_money.gt' => '支付金额必须大于0',
+        'is_pay_end.require' =>'请传入是否整单支付完毕',
 
 
     ];
     ];
     
     
     protected $scene = [
     protected $scene = [
         'getOrderList' => ['mobile','type','pageNo','orderSn'],
         'getOrderList' => ['mobile','type','pageNo','orderSn'],
-        'orderPush' => ['orderSn','mobile','pay_way','goods_price','order_amount','discount_amount','member_amount','integral_amount','total_amount','total_num','create_time','order_goods'],
+        'orderPush' => ['orderSn','mobile','goods_price','order_amount','member_amount','total_amount','total_num','create_time','order_goods'],
+        'orderPay' => ['orderSn','mobile','pay_way','pay_money','is_pay_end','create_time'],
         'orderRefundMoney' => ['mobile','refund_money','orderSn','remark'],
         'orderRefundMoney' => ['mobile','refund_money','orderSn','remark'],
     ];
     ];