// +---------------------------------------------------------------------- namespace App\Services; use App\Models\GongdengFoxiangModel; use App\Models\GongdengOrderModel; use App\Models\LampMealsModel; use App\Models\MemberModel; /** * 供灯管理-服务类 * @author wesmiler * @since 2020/11/11 * Class GongdengOrderService * @package App\Services */ class GongdengOrderService extends BaseService { /** * 构造函数 * @author wesmiler * @since 2020/11/11 * GongdengOrderService constructor. */ public function __construct() { $this->model = new GongdengOrderModel(); } /** * 获取列表 * @return array * @since 2020/11/11 * @author wesmiler */ public function getList() { $params = request()->all(); return parent::getList(); } /** * 供灯下单 */ public function buy($userId){ $params = request()->all(); // 验证佛像信息 $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, [1])){ 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(); $openid = isset($memberInfo['openid'])? trim($memberInfo['openid']) : ''; if(!$memberInfo){ return message('账号已被冻结,请联系客服', false); } if(empty($openid)){ return message('账号获取授权参数失败,请退出重试', false); } // 验证是否供灯过 $buyType = 1; $gdCheckData = GongdengOrderModel::where(['source_id'=> $fid,'user_id'=> $userId,'status'=>2,'mark'=>1]) ->where('expire_time','>=', time()) ->select(['id','source_id','user_id','expire_time','params']) ->first(); // 续费 if($gdCheckData){ $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(!$oid = GongdengOrderModel::insertGetId($data)){ return message('供灯订单创建失败', false); } // 支付参数 switch($payType){ case 1: // 微信支付 $order = [ 'openid'=> $openid, 'orderNo'=> $data['order_sn'], 'amount'=> $data['total'], 'body'=> '供灯订单支付', ]; $jsapiParams = WechatService::jsapiUnifiedorder($order); $code = isset($jsapiParams['code'])? $jsapiParams['code'] : ''; if($code == 'error' || empty($jsapiParams)){ $message = isset($jsapiParams['message']) && $jsapiParams['message']? $jsapiParams['message'] : '订单支付处理失败'; return message($message, false); } return message('订单创建成功', true, ['id'=> $oid,'params'=> $jsapiParams]); break; default: break; } return message('支付处理失败', false); } }