love_php/app/Http/Controllers/Server/H5/OrderController.php
2026-04-09 13:52:20 +08:00

1608 lines
72 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Server\H5;
use App\Facades\WechatService;
use App\Jobs\AddVirtualMember;
use App\Models\Consultation;
use App\Models\Coupon;
use App\Models\Course\Course;
use App\Models\Course\CourseVideo;
use App\Models\Course\UserCourses;
use App\Models\Server\CollageGroup;
use App\Models\Server\CollageGroupHistories;
use App\Models\Server\EvaluateDetail;
use App\Models\Server\EvaluateList;
use App\Models\Server\MerchantApplyment;
use App\Models\Server\MerchantEvaluate;
use App\Models\Server\WechatSubMerchant;
use App\Models\UserCoupon;
use App\Models\UserMember;
use App\Services\EvaluateService;
use App\Services\OrderService;
use Illuminate\Contracts\View\Factory;
use Illuminate\Foundation\Application;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\ConsultationRecords;
use App\Models\MerchantShop;
use App\Models\MerchantUsers;
use App\Http\Response\ResponseJson;
use App\Models\CommunityActivity;
use App\Models\Live\Anchor;
use App\Models\Message;
use App\Models\Server\MerchantAccount;
use App\Models\Server\MerchantInformation;
use App\Models\Server\MerchantUser;
use App\Models\Server\SaasNotice;
use App\Models\Server\TouristOrder as Order;
use App\Models\Server\TouristOrder;
use App\Models\ShopRecive;
use App\Models\User;
use App\Utils\Messenger;
use Illuminate\Support\Facades\Log;
use Illuminate\View\View;
class OrderController extends Controller
{
use ResponseJson;
/**
* 订单详情 --商城
* @param $id
* @return Factory|Application|JsonResponse|View
*/
public function order_detail($id)
{
try {
$order = Order::where('id', $id)->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', // JSAPINATIVEAPP...
'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', // JSAPINATIVEAPP...
'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();
}
}
}