first(); $recive = ShopRecive::where('order_id', $order->id)->first(); $shop = MerchantShop::withTrashed()->where('id', $order->type_id)->first(); $recive = ShopRecive::where('order_id', $id)->first(); if ($recive->is_recived == 0) { $state = 1; //确认收货 } elseif (!$order->comment && !$order->Praise) { $state = 2;//去评价 } else { $state = 3;//查看评价 } $order->address = $recive->address; $order->title = $shop->title; $order->icon = $shop->icon; if ($order->banners && $order->banners != 'null') $order->banners = json_decode($shop->banners) ?? []; if ($order->remark && $order->remark != 'null') $order->remark = json_decode($shop->remark) ?? []; $order->describe = $shop->describe; $order->introduction = $shop->sub_title; $order->sku = json_decode($shop->sku, true); $order->state = $state; $order->goods = $order->goods ?? '默认规格'; return $this->success('ok', $order); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 课程 咨询 服务 商城订单 --提交评价 * @param Request $request * @return Factory|Application|JsonResponse|View */ public function orderComments(Request $request) { try { $id = $request->id; $trade_no = $request->trade_no; $comment = $request->comment; $Praise = $request->Praise; $pic = $request->pic; $value = Order::where('id', $id)->whereIn('pay_status', [1, 4])->first(); if ($trade_no) $value = Order::where('trade_no', $trade_no)->whereIn('pay_status', [1, 4])->first(); if (!$value) return $this->failure('未查询到该订单。'); if ($value->comment || $value->Praise) return $this->failure('您已经提交过评价啦'); $value->comment = $comment; $value->Praise = $Praise; $value->pic = json_encode($pic); $record = ConsultationRecords::where('trade_no', $value->trade_no)->first(); if ($record) { $record->comment = $comment; $record->Praise = $Praise; $record->save(); } $value->save(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 课程 咨询 服务 商城订单 --修改提交评价 * @param Request $request * @return Factory|Application|JsonResponse|View */ public function changeorderComments(Request $request) { try { $id = $request->id; $comment = $request->comment; $Praise = $request->Praise; $pic = $request->pic; $value = Order::where('id', $id)->whereIn('pay_status', [1, 4])->first(); if ($request->comment) $value->comment = $comment; if ($request->Praise) $value->Praise = $Praise; if ($request->pic) $value->comment = json_encode($pic); $record = ConsultationRecords::where('trade_no', $value->trade_no)->first(); if ($record) { $record->comment = $comment; $record->Praise = $Praise; $record->save(); } $value->save(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 更改咨询订单状态 * * * @param Request $request * @return Factory|Application|JsonResponse|View */ public function changeOrderStatus(Request $request) { try { $id = $request->id; $result = ConsultationRecords::where('id', $id)->where('pay_status', 1)->first(); if (!$result) return $this->failure('未查到该订单信息~'); if ($request->status) $result->status = $request->status; if ($request->record) $result->record = $request->record; $result->save(); return $this->success('操作成功'); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 查看订单状态 * * * @param Request $request * @return Factory|Application|JsonResponse|View */ public function get_order_status(Request $request) { try { $id = $request->id; $status = $request->status ?? 0; if ($status) { ConsultationRecords::where('id', $id)->update(['status' => $status]); } $result = ConsultationRecords::select('id', 'anchor_id', 'status', 'Remaining_duration') ->where('id', $id)->first(); return $this->success('ok', $result); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 商户 查看订单评价 * * * @param Request $request * @return Factory|Application|JsonResponse|View */ public function orderComment(Request $request) { try { $id = $request->id; $order = Order::where('id', $id)->whereIn('pay_status', [1, 4])->first(); if ($request->trade_no) $order = Order::where('trade_no', $request->trade_no)->whereIn('pay_status', [1, 4]) ->first(); if (!$order) return $this->failure('未查询到该订单。'); $order->pic = json_decode($order->pic, true) ?? []; $order->Praise = floatval($order->Praise); $order->price = floatval($order->price); $order->avatar = MerchantUsers::where('id', $request->merchant_user_id)->value('pic') ?? User::DefaultAvatar; if ($order->type == 'consult') { $record = ConsultationRecords::where('trade_no', $order->trade_no)->first(); $order->phone = $record->phone; $order->duration = $record->duration; $order->expect = $record->expect; $order->duration = $record->duration; $order->desc = $record->desc; } return $this->success('ok', $order); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** 打赏订单 * @param Request $request * @param $info_id * @return Factory|Application|JsonResponse|View */ public function payReward(Request $request, $info_id) { try { //用户id $user_id = $request->merchant_user_id; $merchant_user = MerchantUser::select('nickname', 'mobile', 'openid')->where('id', $user_id)->first(); $wechatUser = session('wechat.oauth_user.new'); if ($wechatUser) { $openid = $wechatUser->getId(); } else { $openid = $merchant_user->openid; } if (config('app.debug')) { $openid = 'odh7zsgI75iT8FRh0fGlSojc9PWM'; } $type = $request->type ?? 'reward_info'; if (empty($openid)) throw new \Exception('打赏失败,未获取用户微信信息'); $merchant_id = $request->input('merchant_id'); if (empty($merchant_id)) throw new \Exception("打赏失败,获取到商家id"); $amount = $request->input('amount'); if (empty($amount)) return $this->failure("请输入打赏金额"); if (!is_numeric($amount) || (is_numeric($amount) && $amount < 0)) throw new \Exception('输入打赏金额格式错误'); $trade_no = \CommonUtilsService::getTradeNO(); $order = array( 'open_id' => $openid, 'price' => $amount, 'num' => 1, 'pay_type' => 'wechat', 'type' => $type, 'type_id' => $info_id, 'pay_status' => 0, 'trade_no' => $trade_no, 'from_openid' => $request->input('from_openid'), 'comment' => $request->input('comment'), 'merchant_id' => $merchant_id, 'account_id' => $user_id, 'name' => $merchant_user->nickname, 'mobile' => $merchant_user->mobile ?? 0, 'withdrawal_radio' => 100, ); if ($type == 'reward_info') { $title = MerchantInformation::where('id', $info_id)->value('title'); $title = '文章打赏:' . $title; } elseif ($type == 'reward_activity') { $title = CommunityActivity::where('id', $info_id)->value('title'); $title = '活动打赏:' . $title; } else { $title = '用户打赏'; } $order = Order::create($order); $callback = config('app.url') . '/api/s/h5/callback/reward/order/' . $trade_no; $wx_pay = \WechatService::constructSWXPay($order, $openid, $title, $callback); $order['wx_pay'] = $wx_pay; return $this->success('ok', $order); } catch (\Exception $e) { $this->getError($e); return $this->failure('ok', $order); } } /** * 商户版 --购买商城商品 * @param Request $request * @return Factory|Application|JsonResponse|View */ public function BusinessMerchantShop(Request $request) { try { $buy_type = $request->buy_type ?? 'normal';//normal:单独购买 group:拼团购买 $wechatUser = session('wechat.oauth_user.new'); $history_id = $request->history_id; $merchant_user_id = $request->merchant_user_id ?? 0; if ($wechatUser) { $openid = $wechatUser->getId(); } else { $openid = MerchantUsers::where('id', $merchant_user_id)->value('openid'); } $goods = '默认规格'; $result = MerchantShop::where('id', $request->id)->where('is_show', 1)->first(); if (!$result) return $this->failure('你购买的商品不存在或已下架。'); $sku_id = $request->sku_id; if (!$sku_id && $result->pay_type == 'wechat') return $this->failure('规格参数不存在,请稍后再试。'); if ($sku_id) { $skus = json_decode($result->sku, true); $skus = array_column($skus, null, 'sku_id'); $sku = $skus[$sku_id]; $price = $sku['price']; $goods = $sku['name']; $desc = $result->title . '-' . $sku['name']; } else { $price = $result->price; $desc = $result->title; $goods = $result->describe; ; } $group_id = null; if ($buy_type && $buy_type == 'group') { $time = date('Y-m-d H:i:s'); $group = CollageGroup::where('type', 'shop')->where('type_id', $request->id)->first(); if (!$group) return $this->failure('拼团信息不存在'); $group_sku = json_decode($group->sku, true) ?? null; if ($group_sku && sizeof($group_sku) > 0) { $group_skus = array_column($group_sku, null, 'sku_id'); $sku = $group_skus[$sku_id]; $price = $sku['discount_price']; } else { $price = $group->price; } $group_id = $group->id; $history = CollageGroupHistories::where('id', $history_id)->first(); if ($history) { if ($history->deadline < $time) return $this->failure('你慢了一步,拼团已过有效期'); if ($history->status == 1) return $this->failure('你慢了一步,该团已被他人完成'); $m_order_ids = CollageGroupHistories::where('group_id', $history->group_id) ->where('m_user_id', $merchant_user_id)->where('status', 0)->where('deadline', '>', $time) ->pluck('m_order_id')->toArray(); $exists = TouristOrder::whereIn('id', $m_order_ids)->whereIn('pay_status', [1, 4])->first(); if ($exists) return $this->failure('该活动你有尚未完成的拼团,请耐心等待'); $exists = CollageGroupHistories::with('tOrder')->whereHas('tOrder', function ($sql) { $sql->whereIn('pay_status', [1, 4]); }) ->where('group_id', $group->id)->where('m_user_id', $merchant_user_id) ->where('status', 1) ->first(); if ($exists) return $this->failure('你已成功拼团参与过该活动,无需重复参与'); } } $pay_price = $request->num * $price; // if($pay_price!=$request->price) return $this->failure('支付价格与商品价格不一致。'); $anchor = Anchor::where('id', $result->anchor_id)->first(); $trade_no = $this->getTradeNo(); list($pay_type, $sub_mch_id) = MerchantAccount::payType($request->merchant_id); $TouristOrder = new Order(); $TouristOrder->open_id = $openid; $TouristOrder->price = floatval($pay_price); $TouristOrder->pay_type = $pay_type == 'partner' ?: $result->pay_type; $TouristOrder->type = 'shop'; $TouristOrder->num = $request->num; $TouristOrder->type_id = $request->id; $TouristOrder->trade_no = $trade_no; $TouristOrder->group_id = $group_id; $TouristOrder->desc = $desc; $TouristOrder->from_openid = $request->from_openid; $TouristOrder->share_channel_id = $request->share_channel_id; $TouristOrder->merchant_id = $request->merchant_id ?? 0; $TouristOrder->account_id = $merchant_user_id; $TouristOrder->name = $request->name; $TouristOrder->mobile = $request->mobile; $TouristOrder->withdrawal_radio = $anchor->withdrawal_radio ?? 100; $TouristOrder->goods = $goods; $TouristOrder->alliance_id = $request->alliance_id ?? null; $ShopRecive = new ShopRecive(); $ShopRecive->name = $request->name; $ShopRecive->mobile = $request->mobile; $ShopRecive->address = $request->address; $ShopRecive->order_status = $request->order_status ?? 0; $ShopRecive->account_id = $request->merchant_user_id ?? 0; $ShopRecive->merchant_id = $request->merchant_id ?? 0; if ($price == 0) { $TouristOrder->pay_status = 1; $TouristOrder->save(); $ShopRecive->order_id = $TouristOrder->id; $ShopRecive->save(); $TouristOrder->pay_config = null; $TouristOrder->wx_pay = []; $TouristOrder->address = $request->address; //发送通知 $way = 'merchant'; $res = MerchantShop::where('id', $TouristOrder->type_id)->first(); //给用户 \CommonUtilsService::sendBuySuccessNoticeToUser( $res, $TouristOrder->open_id, $TouristOrder->type, $TouristOrder->trade_no, $TouristOrder->price ); //给商户 $merchant = MerchantAccount::where('id', $TouristOrder->merchant_id)->first(); $merchant_openid = $merchant->openid ?? ''; if (!$merchant_openid) { $merchant_openid = Anchor::where('m_id', $res->merchant_id)->value('openid'); } \CommonUtilsService::sendBuySuccessNoticeToBusiness( $res, $merchant_openid, $way, $TouristOrder->price, $TouristOrder->mobile, $TouristOrder->name ); if ($TouristOrder->merchant_id == 491) { //给客服脱单姐 管理员 $openids = [ "oPC_2vn6Q3M5jQpw9xAS7NNCMfjs", "oPC_2vudkf3stdiNgjA-e2n6t9_M", "oPC_2vtrwOLgWHLwVEFTFsJ7N7fw", "oPC_2vt7nGwKk_OFzJL70SlVuTiU", "oPC_2vg_Eur-Wa_Vwnx9JiyRVn9Q " ]; foreach ($openids as $openid) { \CommonUtilsService::sendBuySuccessNoticeToBusiness( $res, $openid, 'merchant', $TouristOrder->price, $TouristOrder->mobile, $TouristOrder->namee ); } } //发送推荐人 if ($TouristOrder->from_openid && $TouristOrder->from_openid != 'null') { $way = 'recommend'; \CommonUtilsService::sendBuySuccessNoticeToBusiness( $res, $TouristOrder->from_openid, $way, $TouristOrder->price, $TouristOrder->mobile, $TouristOrder->name ); } //短信通知商家 $jump_url = env('APP_URL') . '/pu_m/#/earningsRecord?merchant_id=' . $merchant->id; $short_url = \CommonUtilsService::shortUrl(env('APP_URL') . '/h5/#/jump_url?url=' . $jump_url); $title = $res->title; if (mb_strlen($title) > 5) { $title = mb_substr($title, 0, 5, 'utf-8') . '...'; } $message = '有用户下单了~ ' . $TouristOrder->name . '购买了平台的《' . $title . '》' . $TouristOrder->price . '元,点击' . $short_url['url'] . ' 查看详情'; Messenger::sendSMS($merchant->mobile, $message); //增加记录 Message::create([ 'phone' => $merchant->mobile, 'message' => $message, 'confirmed' => 1, 'code' => '购买通知', 'ip' => request() ? request()->ip() : '127.0.0.1', ]); //插入购买通知 $content = $TouristOrder->name . '购买了【' . $res->title . '】查看订单详情>>'; SaasNotice::addRecord( $TouristOrder->merchant_id, $TouristOrder->account_id, 'order', $TouristOrder->id, $content, 0 ); return $this->success('ok', $TouristOrder); } $TouristOrder->save(); $ShopRecive->order_id = $TouristOrder->id; $ShopRecive->save(); if ($buy_type == 'group') { if ($request->history_id) { $history = CollageGroupHistories::find($request->history_id); $deadline = $history->deadline; $is_initiator = 0; $CollageGroupHistories = new CollageGroupHistories(); $CollageGroupHistories->m_user_id = $TouristOrder->account_id; $CollageGroupHistories->group_id = $TouristOrder->group_id; $CollageGroupHistories->m_order_id = $TouristOrder->id; $CollageGroupHistories->group_master_id = $request->history_id; $CollageGroupHistories->is_initiator = $is_initiator; $CollageGroupHistories->status = 0; $CollageGroupHistories->deadline = $deadline; $CollageGroupHistories->save(); } else { //分享不带history_id 就是团长 $deadline = date('Y-m-d H:i:s', strtotime('+' . $group->expire_in . 'hours')); $is_initiator = 1; $CollageGroupHistories = new CollageGroupHistories(); $CollageGroupHistories->m_user_id = $TouristOrder->account_id; $CollageGroupHistories->group_id = $TouristOrder->group_id; $CollageGroupHistories->m_order_id = $TouristOrder->id; $CollageGroupHistories->is_initiator = $is_initiator; $CollageGroupHistories->status = 0; $CollageGroupHistories->deadline = $deadline; $CollageGroupHistories->save(); $CollageGroupHistories->group_master_id = $CollageGroupHistories->id; $CollageGroupHistories->save(); } } $callback = config('app.url') . '/api/app/callback/Community/' . $trade_no; $attributes = array( 'trade_type' => 'JSAPI', // JSAPI,NATIVE,APP... 'body' => $desc, 'detail' => $result->title, 'out_trade_no' => $trade_no, 'total_fee' => round($price * 100) * $request->num, 'notify_url' => $callback, // 支付结果通知网址,如果不设置则会使用配置里的默认地址 'openid' => $openid, 'order_id' => $TouristOrder->id, ); if ($pay_type == 'partner') { $result = WechatService::partnerPay($TouristOrder->id, $sub_mch_id, $price * $request->num, $openid, $trade_no, $callback, $desc); } else { $result = WechatService::officialPay($attributes); } //$result = \WechatService::officialPay($attributes); return $this->success('ok', $result); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 商户版- 购买社区活动 * @param Request $request * @return Factory|Application|JsonResponse|View */ public function BusinessCommunityPayOrder(Request $request) { try { $time = date('Y-m-d H:i:s'); $history_id = $request->history_id; $buy_type = $request->buy_type ?? 'normal';//normal:单独购买 group:拼团购买 $wechatUser = session('wechat.oauth_user.new'); $merchant_user_id = $request->merchant_user_id ?? 0; $sign_buy = $request->sign_buy; $user_coupon_id = $request->user_coupons_id; $MerchantUser = MerchantUsers::select('openid', 'mobile', 'nickname')->where('id', $merchant_user_id) ->first(); if ($wechatUser) { $openid = $wechatUser->getId(); } else { $openid = $MerchantUser->openid; } if ($user_coupon_id && $buy_type == 'group') { return $this->failure('优惠券与团购不能同时使用'); } $result = CommunityActivity::where('id', $request->id)->first(); if (!$result) return $this->failure('你参与的活动不存在或已下架。'); // if (empty($result->status)) return $this->failure("该活动已下架"); //活动不能重复参与 if ($result->class == 'one' && $result->merchant_id != 44) { $is_join = TouristOrder::where('type', 'community')->where('type_id', $request->id) ->whereIn('pay_status', [1, 4])->where('account_id', $merchant_user_id) ->first(); if ($is_join) return $this->failure('已参与,请勿重复报名'); } if ($result->class == 'one' && $result->apply_deadline) { if ($result->apply_deadline <= $time) { if (!$sign_buy) { return $this->failure('该活动已截止报名,看看其他活动吧'); } } } $sku_id = $request->sku_id; if (!$sku_id && $result->pay_type == 'wechat') return $this->failure('规格参数不存在,请稍后再试。'); if ($user_coupon_id) { //$result_array = $result->toArray(); $user_coupon = UserCoupon::where('id', $user_coupon_id)->where('status', 0) ->where('m_id', $request->merchant_id)->where('m_user_id', $merchant_user_id) ->first(); if (!$user_coupon) { return $this->failure('用户优惠券不存在'); } $coupon = Coupon::where('id', $user_coupon->coupons_id)->where('type_id', $result['id']) ->where('type', 'community') ->where('m_id', $request->merchant_id) ->first(); if (!$coupon) { return $this->failure('优惠券不存在'); } } if ($sku_id) { $skus = json_decode($result['sku'], true); $skus = array_column($skus, null, 'sku_id'); $sku = $skus[$sku_id]; $total_limit_num = $sku['total_limit_num'] ?? 0; $sku_buy_num = (new Order)->getSkuBuyNum($request->id, $request->merchant_id, $sku_id); if ($total_limit_num && $total_limit_num < ($sku_buy_num + count($request->linkmen))) { return $this->failure('报名人数已超限制'); } $member_num = count($request->linkmen); $member_num = $request->num ?: $member_num; if ($user_coupon_id) { switch ($coupon->coupon_type) { case 1: $price = 0.00; break; case 2: if (isset($sku['num']) && $sku['num'] == 0) {//不限人数, 通过报名信息判断数量 $price = number_format($sku['price'] * $member_num * $coupon->discount_rate, 2, '.', ''); } else { $price = number_format($sku['price'] * $coupon->discount_rate, 2, '.', ''); } break; case 3: if (isset($sku['num']) && $sku['num'] == 0) { $price = number_format($sku['price'] * $member_num - $coupon->discount_rate, 2, '.', ''); } else { $price = number_format($sku['price'] - $coupon->discount_rate, 2, '.', ''); } // if ($price <= 0 && $sku['price'] != 0) return $this->failure("优惠券不适合此规格"); break; default: $price = $sku['price']; break; } } else { if (isset($sku['num']) && $sku['num'] == 0) {//不限人数, 通过报名信息判断数量 $price = number_format($sku['price'] * $member_num, 2, '.', ''); } else { $price = $sku['price']; } } $desc = $result['title'] . '-' . $sku['name'] . ''; $goods = $sku['name'] . ''; } else { if ($user_coupon_id) { $user_coupon = UserCoupon::where('id', $user_coupon_id)->with('coupon') ->first(); if ($user_coupon && $user_coupon->coupon) { switch ($user_coupon->coupon->coupon_type) { case 1: $price = 0.00; break; case 2: $price = number_format($result['price'] * $user_coupon->coupon->discount_rate, 2); break; case 3: $temp = number_format($result['price'] - $user_coupon->coupon->discount_rate, 2); if ($temp < 0) { $price = 0.00; } else { $price = $temp; } break; default: $price = $result['price']; break; } } } else { $price = $result['price']; } $goods = null; $desc = $result['title']; } $group_id = null; if ($buy_type && $buy_type == 'group') { $time = date('Y-m-d H:i:s'); $group = CollageGroup::where('type', 'community')->where('type_id', $request->id)->first(); if (!$group) return $this->failure('拼团信息不存在'); $sku = json_decode($group->sku, true) ?? null; if (sizeof($sku) > 0) { foreach ($sku as $key => $value) { foreach ($value as $vk => $vv) { if ($vk == 'sku_id' && $vv == $sku_id) { $price = $value['discount_price']; break; } } } } else { $price = $group->price; } $group_id = $group->id; $history_id = $request->history_id; $history = CollageGroupHistories::where('id', $history_id)->first(); if ($history) { if ($history->deadline < $time) return $this->failure('你慢了一步,拼团已过有效期'); if ($history->status == 1) return $this->failure('你慢了一步,该团已被他人完成'); $m_order_ids = CollageGroupHistories::where('group_id', $history->group_id) ->where('m_user_id', $merchant_user_id)->where('status', 0)->where('deadline', '>', $time) ->pluck('m_order_id')->toArray(); $exists = TouristOrder::whereIn('id', $m_order_ids)->whereIn('pay_status', [1, 4])->first(); if ($exists) return $this->failure('该活动你有尚未完成的拼团,请耐心等待'); $exists = CollageGroupHistories::with('tOrder')->whereHas('tOrder', function ($sql) { $sql->whereIn('pay_status', [1, 4]); }) ->where('group_id', $group->id)->where('m_user_id', $merchant_user_id) ->where('status', 1) ->first(); if ($exists) return $this->failure('你已成功拼团参与过该活动,无需重复参与'); } } $anchor = Anchor::where('id', $result->anchor_id)->first(); if ($request->merchant_id == 44 || $request->merchant_id == 69) { $trade_no = "saas_" . $this->getTradeNO(); } else { $trade_no = $this->getTradeNo(); } list($pay_type, $sub_mch_id) = MerchantAccount::payType($request->merchant_id); $TouristOrder = new Order(); $TouristOrder->open_id = $openid; $TouristOrder->price = floatval($price); $TouristOrder->pay_type = $pay_type == "partner" ? $pay_type : $result->pay_type; $TouristOrder->type = 'community'; $TouristOrder->type_id = $request->id; $TouristOrder->trade_no = $trade_no; $TouristOrder->desc = $desc; $TouristOrder->goods = $goods; if ($user_coupon_id) { $TouristOrder->user_coupon_id = $user_coupon_id; } if ($buy_type && $buy_type == 'group') { $TouristOrder->group_id = $group_id; } $TouristOrder->from_openid = $request->from_openid; $TouristOrder->share_channel_id = $request->share_channel_id; $TouristOrder->merchant_id = $request->merchant_id ?? 0; $TouristOrder->account_id = $merchant_user_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->area_code = $request->area_code; $TouristOrder->insurance = $result->insurance; if ($request->insurance_info) $TouristOrder->insurance_info = json_encode($request->insurance_info); if (is_array($request->linkmen) && count($request->linkmen)) { $linkmen = $request->linkmen; foreach ($linkmen as &$linkman) { if (!$linkman['mobile']) $linkman['mobile'] = "18888888888"; if (!$linkman['name']) $linkman['name'] = "嘉宾"; if (isset($linkman['sex']) && empty($linkman['sex'])) $linkman['sex'] = "男"; } $TouristOrder->linkmen = json_encode($linkmen); } else { return $this->failure("请填写报名人信息"); } $TouristOrder->withdrawal_radio = $anchor->withdrawal_radio ?? 100; $TouristOrder->alliance_id = $request->alliance_id ?? null; $TouristOrder->sku_id = $sku_id; if ($price == 0) { if ($TouristOrder->type == 'community') { $TouristOrder->remark = $this->numMember($TouristOrder); } $way = 'merchant'; $merchant = MerchantAccount::where('id', $result->merchant_id)->first(); $TouristOrder->pay_status = 1; $TouristOrder->save(); $TouristOrder->pay_config = null; $TouristOrder->wx_pay = []; //发送通知 //判断是服务还是活动 $res = CommunityActivity::where('id', $TouristOrder->type_id)->first(); if ($res->class == 'one') $class = 'activity'; if ($res->class == 'many') $class = 'service'; \CommonUtilsService::sendBuySuccessNoticeToUser( $res, $TouristOrder->open_id, $class, $trade_no, $TouristOrder->price ); //发送商户 $merchant_openid = $merchant->openid ?? ''; if (!$merchant_openid) { $merchant_openid = Anchor::where('id', $res->anchor_id)->value('openid'); } \CommonUtilsService::sendBuySuccessNoticeToBusiness( $res, $merchant_openid, $way, $TouristOrder->price, $TouristOrder->mobile, $TouristOrder->name ); //发送推荐人 if ($TouristOrder->from_openid && $TouristOrder->from_openid != 'null') { $way = 'recommend'; \CommonUtilsService::sendBuySuccessNoticeToBusiness( $res, $TouristOrder->from_openid, $way, $TouristOrder->price, $TouristOrder->mobile, $TouristOrder->name ); } if ($TouristOrder->merchant_id == 491) { //给客服脱单姐 管理员 $openids = [ "oPC_2vn6Q3M5jQpw9xAS7NNCMfjs", "oPC_2vudkf3stdiNgjA-e2n6t9_M", "oPC_2vtrwOLgWHLwVEFTFsJ7N7fw", "oPC_2vt7nGwKk_OFzJL70SlVuTiU", "oPC_2vg_Eur-Wa_Vwnx9JiyRVn9Q " ]; foreach ($openids as $openid) { \CommonUtilsService::sendBuySuccessNoticeToBusiness($res, $openid, 'merchant', $TouristOrder->price, $TouristOrder->mobile, $TouristOrder->name); } } $users = new UserMember(); $users->type = 'community'; $users->type_id = $result->id; $users->m_id = $request->merchant_id ?? 0; $users->m_user_id = $merchant_user_id; if ($user_coupon_id) { $users->coupons_id = $user_coupon_id; $users->pay_type = 'coupon'; } else { $users->pay_type = 'wechat'; } $users->save(); if ($user_coupon_id) { $user_coupon->status = 1; $user_coupon->save(); } if (count($request->linkmen) > 1) { //多报名人信息 增加手动报名记录 AddVirtualMember::dispatch($request->linkmen, $res, $TouristOrder)->onQueue('love'); } //添加购买通知记录 $content = $result->name . '购买了【' . $res->title . '】查看订单详情>>'; SaasNotice::addRecord( $TouristOrder->merchant_id, $TouristOrder->account_id, 'order', $TouristOrder->id, $content, 0 ); // 友福活动将被邀请人添加到客户 $orderService = new OrderService(); $orderService->storeUftxCustomer($TouristOrder); return $this->success('ok', $TouristOrder); } else { $TouristOrder->save(); if ($buy_type == 'group') { if ($request->history_id) { $history = CollageGroupHistories::find($request->history_id); $deadline = $history->deadline; $is_initiator = 0; $CollageGroupHistories = new CollageGroupHistories(); $CollageGroupHistories->m_user_id = $TouristOrder->account_id; $CollageGroupHistories->group_id = $TouristOrder->group_id; $CollageGroupHistories->m_order_id = $TouristOrder->id; $CollageGroupHistories->group_master_id = $request->history_id; $CollageGroupHistories->is_initiator = $is_initiator; $CollageGroupHistories->status = 0; $CollageGroupHistories->deadline = $deadline; $CollageGroupHistories->save(); } else { //分享不带history_id 就是团长 $deadline = date('Y-m-d H:i:s', strtotime('+' . $group->expire_in . 'hours')); $is_initiator = 1; $CollageGroupHistories = new CollageGroupHistories(); $CollageGroupHistories->m_user_id = $TouristOrder->account_id; $CollageGroupHistories->group_id = $TouristOrder->group_id; $CollageGroupHistories->m_order_id = $TouristOrder->id; $CollageGroupHistories->is_initiator = $is_initiator; $CollageGroupHistories->status = 0; $CollageGroupHistories->deadline = $deadline; $CollageGroupHistories->save(); $CollageGroupHistories->group_master_id = $CollageGroupHistories->id; $CollageGroupHistories->save(); } } $callback = config('app.url') . '/api/app/callback/Community/' . $trade_no; $attributes = array( 'trade_type' => 'JSAPI', // JSAPI,NATIVE,APP... 'body' => $desc, 'detail' => $result->title, 'out_trade_no' => $trade_no, 'total_fee' => round($price * 100), 'notify_url' => $callback, // 支付结果通知网址,如果不设置则会使用配置里的默认地址 'openid' => $openid, 'order_id' => $TouristOrder->id, ); if ($pay_type == 'partner') { $res = WechatService::partnerPay($TouristOrder->id, $sub_mch_id, $price, $attributes['openid'], $attributes['out_trade_no'], $attributes['notify_url'], $attributes['body']); } else { $res = WechatService::officialPay($attributes); } return $this->success('ok', $res); } } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function payCommunityOrder($request, $id, $user_id, $openid) { $sign_buy = $request->sign_buy; $result = CommunityActivity::where('id', $id)->where('status', 1)->first(); if (!$result) return ['code' => 1, 'msg' => '你参与的活动不存在或已下架。']; //活动不能重复参与 if ($result->class == 'one' && $result->merchant_id != 44) { $is_join = TouristOrder::where('type', 'community')->where('type_id', $id) ->whereIn('pay_status', [1, 4])->where('account_id', $user_id) ->first(); if ($is_join) return ['code' => 1, 'msg' => '已参与,请勿重复报名']; } if ($result->class == 'one' && $result->apply_deadline) { if ($result->apply_deadline <= date('Y-m-d H:i:s')) { if (!$sign_buy) { return ['code' => 1, '该活动已截止报名,看看其他活动吧']; } } } $sku_id = $request->sku_id; if (!$sku_id && $result->pay_type == 'wechat') return ['code' => 1, '规格参数不存在,请稍后再试。']; if ($sku_id) { $skus = json_decode($result->sku, true); $skus = array_column($skus, null, 'sku_id'); $sku = $skus[$sku_id]; $price = $sku['price']; $desc = $result->title . '-' . $sku['name'] . ''; $goods = $sku['name'] . ''; } else { $price = $result->price; $goods = null; $desc = $result->title; } $anchor = Anchor::where('id', $result->anchor_id)->first(); $trade_no = $this->getTradeNo(); $order = new Order(); $order->open_id = $openid; $order->price = floatval($price); $order->pay_type = $result->pay_type; $order->type = 'community'; $order->type_id = $request->id; $order->trade_no = $trade_no; $order->desc = $desc; $order->goods = $goods; $order->from_openid = $request->from_openid; $order->share_channel_id = $request->share_channel_id; $order->merchant_id = $request->merchant_id ?? 0; $order->account_id = $user_id; $link_name = $request->linkmen['name'] ?? ($request->linkmen[0]['name'] ?? null); $link_mobile = $request->linkmen['mobile'] ?? ($request->linkmen[0]['mobile'] ?? ''); $order->name = $request->name ?? ($MerchantUser->nickname ?? $link_name); $order->mobile = $request->mobile ?? ($MerchantUser->mobile ?? $link_mobile); $order->area_code = $request->area_code; $order->insurance = $result->insurance; if ($request->insurance_info) $order->insurance_info = json_encode($request->insurance_info); if ($request->linkmen) $order->linkmen = json_encode($request->linkmen); $order->withdrawal_radio = $anchor->withdrawal_radio ?? 100; $order->alliance_id = $request->alliance_id ?? null; $order->sku_id = $request->sku_id; if ($price == 0) { $order->pay_status = 1; $way = 'merchant'; $merchant = MerchantAccount::where('id', $result->merchant_id)->first(); $order->pay_status = 1; $order->save(); $order->pay_config = null; $order->wx_pay = []; //发送通知 //判断是服务还是活动 $res = CommunityActivity::where('id', $order->type_id)->first(); if ($res->class == 'one') $class = 'activity'; if ($res->class == 'many') $class = 'service'; \CommonUtilsService::sendBuySuccessNoticeToUser( $res, $order->open_id, $class, $trade_no, $order->price ); //发送商户 $merchant_openid = $merchant->openid ?? ''; if (!$merchant_openid) { $merchant_openid = Anchor::where('id', $res->anchor_id)->value('openid'); } \CommonUtilsService::sendBuySuccessNoticeToBusiness( $res, $merchant_openid, $way, $order->price, $order->mobile, $order->name ); //发送推荐人 if ($order->from_openid && $order->from_openid != 'null') { $way = 'recommend'; \CommonUtilsService::sendBuySuccessNoticeToBusiness( $res, $order->from_openid, $way, $order->price, $order->mobile, $order->name ); } //添加购买通知记录 $content = $result->name . '购买了【' . $res->title . '】查看订单详情>>'; SaasNotice::addRecord( $order->merchant_id, $order->account_id, 'order', $order->id, $content, 0 ); return ['code' => 0, 'data' => $order]; } $order->save(); $order->need_pay = $price ? 1 : 0; return ['code' => 0, 'data' => $order]; } public function payCourseOrder($request, $course_id, $user_id, $openid) { $course = Course::where('id', $course_id)->first(); if (empty($course)) return ['code' => 1, 'msg' => "该课程已下线"]; $trade_no = $this->getTradeNo(); $merchant_user = MerchantUser::where('id', $user_id)->first(); $order = new TouristOrder(); $order->open_id = $openid; $order->price = floatval($course->charge); $order->pay_type = 'wechat'; $order->type = 'course'; $order->type_id = $course_id; $order->trade_no = $trade_no; $order->desc = $course->title; $order->from_openid = $request->from_openid; $order->share_channel_id = $request->share_channel_id; $order->merchant_id = $request->merchant_id; $order->account_id = $request->merchant_user_id; $link_name = $request->linkmen['name'] ?? ($request->linkmen[0]['name'] ?? null); $link_mobile = $request->linkmen['mobile'] ?? ($request->linkmen[0]['mobile'] ?? ''); $order->name = $request->name ?? ($MerchantUser->nickname ?? $link_name); $order->mobile = $request->mobile ?? ($MerchantUser->mobile ?? $link_mobile); $order->area_code = $request->area_code; $order->alliance_id = $request->alliance_id ?? null; if ($request->has('mobile')) { $mobile = $request->mobile; } else { $mobile = $merchant_user->mobile; } // if($user_coupon_id){ // $order->user_coupon_id = $user_coupon_id; // } $order->mobile = $mobile ?: '匿名用户'; $order->withdrawal_radio = 100; $user_course = new UserCourses(); $user_course->user_id = 0; $user_course->course_id = $course_id; $user_course->type = 'business'; $user_course->trade_no = $trade_no; $user_course->status = 0; $user_course->open_id = $openid; $user_course->merchant_user_id = $user_id; if ($course->charge == 0) { $way = 'merchant'; $order->pay_status = 1; $order->save(); $user_course->status = 1; $user_course->save(); if (!empty($user_coupon)) { $user_coupon->status = 1; $user_coupon->save(); } //发送通知 //给用户 \CommonUtilsService::sendBuySuccessNoticeToUser( $course, $order->open_id, $order->type, $trade_no, $order->price ); //给商户 $merchant_openid = $course->open_id; if (empty($merchant_id)) $merchant_openid = Anchor::where('m_id', $order->merchant_id) ->value('openid'); \CommonUtilsService::sendBuySuccessNoticeToBusiness( $course, $merchant_openid, $way, $order->price, $order->mobile, $order->name ); //发送推荐人 if ($order->from_openid && $order->from_openid != 'null') { $way = 'recommend'; \CommonUtilsService::sendBuySuccessNoticeToBusiness( $course, $order->from_openid, $way, $order->price, $order->mobile, $order->name ); } //短信通知商家 $jump_url = env('APP_URL') . '/pu_m/#/earningsRecord?merchant_id=' . $order->merchant_id; $short_url = \CommonUtilsService::shortUrl(env('APP_URL') . '/h5/#/jump_url?url=' . $jump_url); $title = $course->title; if (mb_strlen($title) > 5) { $title = mb_substr($title, 0, 5, 'utf-8') . '...'; } $message = '有用户下单了~ ' . $order->name . '购买了平台的《' . $title . '》' . $order->price . '元,点击' . $short_url['url'] . ' 查看详情'; $anchor_mobile = Anchor::where('id', $request->merchant_id)->value('mobile'); $this->sentMessage($anchor_mobile, $message); $content = $order->name . '购买了【' . $course->title . '】查看订单详情>>'; SaasNotice::addRecord( $order->merchant_id, $order->account_id, 'order', $order->id, $content, 0 ); $user_course->save(); } $order->save(); $order->need_pay = $course->charge ? 1 : 0; return ['code' => 0, 'data' => $order]; } public function payConsultOrder($request, $consult_id, $user_id, $openid) { $num = $request->num ?? 1; $trade_no = $this->getTradeNO(); $from_open_id = $request->from_openid ?? null; $history_id = $request->history_id; $buy_type = $request->buy_type ?? 'normal';//normal:单独购买 group:拼团购买 $user = MerchantUser::where('id', $user_id)->first(); if (!$user) throw new \Exception("用户信息不存在"); $config = Consultation::where('id', $consult_id)->first(); if (empty($config)) return ['code' => 1, 'msg' => "该咨询已下线"]; $link_name = $request->linkmen['name'] ?? ($request->linkmen[0]['name'] ?? null); $link_mobile = $request->linkmen['mobile'] ?? ($request->linkmen[0]['mobile'] ?? ''); $group_id = null; if ($buy_type && $buy_type == 'group') { $time = date('Y-m-d H:i:s'); $group = CollageGroup::where('type', 'community')->where('type_id', $request->id)->first(); if (!$group) return $this->failure('拼团信息不存在'); $price = $group->price; $group_id = $group->id; $history_id = $request->history_id; if ($history_id) { $history = CollageGroupHistories::where('id', $history_id)->first(); if ($history) { if ($history->deadline < $time) return $this->failure('你慢了一步,拼团已过有效期'); if ($history->status == 1) return $this->failure('你慢了一步,该团已被他人完成'); $m_order_ids = CollageGroupHistories::where('group_id', $history->group_id) ->where('m_user_id', $user_id)->where('status', 0)->where('deadline', '>', $time) ->pluck('m_order_id')->toArray(); $exists = TouristOrder::whereIn('id', $m_order_ids)->whereIn('pay_status', [1, 4])->first(); if ($exists) return $this->failure('该活动你有尚未完成的拼团,请耐心等待'); $exists = CollageGroupHistories::with('tOrder')->whereHas('tOrder', function ($sql) { $sql->whereIn('pay_status', [1, 4]); }) ->where('group_id', $group->id)->where('m_user_id', $user_id) ->where('status', 1) ->first(); if ($exists) return $this->failure('你已成功拼团参与过该活动,无需重复参与'); } } } $consult_record = new ConsultationRecords(); $consult_record->anchor_id = 0; $consult_record->merchant_id = $request->merchant_id; $consult_record->merchant_user_id = $request->merchant_user_id; $consult_record->consulation_id = $consult_id; $consult_record->name = $link_name; $consult_record->phone = $link_mobile; $consult_record->price = $config->price ?? 0; $consult_record->num = $num; $consult_record->type = $request->type ?? 'voice'; $consult_record->class = $request->class; $consult_record->expect = $request->expect; $consult_record->desc = $request->desc; $consult_record->pay_status = 0; $consult_record->duration = $config->duration; $consult_record->Remaining_duration = $config->duration * 60; $consult_record->viewer_id = 0; $consult_record->trade_no = $trade_no; $consult_record->from_open_id = $from_open_id; $order = new TouristOrder(); $order->open_id = $openid; $order->price = $config->price; $order->type_id = $request->consultation_id; $order->pay_type = 'wechat'; $order->type = 'consult'; if ($buy_type && $buy_type == 'group') { $order->group_id = $group_id; } $order->withdrawal_radio = 100; $order->pay_status = 0; $order->trade_no = $trade_no; $order->from_openid = $from_open_id; $order->share_channel_id = $request->share_channel_id; $order->desc = $config->title; $order->name = $request->name ?? ($MerchantUser->nickname ?? $link_name); $order->mobile = $request->mobile ?? ($MerchantUser->mobile ?? $link_mobile); $order->merchant_id = $request->merchant_id; $order->account_id = $request->merchant_user_id; $order->alliance_id = $request->alliance_id ?? null; if ($config->price == 0) { $consult_record->pay_status = 1; $order->pay_status = 1; $consult_record->save(); $order->save(); $data['status'] = 1; $data['id'] = $consult_record->id; //通知用户 $way = 'consulation'; $type = 'merchant'; $res = Consultation::where('id', $consult_record->consulation_id)->first(); \CommonUtilsService::sendBuySuccessNoticeToUser($res, $openid, $way, $trade_no, $consult_record->price); $merchant = MerchantAccount::where('id', $consult_record->merchant_id)->first(); $merchant_openid = $merchant->openid; if (empty($merchant_openid)) $merchant_openid = Anchor::where('m_id', $merchant->id)->value('openid'); //通知商户 \CommonUtilsService::sendBuySuccessNoticeToBusiness($res, $merchant_openid, $type, $order->price, $order->mobile, $order->name); //发送推荐人 if ($order->from_openid && $consult_record->from_openid != 'null') { $type = 'recommend'; \CommonUtilsService::sendBuySuccessNoticeToBusiness($res, $order->from_openid, $type, $order->price, $order->mobile, $order->name); } //短信通知商家 $jump_url = env('APP_URL') . '/pu_m/#/earningsRecord?merchant_id=' . $merchant->id; $short_url = \CommonUtilsService::shortUrl(env('APP_URL') . '/h5/#/jump_url?url=' . $jump_url); $title = $res->title; if (mb_strlen($title) > 5) { $title = mb_substr($title, 0, 5, 'utf-8') . '...'; } $message = '有用户下单了~ ' . $order->name . '购买了平台的《' . $title . '》' . $order->price . '元,点击' . $short_url['url'] . ' 查看详情'; Messenger::sendSMS($merchant->mobile, $message); //增加记录 Message::create([ 'phone' => $merchant->mobile, 'message' => $message, 'confirmed' => 1, 'code' => '购买通知', 'ip' => request() ? request()->ip() : '127.0.0.1', ]); //插入购买通知 // $pay_name = $result->user ? $result->user->nickname : '匿名用户'; $content = $order->name . '购买了【' . $res->title . '】查看订单详情>>'; SaasNotice::addRecord($order->merchant_id, $order->account_id, 'order', $order->id, $content, 0); } $order->save(); $consult_record->save(); $order->need_pay = $config->price ? 1 : 0; return ['code' => 0, 'data' => $order]; } public function payEvaluateOrder($request, $evaluate_id, $user_id, $openid) { $MerchantUser = MerchantUsers::select('openid', 'mobile', 'nickname')->where('id', $user_id) ->first(); $test_item_id = $evaluate_id; $merchant_id = $request->merchant_id; if (!$merchant_id || !$test_item_id) throw new \Exception("缺少商户信息或测评信息"); $trade_no = $this->getTradeNO(); $merchant_evaluates = MerchantEvaluate::where('merchant_id', $merchant_id) ->where('test_item_id', $test_item_id) ->first(); if (!$merchant_evaluates) return ['code' => 1, 'msg' => "该测评已下线"]; if ($merchant_evaluates->type == 1) { //查询一点灵价格 $result = EvaluateService::testDetails($test_item_id); if (!$result) return ['code' => 1, 'msg' => "该测评已下线"]; } else { $result = EvaluateDetail::where('test_item_id', $test_item_id) ->first(); $result->price = $result->price * 100; } //写入订单表 $order = new TouristOrder(); $order->open_id = $openid; $order->price = $result['price'] / 100; $order->num = 1; $order->pay_type = 'wechat'; $order->type = 'evaluate'; $order->type_id = $merchant_evaluates->id; $order->pay_status = 0; $order->goods = '评测_' . $result['title']; $order->trade_no = $trade_no; $order->withdrawal_radio = 100; //分成比例 $order->from_openid = $request->from_openid; $order->share_channel_id = $request->share_channel_id; $order->alliance_id = $request->alliance_id; $link_name = $request->linkmen['name'] ?? ($request->linkmen[0]['name'] ?? null); $link_mobile = $request->linkmen['mobile'] ?? ($request->linkmen[0]['mobile'] ?? ''); $order->name = $request->name ?? ($MerchantUser->nickname ?? $link_name); $order->mobile = $request->mobile ?? ($MerchantUser->mobile ?? $link_mobile); $order->account_id = $user_id; $order->merchant_id = $merchant_id; $order->channel = 0; $order->desc = $result['subtitle']; $order->area_code = null; $order->linkmen = json_encode($request->linkmen); $order->save(); $list = EvaluateList::where('test_item_id', $test_item_id) ->first(); if ($list->type == 1) { //调用一点灵评测下单接口下单 $evaluate = EvaluateService::testCreate($test_item_id, $result['price'], $trade_no); if (!$evaluate) throw new \Exception("第三方未返回数据"); } if ($result['price'] == 0) { $order->pay_status = 1; $order->save(); if ($list->type == 1) { EvaluateService::testUpdate($trade_no); } } $order->save(); $order->need_pay = ($result['price'] > 0) ? 1 : 0; return ['code' => 0, 'data' => $order]; } public function payShopOrder($request, $shop_id, $user_id, $openid) { $shop = MerchantShop::where('id', $shop_id)->where('is_show', 1)->first(); if (!$shop) return ['code' => 1, 'msg' => '你购买的商品不存在或已下架。']; $sku_id = $request->sku_id; if (!$sku_id && $shop->pay_type == 'wechat') return $this->failure('规格参数不存在,请稍后再试。'); if ($sku_id) { $skus = json_decode($shop->sku, true); $skus = array_column($skus, null, 'sku_id'); $sku = $skus[$sku_id]; $price = $sku['price']; $goods = $sku['name']; $desc = $shop->title . '-' . $sku['name']; } else { $price = $shop->price; $desc = $shop->title; $goods = null; } $pay_price = $request->num * $price; // if($pay_price!=$request->price) return $this->failure('支付价格与商品价格不一致。'); $anchor = Anchor::where('id', $shop->anchor_id)->first(); $trade_no = $this->getTradeNo(); $order = new Order(); $order->open_id = $openid; $order->price = floatval($pay_price); $order->pay_type = $shop->pay_type; $order->type = 'shop'; $order->num = $request->num ?: 1; $order->type_id = $request->id; $order->trade_no = $trade_no; $order->desc = $desc; $order->from_openid = $request->from_openid; $order->share_channel_id = $request->share_channel_id; $order->merchant_id = $request->merchant_id ?? 0; $order->account_id = $user_id; $link_name = $request->linkmen['name'] ?? ($request->linkmen[0]['name'] ?? null); $link_mobile = $request->linkmen['mobile'] ?? ($request->linkmen[0]['mobile'] ?? ''); $order->name = $request->name ?? ($MerchantUser->nickname ?? $link_name); $order->mobile = $request->mobile ?? ($MerchantUser->mobile ?? $link_mobile); $order->withdrawal_radio = $anchor->withdrawal_radio ?? 100; $order->goods = $goods; $order->alliance_id = $request->alliance_id ?? null; $shop_recive = new ShopRecive(); $shop_recive->name = $request->name; $shop_recive->mobile = $request->mobile; $shop_recive->address = $request->address; $shop_recive->order_status = $request->order_status ?? 0; $shop_recive->account_id = $request->merchant_user_id ?? 0; $shop_recive->merchant_id = $request->merchant_id ?? 0; if ($price == 0) { $order->pay_status = 1; $order->save(); $shop_recive->order_id = $order->id; $shop_recive->save(); // $order->address = $request->address; //发送通知 $way = 'merchant'; //给用户 \CommonUtilsService::sendBuySuccessNoticeToUser( $shop, $order->open_id, $order->type, $order->trade_no, $order->price ); //给商户 $merchant = MerchantAccount::where('id', $order->merchant_id)->first(); $merchant_openid = $merchant->openid ?? ''; if (!$merchant_openid) { $merchant_openid = Anchor::where('m_id', $shop->merchant_id)->value('openid'); } \CommonUtilsService::sendBuySuccessNoticeToBusiness( $shop, $merchant_openid, $way, $order->price, $order->mobile, $order->name ); //发送推荐人 if ($order->from_openid && $order->from_openid != 'null') { $way = 'recommend'; \CommonUtilsService::sendBuySuccessNoticeToBusiness( $shop, $order->from_openid, $way, $order->price, $order->mobile, $order->name ); } //短信通知商家 $jump_url = env('APP_URL') . '/pu_m/#/earningsRecord?merchant_id=' . $merchant->id; $short_url = \CommonUtilsService::shortUrl(env('APP_URL') . '/h5/#/jump_url?url=' . $jump_url); $title = $shop->title; if (mb_strlen($title) > 5) { $title = mb_substr($title, 0, 5, 'utf-8') . '...'; } $message = '有用户下单了~ ' . $order->name . '购买了平台的《' . $title . '》' . $order->price . '元,点击' . $short_url['url'] . ' 查看详情'; Messenger::sendSMS($merchant->mobile, $message); //增加记录 Message::create([ 'phone' => $merchant->mobile, 'message' => $message, 'confirmed' => 1, 'code' => '购买通知', 'ip' => request() ? request()->ip() : '127.0.0.1', ]); //插入购买通知 $content = $order->name . '购买了【' . $shop->title . '】查看订单详情>>'; SaasNotice::addRecord( $order->merchant_id, $order->account_id, 'order', $order->id, $content, 0 ); } $order->save(); $shop_recive->order_id = $order->id; $shop_recive->save(); $order->need_pay = ($price > 0) ? 1 : 0; return ['code' => 0, 'data' => $order]; } public function BusinessPayOrder(Request $request) { try { $wechatUser = session('wechat.oauth_user.new'); $user_id = $request->merchant_user_id ?? 0; $type = $request->input('type'); $merchant_user = MerchantUsers::select('openid', 'mobile', 'nickname')->where('id', $user_id) ->first(); if ($wechatUser) { $openid = $wechatUser->getId(); } else { $openid = $merchant_user->openid; } //活动下单 if ($type == 'activity' || $type == 'service') { $result = $this->payCommunityOrder($request, $request->type_id, $user_id, $openid); } elseif ($type == 'course') { $result = $this->payCourseOrder($request, $request->type_id, $user_id, $openid); } elseif ($type == 'consult') { $result = $this->payConsultOrder($request, $request->type_id, $user_id, $openid); } elseif ($type == 'evaluate') { $result = $this->payEvaluateOrder($request, $request->test_item_id, $user_id, $openid); } elseif ($type == 'shop') { $result = $this->payShopOrder($request, $request->type_id, $user_id, $openid); } if ($result['code'] == 1) return $this->failure($result['msg']); $order = $result['data']; return $this->success('ok', $order); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function isOrderPaid(Request $request, $trade_no) { try { $pay_status = Order::where('trade_no', $trade_no)->value('pay_status'); $is_paid = $pay_status ? 1 : 0; return $this->success('ok', compact('is_paid')); } catch (\Exception $e) { $this->getError($e); return $this->failure(); } } }