Przeglądaj źródła

wesmiler 报恩寺项目提交

wesmiler 4 lat temu
rodzic
commit
3b9f6d4ff9

+ 13 - 0
app/Http/Controllers/GongdengOrderController.php

@@ -11,6 +11,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Http\Validator\GongdengValidator;
 use App\Services\GongdengOrderService;
 use App\Services\OrdersService;
 
@@ -34,4 +35,16 @@ class GongdengOrderController extends Backend
         parent::__construct();
         $this->service = new GongdengOrderService();
     }
+
+    /**
+     * 供灯下单
+     * @return mixed
+     */
+    public function buy(GongdengValidator $validator){
+        $params = $validator->check(request()->all(),'buy');
+        if(!is_array($params)){
+            return message($params, false);
+        }
+        return $this->service->cardBuy();
+    }
 }

+ 1 - 1
app/Services/EnshrineOrdersService.php

@@ -145,7 +145,7 @@ class EnshrineOrdersService extends BaseService
         }else if($dateType == 2){
             $formatStr = "%Y-%m-%d";
             $firstTime = strtotime(date('Y-m-01'));
-            $num = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
+            $num = call_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
             for($i = 1; $i<=$num; $i++){
                 $i = $i<10? '0'.$i : $i;
                 $ks = date('Y-m')."-{$i}";

+ 106 - 1
app/Services/GongdengOrderService.php

@@ -293,6 +293,112 @@ class GongdengOrderService extends BaseService
     }
 
     /**
+     * 供灯下单卡支付
+     */
+    public function cardBuy()
+    {
+        $params = request()->all();
+        $userId = isset($params['user_id'])? intval($params['user_id']) : 0;
+
+        // 验证佛像信息
+        $fid = isset($params['fid']) ? $params['fid'] : 0;
+        $foInfo = GongdengFoxiangModel::where(['id' => $fid, 'status' => 1, 'mark' => 1])
+            ->select(['id', 'name'])
+            ->first();
+        if (!$foInfo || $fid <= 0) {
+            return message('供灯佛像信息不存在', false);
+        }
+
+        $payType = isset($params['payType']) ? $params['payType'] : 0;
+        if (!in_array($payType, [3])) {
+            return message('支付方式暂不支持', false);
+        }
+
+        // 套餐信息
+        $mid = isset($params['mid']) ? $params['mid'] : 0;
+        $mealInfo = LampMealsModel::where(['id' => $mid, 'status' => 1, 'mark' => 1])
+            ->select(['id', 'name', 'price', 'num'])
+            ->first();
+        if (!$mealInfo) {
+            return message('供灯套餐不存在或已下架', false);
+        }
+
+        // 验证用户是否已授权
+        $memberInfo = MemberModel::where(['id' => $userId, 'mark' => 1, 'status' => 1])
+            ->select('id', 'openid', 'nickname')
+            ->first();
+        if (!$memberInfo) {
+            return message('账号已被冻结,请联系客服', false);
+        }
+
+        // 验证是否供灯过
+        $buyType = 1;
+        $gdCheckData = GongdengOrderModel::where(['source_id' => $fid, 'user_id' => $userId,'lamp_status'=> 2, 'status' => 2, 'mark' => 1])
+            ->where('expire_time', '>=', time())
+            ->select(['id', 'source_id', 'user_id','device_num', 'expire_time', 'params'])
+            ->first();
+
+        // 续费
+        if ($gdCheckData && $gdCheckData->id) {
+            $buyType = 2;
+        }
+
+        // 创建订单
+        $expireTime = ($mealInfo->num * 24 * 3600) + time();
+        $data = [
+            'source_id' => $fid,
+            'user_id' => $userId,
+            'pay_type' => $payType,
+            'buy_type' => $buyType,
+            'order_sn' => get_order_num('G'),
+            'num' => 1,
+            'price' => $mealInfo->price,
+            'total' => $mealInfo->price,
+            'sf_name' => isset($params['sf_name']) ? trim($params['sf_name']) : '',
+            'qf_content' => isset($params['qf_content']) ? trim($params['qf_content']) : '',
+            'is_hide' => isset($params['is_hide']) ? intval($params['is_hide']) : 0,
+            'expire_time' => $expireTime,
+            'create_time' => time(),
+            'status' => 1,
+        ];
+
+        if($gdCheckData){
+            $data['device_num'] = $gdCheckData->device_num;
+            $data['params'] = $gdCheckData->params;
+        }
+
+        // 订单
+        if (!$oid = GongdengOrderModel::insertGetId($data)) {
+            return message('供灯订单创建失败', false);
+        }
+
+        // 卡支付调用
+        $data = [
+            'CommandType'=> 'OpenLed', // 执行命令方式:OpenLed-开灯,CloseLed-关灯,QuitStatus-查询状态
+            'OrderNo'=> $data['order_sn'],
+            'total'=> $data['total'],
+            'body'=> '供灯订单',
+            'notify_url'=> url()->formatRoot('http://').'/api/notify/pay/cardGd'
+        ];
+        $dataStr = [];
+        foreach($data as $k => $v){
+            $dataStr[] = $k.'='.$v;
+        }
+
+        // 卡支付供灯调用
+        $errorKey = "caches:gongdeng:{$userId}_{$fid}_{$mid}";
+        $dataStr = implode('&', $dataStr);
+        $headers = ["Content-Type:application/x-www-form-urlencoded; charset=UTF-8"];
+        $apiUrl = ConfigService::make()->getConfigByCode('gd_api_url').'/LEDControl.ashx';
+        RedisService::set($errorKey.':request', ['url'=> $apiUrl,'data'=> $data], 3600);
+        $result = httpHeaderRequest($apiUrl, $dataStr,'post',$headers,'text', 5);
+        RedisService::set($errorKey.':result', $result, 3600);
+
+        return message('支付处理失败', false);
+    }
+
+
+    /**
      * 供灯下单
      */
     public function buy($userId)
@@ -400,5 +506,4 @@ class GongdengOrderService extends BaseService
 
         return message('支付处理失败', false);
     }
-
 }

+ 1 - 1
app/Services/MemberService.php

@@ -301,7 +301,7 @@ class MemberService extends BaseService
         }else if($dateType == 2){
             $formatStr = "%Y-%m-%d";
             $firstTime = strtotime(date('Y-m-01'));
-            $num = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
+            $num = call_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
             for($i = 1; $i<=$num; $i++){
                 $i = $i<10? '0'.$i : $i;
                 $ks = date('Y-m')."-{$i}";

+ 1 - 1
app/Services/OrdersService.php

@@ -185,7 +185,7 @@ class OrdersService extends BaseService
         }else if($dateType == 2){
             $formatStr = "%Y-%m-%d";
             $firstTime = strtotime(date('Y-m-01'));
-            $num = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
+            $num = call_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
             for($i = 1; $i<=$num; $i++){
                 $i = $i<10? '0'.$i : $i;
                 $ks = date('Y-m')."-{$i}";

+ 1 - 1
app/Services/TradeService.php

@@ -257,7 +257,7 @@ class TradeService extends BaseService
         }else if($dateType == 2){
             $formatStr = "%Y-%m-%d";
             $firstTime = strtotime(date('Y-m-01'));
-            $num = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
+            $num = call_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
             for($i = 1; $i<=$num; $i++){
                 $i = $i<10? '0'.$i : $i;
                 $ks = date('Y-m')."-{$i}";

+ 1 - 0
routes/web.php

@@ -353,6 +353,7 @@ Route::get('/gdorders/info', [\App\Http\Controllers\GongdengOrderController::cla
 Route::post('/gdorders/edit', [\App\Http\Controllers\GongdengOrderController::class, 'edit']);
 Route::post('/gdorders/delete', [\App\Http\Controllers\GongdengOrderController::class, 'delete']);
 Route::post('/gdorders/status', [\App\Http\Controllers\GongdengOrderController::class, 'status']);
+Route::post('/gdorders/buy', [\App\Http\Controllers\GongdengOrderController::class, 'buy']);
 
 // 快递公司
 Route::get('/express/index', [\App\Http\Controllers\ExpressController::class, 'index']);