merchant_id; $merchant_user_id = $request->merchant_user_id; $level_id = $request->level_id; $level_price = $request->level_price; $level_column = $request->level_column ?? []; $vip_user_spread_carrier_id = $request->vip_user_spread_carrier_id ?? 0; $merchant_user = MerchantUsers::select('openid', 'mobile', 'nickname')->where('id', $merchant_user_id) ->first(); $wechatUser = session('wechat.oauth_user.new'); if ($wechatUser) { $open_id = $wechatUser->getId(); } else { $open_id = $merchant_user->openid; } if(!$merchant_id || !$level_id || !isset($level_price) ){ return $this->failure('参数不全'); } $level = SaasMemberLevel::with('memberColumn')->where('merchant_id',$merchant_id) ->where('id',$level_id) ->first(); if(!$level){ return $this->failure('会员等级不存在'); } if($level['level_price'] != $level_price){ return $this->failure('价格不符'); } //查询是否已购买且未过期 $expire_time = SaasMemberUser::where('merchant_id',$merchant_id)->where('merchant_user_id',$merchant_user_id) ->where('member_level_id',$level_id) ->value('expire_time'); if($expire_time){ $expire = Carbon::parse($expire_time)->timestamp; }else{ $expire = 0; } if($expire > Carbon::now()->timestamp){ return $this->failure('您上次购买的VIP还未到期,不能再次购买'); } //写订单 $trade_no = $this->getTradeNO(); $touristOrder = new TouristOrder(); $touristOrder->open_id = $open_id; $touristOrder->price = $level_price; $touristOrder->num = 1; $touristOrder->pay_type = 'wechat'; $touristOrder->type = 'member'; $touristOrder->type_id = $level_id; $touristOrder->pay_status = 0; $touristOrder->desc = $level['level_title']; $touristOrder->goods = 'VIP_' . $level['level_title']; $touristOrder->trade_no = $trade_no; $touristOrder->withdrawal_radio = 100; //分成比例 $touristOrder->from_openid = $request->from_openid; $touristOrder->share_channel_id = $request->share_channel_id; $touristOrder->alliance_id = $request->alliance_id; $link_name = $request->linkmen['name']??($request->linkmen[0]['name']??null); $link_mobile = $request->linkmen['mobile']??($request->linkmen[0]['mobile']??''); $touristOrder->name = $request->name ?? ($MerchantUser->nickname ?? $link_name); $touristOrder->mobile = $request->mobile ?? ($MerchantUser->mobile ?? $link_mobile); $touristOrder->withdrawal_radio = 100; $touristOrder->account_id = $merchant_user_id; $touristOrder->merchant_id = $merchant_id; $touristOrder->channel = 0; $touristOrder->area_code = null; $linkmen = json_encode($request->linkmen); $touristOrder->linkmen = $linkmen == 'null' || $linkmen == null ? null : $linkmen ; $extend = [ 'level_id' => $level_id, 'spread_merchant_id' => $request->spread_merchant_id, //推广的商家id 'facilitate_ratio' => $level->facilitate_ratio, 'merchant_ratio' => $level->merchant_ratio, 'vip_user_spread_carrier_id' => $vip_user_spread_carrier_id //vip用户推广载体数据id ]; $touristOrder->spread_merchant_id = $request->spread_merchant_id ?? 0; $touristOrder->extend = json_encode($extend); $touristOrder->save(); if(!empty($level_column) && is_array($level_column)) { foreach ($level_column as $key => $val) { $buy_info = SaasMemberBuyInfo::where('merchant_id',$merchant_id) ->where('level_id',$level_id)->where('merchant_user_id',$merchant_user_id) ->where('column_name',$val['column_name']) ->first(); if($buy_info){ if($val != $buy_info->column_value){ $buy_info->column_value = $val['column_value']; $buy_info->save(); } }else{ $buy_info = new SaasMemberBuyInfo(); $buy_info->merchant_id = $merchant_id; $buy_info->level_id = $level_id; $buy_info->merchant_user_id = $merchant_user_id; $buy_info->order_id = $touristOrder->id; $buy_info->column_name = $val['column_name']; $buy_info->column_value = $val['column_value']; $buy_info->save(); } } } //支付参数 if($level_price){ $callback = config('app.url') . '/api/app/callback/Community/' . $trade_no; $attributes = array( 'trade_type' => 'JSAPI', // JSAPI,NATIVE,APP... 'body' => $level['level_title'], 'detail' => $level['level_sub_title'], 'out_trade_no' => $trade_no, 'total_fee' => intval($level_price * 100) , 'notify_url' => $callback, // 支付结果通知网址,如果不设置则会使用配置里的默认地址 'openid' => $open_id, ); $result = \WechatService::officialPay($attributes); return $this->success('ok', $result); } }catch (\Exception $e) { $this->getError($e); return $this->failure('操作失败'); } } /** * 查询商家会员等级列表 * @param Request $request */ public function getSaasMemberLevelList(Request $request){ try { $merchant_id = $request->merchant_id; $member_level = SaasMemberLevel::with('memberColumn')->where('merchant_id',$merchant_id) ->orderBy('id','desc') ->paginate(); return $this->success('ok',$member_level); }catch (\Exception $e) { $this->getError($e); return $this->failure('操作失败'); } } /** * 查询商家会员等级详情 * @param Request $request */ public function getSaasMemberLevelDetail(Request $request,SaasVipSpreadService $s1,SaasVipService $s2){ try { $merchant_id = $request->merchant_id; $level_id = $request->level_id; $merchant_user_id = $request->merchant_user_id; $member_level = SaasMemberLevel::with('memberColumn') ->where('merchant_id',$merchant_id) ->where('id',$level_id) ->first(); if(!$member_level){ return $this->success('ok',$member_level); } $member_level->is_buy = $s2->checkBuyVip($merchant_id,$merchant_user_id,$level_id) ? 1 : 0;//是否购买状态 $member_level->give_vip_receive_status = 0; //赠送vip领取状态 if($member_level->is_buy){ $order = $s2->getBuyVipOrder($merchant_id, $merchant_user_id, $level_id); if($order){ $member_level->give_vip_receive_status = SaasMemberVipGain::where('order_id',$order->id) ->where('merchant_user_id',$merchant_user_id) ->where('merchant_id',$merchant_id) ->where('level_id',$level_id) ->where('type','vip') ->value('status') ?: 0; } } $gain = json_decode($member_level->gain); $member_level->gain = $gain; if(!$gain){ return $this->success('ok',$member_level); } foreach ($gain as $item){ if($item->type && isset($item->merchant_id) && $item->id){ $item->data = $s1->getGain($item->type,$item->merchant_id,$item->id); $where = [ ['type','=',$item->type], ['type_id','=',$item->id], ['level_id','=',$level_id], ['merchant_user_id','=',$request->merchant_user_id] ]; $receive_status = SaasMemberVipGain::where($where)->value('status'); $item->receive_status = $receive_status ?? 0; } } return $this->success('ok',$member_level); }catch (\Exception $e) { $this->getError($e); return $this->failure($e->getMessage()); } } /** * 我的VIP订单 * @param Request $request */ public function getSaasMemberOrder(Request $request) { try { // 记得删除 TouristOrder的记录同步merchant_id 和course表里删除多余的数据 $merchant_user_id = $request->merchant_user_id; $merchant_id = $request->merchant_id; $result = TouristOrder::where('tourist_orders.account_id', $merchant_user_id)->where('tourist_orders.type', 'member') ->where('tourist_orders.merchant_id',$merchant_id) ->join('saas_member_users', function ($join) use($merchant_user_id,$merchant_id){ $join->on('saas_member_users.member_level_id', '=', 'tourist_orders.type_id') ->where('saas_member_users.merchant_user_id',$merchant_user_id) ->where('saas_member_users.merchant_id',$merchant_id); }, null, null, 'left') ->join('saas_member_levels', function ($join) use($merchant_user_id,$merchant_id){ $join->on('saas_member_levels.id', '=', 'tourist_orders.type_id') ->where('saas_member_levels.merchant_id',$merchant_id);; }, null, null, 'left') ->orderBy('tourist_orders.id', 'desc') ->select('tourist_orders.created_at','tourist_orders.price','saas_member_levels.level_title','saas_member_levels.level_pic', 'saas_member_users.expire_time','saas_member_levels.level_sub_title','saas_member_levels.id') ->paginate(); return $this->success('ok', $result); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } }