sms = $sms;
$this->dynamic = $dynamic;
$this->orderCon = $orderCon;
}
/**
* 等级购买
*/
public function memberCharge(Request $request)
{
$user = auth()->user();
$user_id = $user->id;
if (empty($user_id)) {
return $this->failure('no user_id');
}
$rank_id = $request->input('rank_id', 0);
if (empty($rank_id)) {
return $this->failure('请选择会员');
}
$rank = Rank::find($rank_id);
if (empty($rank)) {
return $this->failure('请选择会员');
}
$trade_no = $this->getTradeNO();
$type = $request->input('type', 'rank');//rank:自己充值 rank_other:替别人充值
$score = $this->getAccountScore($user_id);
$invite_order = null;
//当前会员等级
if ($type == 'other_rank') {
$openid = $this->getOpenid();
$invite_order = InviteOrder::create([
'openid'=>$openid,
'trade_no'=>$trade_no,
]);
$price = $rank->price;
$goods = '替人升级'.$rank->name;
}else{
$user_rank_id = User::where('id', $user_id)->value('rank_id');
if (empty($user_rank_id) /*&& $user_rank_id == 1*/) {
$price = $rank->price;
}else{
$user_rank = Rank::find($user_rank_id);
if ($rank_id <= $user_rank_id) {
return $this->failure('您的会员等级已是'.$user_rank->name);
}
$price = ($rank->price * 100 - $user_rank->price * 100) / 100;
}
$goods = '升级'.$rank->name;
}
$num = $request->input('num', 1);
if ($score->remain_amount >= $price) {
$cash = 0;
$score = $price;
}else{
$cash = $price - $score->remain_amount;
$score = $score->remain_amount;
}
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $cash,
'score' => $score,
);
$order = array(
'user_id'=>$user_id,
'type_id'=>$rank_id,
'goods'=>$goods,
'price'=>$price,
'num'=>$num,
'type'=>$type,
'trade_no'=>$trade_no,
);
$wx_pay = [];
if ($cash>0) {
$wx_pay = $this->constructWXPay($pay_order, $user_id);
}else{
$pay_order['pay_status'] = "PAID";
$order['pay_status'] = "PAID";
//修改会员
$user->rank_id = $rank_id;
$user->save();
$h = RankHistory::where('user_id', $user_id)->where('rank_id', $rank_id)->whereNotNull('deadline')->first();
if ($rank_id == 1) {
if (empty($h)) {//没有会员
RankHistory::create([
'user_id'=>$user_id,
'rank_id'=>$rank_id,
]);
}
}else{
RankHistory::create([
'user_id'=>$user_id,
'rank_id'=>$rank_id,
'deadline'=>date('Y-m-d H:i:s', strtotime( '+1 month')),
]);
}
}
//支付订单
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$order_pay->wx_pay = $wx_pay;
return $this->success('ok', compact('order_pay', 'invite_order'));
}
/**
* 升级会员
* @param Request $request [description]
* @return [type] [description]
*/
public function memberChargeV2(Request $request)
{
try {
$user = auth()->user();
//购买的会员等级
$sub_rank_id = $request->input('sub_rank_id');
$sub_rank = SubRank::find($sub_rank_id);
if (empty($sub_rank)) {
return $this->failure('没有该会员');
}
$rank = Rank::find($sub_rank->rank_id);
$goods = '购买'.$sub_rank->month.'个月'.$rank->name.'VIP';
//判断会员等级
if ($user->rank_id > $sub_rank->rank_id) {
return $this->failure('当前会员等级高于购买会员等级');
}
//订单号
$trade_no = $this->getTradeNO();
$cash = $price = $sub_rank->discount_price;
$score = 0;
//支付类型
$remark = '';
$pay_type = $request->pay_type;
if($pay_type=='coin'&&$rank->pay_type=='coin'&&$rank->can_cash_amount>0&&$rank->can_coin_amount){
//当前福币
$total_coin = $user->totalCoin();
if($total_coin){
if($total_coin>=$rank->can_coin_amount){
$cash = $cash-$rank->can_cash_amount;
$remark = '花费福币'.$rank->can_coin_amount.'个,抵扣金额'.$rank->can_cash_amount.'元';
$score = $rank->can_coin_amount;
}else{
$cash = $cash- ($total_coin/10);
$remark = '花费福币'.($total_coin).'个,抵扣金额'.($total_coin/10).'元';
$score = $total_coin;
}
}
}
//订单
$pay_order = array(
'user_id' => $user->id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $cash,
'score' => $score,
);
$order = array(
'user_id'=>$user->id,
'type_id'=>$sub_rank_id,
'goods'=>$goods,
'price'=>$price,
'num'=>1,
'type'=>'rank',
'trade_no'=>$trade_no,
'from_openid'=>$request->input('from_openid'),
'from_user_id'=>$request->input('from_user_id'),
'chat_user_id'=>$request->input('chat_user_id'),
'share_type'=>$request->input('share_type')??'normal',
'remark'=>$remark,
);
\DB::beginTransaction();
//支付订单
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$wx_pay = [];
if ($cash>0) {
$wx_pay = $this->constructWXPay($pay_order, $user->id,$rank->name);
}else{
$order_pay->pay_status = 'PAID';
$order_pay->is_hooked = 1;
$order->pay_status = 'PAID';
$order_pay->save();
$order->save();
$result = $this->markRankOrder($order->id);
}
$order_pay->wx_pay = $wx_pay;
\DB::commit();
return $this->success('ok', $order_pay);
} catch (\Exception $e) {
\DB::rollBack();
$this->getError($e);
return $this->failure('支付失败,请稍后再试');
}
}
/**
* 生成分享图片
*/
public function makeSharePicture(Request $request, $invite_order_id)
{
$invite_order = InviteOrder::where('id', $invite_order_id)->first();
$app = EasyWechat::miniProgram();
$data = [];
$data['is_hyaline'] = true;
$response = $app->app_code->get('/pages/home/sharing?from_openid='.$invite_order->openid.'&id='.$invite_order_id, $data);
$time = time();
$path = $time.'qrcode.png';
$filename = $response->saveAs(storage_path('qrcode'), $path);
//http://images.ufutx.com/201807/14/697f5a2e6e6f5348a07eb6e4d966a026.jpeg
$image1 = 'http://images.ufutx.com/201807/16/4b07337a30b8b1bb311c1944dc0169cb.jpeg';
$image2 = storage_path().'/qrcode/'.$path;
$new_image = $this->imageAddImage($image1, $image2, 371, 371, 208, 818, 'top-leftt');
$order = Order::where('trade_no', $invite_order->trade_no)->first();
$rank_name = Rank::where('id', $order->type_id)->value('name');
$openid = $invite_order->openid;
$wechat = Wechat::where('openid', $openid)->first();
if (!empty($wechat)) {
if (!empty($wechat->avatar) || !empty($wechat->avatar2)) {
$avatar = $wechat->avatar2?$wechat->avatar2:$wechat->avatar;
$new_image = $this->imageAddImage($new_image, $avatar, 183, 183, 302, 75, 'top-left');
}
}
$name = '';
if ($wechat->user_id) {
$name = User::where('id', $wechat->user_id)->value('name');
}
// $new_image = $this->textAddImage($new_image, $rank_name, 15, 70, 550, '#000000', 'right');
$file_path = storage_path()."/qrcode/".$time."invite_qrcode.png";
$new_image->save($file_path);
$pic = '';
if(file_exists($file_path)){
$pic = $this->uploadFile($file_path);
try{
unlink($file_path);
}catch(Exception $e) {
return $this->failure($e->getMessage());
exit();
}
}
$invite_order->invite_pic = $pic;
$invite_order->save();
return $this->success('ok', compact('pic'));
}
public function constructWXPay($pay_order, $user_id, $detail='福恋')
{
$openid = $this->getOpenid();
$attributes = array(
'trade_type' => 'JSAPI', // JSAPI,NATIVE,APP...
'body' => $detail,
'detail' => $detail,
'out_trade_no' => $pay_order['trade_no'],
'total_fee' => ($pay_order['cash']*100),
'notify_url' => config('app.url').'/api/mark/order/pay/'.$pay_order['trade_no'], // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'openid' => $openid,
);
$result = \WechatService::pay($attributes);
return $result;
}
public function compareTime($time1, $time2)
{
$str_time1 = strtotime($time1);
$str_time2 = strtotime($time2) + 30 * 24 * 3600;
if ($str_time1 >= $str_time2) {//已過期
return false;
}else{
return true;
}
}
/**
* 支付回调
*/
public function markOrderPay(Request $request, $trade_no)
{
if ($trade_no) {
$pay_order = PayOrder::where('trade_no', $trade_no)->first();
if (empty($pay_order)) {
$message = '订单不存在,订单号:'.$trade_no;
return $this->failure('订单不存在');
}
if ($pay_order->is_hooked) {
return $this->success('ok');
}
$order = Order::where('trade_no', $trade_no)->first();
if ($pay_order->cash > 0 ) {
//当前时间大于订单时间30天不能查询
$now_time = date('Y-m-d H:i:s');
$order_time = $pay_order->created_at->toDateTimeString();
$compare_result = $this->compareTime($now_time, $order_time);
if ($compare_result) {
$result = \WechatService::orderPaid($trade_no);
}else{
$result = false;
}
}elseif ($pay_order->score > 0 && $pay_order->cash == 0 ) {
$result = true;
}else{
$result = false;
}
if ($result) {
if ($order->type == 'rank') {
$result = $this->markRankOrder($order->id);
if (empty($result)) {
return;
}
//添加平台订单收益
$this->addPaasAccountHistoriy($order->id, $trade_no, 'RANK', $order->user_id);
// MakeShareConsumeCash::dispatch($pay_order)->onQueue('love');
}elseif ($order->type == 'score') {
$result = $this->changeScore($order->user_id, $pay_order->cash, 'gained', '福分充值');
}elseif ($order->type == 'gift') {
if ($pay_order->cash > 0) {
$this->changeScore($order->user_id, $pay_order->cash, 'gained', '福分充值');
}
$gift = Gift::find($order->type_id);
//收礼物user_id
$other_user_id = GiftHistory::where('trade_no', $order->trade_no)->where('type', 'GIVEN')->value('other_user_id');
$result = $this->changeScore($order->user_id, $pay_order->cash + $pay_order->score, 'used', '送礼物['.$gift->name.']', $other_user_id);
if (!$result) {
$this->sms->sentMessage('15872844805', '订单号:'.$order->trade_no.' 福分溢出');
// return $this->failure('支付失败福分溢出');
PayOrder::where('trade_no', $trade_no)->update(['is_hooked'=>1,'pay_status'=>'PAID']);
return;
}
$this->changeScore($other_user_id, $pay_order->cash + $pay_order->score, 'gained', '收礼物['.$gift->name.']', $order->user_id);
GiftHistory::where('trade_no', $order->trade_no)->update(['status'=>1]);
//更新礼物库
$user_gift = UserGift::where('user_id', $other_user_id)->where('gift_id', $order->type_id)->first();
if (empty($user_gift)) {
$user_gift = UserGift::create([
'user_id'=>$other_user_id,
'gift_id'=>$order->type_id,
'num'=>0,
]);
}
$user_gift->num += $order->num;
$user_gift->save();
$content = '送了'.$order->num.$gift->unit.$gift->name.'给你!';
$this->sendNotice($other_user_id, $order->user_id, 'gift', $content);
//短信通知
$user_name = User::where('id', $order->user_id)->value('name');
$mobile = User::where('id', $other_user_id)->value('mobile');
if ($mobile) {
$message = '用户【'.$user_name.'】送给你一'.$gift->unit.$gift->name.'!请访问小程序查看';
$this->sms->sentMessage($mobile, $message);
}
}elseif ($order->type == 'other_rank') {
if ($pay_order->score > 0) {
$result = $this->changeScore($order->user_id, $pay_order->score, 'used', $message='替Ta支付');
if (!$result) {
$this->sms->sentMessage('15872844805', '订单号:'.$order->trade_no.' 福分溢出');
return $this->failure('支付失败福分溢出');
}
}
InviteOrder::where('trade_no', $order->trade_no)->where('status', 0)->update(['status'=>1]);
}elseif ($order->type == 'meet') {
//约见记录
$appointment = Appointment::find($order->type_id);
$history = new AppointmentHistory();
$history->user_id = $order->user_id;
$history->point_id = $appointment->id;
$history->price = $appointment->price;
$history->num = $appointment->num;
$history->type = $appointment->type;
$history->save();
$user = User::find($order->user_id);
$user_name = $user->name;
if ($appointment->type == 'active' || $appointment->type == 'passive') {
$message = '用户'.$user_name.'购买了'.$appointment->name.'服务';
$this->sms->sentMessage('13377553550', $message);
}
//订阅消息通知用户
// $user = User::find($order->user_id);
// $this->orderSuccessNoticeToUser($order, $user);
}elseif ($order->type == 'approve') {
//赠送一个月市级会员
$this->addUserRank($order->user_id, 1, 1);
User::where('id', $order->user_id)->update(['approve_time'=>3]);
//分享注册认证 获得奖励
$from_openid = User::where('id', $order->user_id)->value('from_openid');
if ($from_openid) {
$array['from_openid'] = $from_openid;
$array['user_id'] = $order->user_id;
$array['type'] = 'approve';
$array['num'] = 2;
ReferreAward::dispatch($array)->onQueue('love');
}
//分享认证退认证费
// $this->refundApprove($from_openid);
//订阅信息通知用户
// $user = User::find($order->user_id);
// $this->orderSuccessNoticeToUser($order, $user);
}elseif ($order->type == 'activity') {
$key = Redis::setnx('activity'.$trade_no,1);
if($key!=1){
$PayLog = new PayLog;
$PayLog->type = 'activity';
$PayLog->user_id = $order->user_id??0;
$PayLog->trade_no = $trade_no;
$PayLog->remark = '回调异常';
$PayLog->save();
return ;
}
$user = User::where('id', $order->user_id)->first();
$wechat = wechat::where('user_id', $order->user_id)->first();
$avatar = '';
if (!empty($wechat)) {
$avatar = $wechat->avatar2?$wechat->avatar2:$wechat->avatar;
}
$sex = $user->sex;
if (empty($sex)) {
$sex = $wechat->gender;
}
$member = new ActivityMember;
$member->is_joined = 1;
$member->user_id = $order->user_id;
$member->activity_id = $order->type_id;
$member->name = $member->name?$member->name:$user->name;
$member->mobile = $member->mobile?$member->mobile:$user->mobile;
$member->avatar = $member->avatar?$member->avatar:$avatar;
$member->linkmen = $order->linkmen;
$member->from_openid = $order->from_openid;
$member->save();
//添加平台订单收益
$this->addPaasAccountHistoriy($order->id, $trade_no, 'ACTIVITY', $order->user_id);
//通知给管理员
$activity = Activity::findOrFail($order->type_id);
$this->sendActivityNotice($activity, $user);
// 两人同行
$linkmen = json_decode($order->linkmen,true);
if($activity&&$activity->id==554&&count($linkmen)>=2){
$result = $this->friendOrder($linkmen,$activity,$user->mobile);
}
//发送短信通知
// if($activity&&$activity->id==555||$activity->id ==554){
// $result = $this->sendSmsNotice($activity->id,$order->user_id);
// }
//发送订阅通知给用户
// $this->sendActivityNoticeToUser($activity, $user);
}elseif ($order->type == 'single_service') {//单身服务
$result = $this->markSingleServiceOrder($order);
if (empty($result)) throw new \Exception("单身服务订单回调失败", 1);
MakeShareConsumeCash::dispatch($pay_order)->onQueue('love');
}
PayOrder::where('trade_no', $trade_no)->update(['is_hooked'=>1,'pay_status'=>'PAID']);
Order::where('trade_no', $trade_no)->update(['pay_status'=>'PAID']);
// StoreOrderWorthShare::dispatch($order, $pay_order)->onQueue('love');
//订单分享人条件
$redis = Redis::connection('big_data');
$redis->lpush('love:earning:order:ids', $order->id);
SendEarningMessage::dispatch($order->id)->onQueue('love')->delay(now()->addMinutes(1));
$replyxml = "";
echo $replyxml;
}else{
return $this->failure('支付失败', $result);
}
}else{
return $this->failure('no order');
}
}
/**
* 赠送认证资格
* @param [type] $user_id [description]
*/
public function sendApproveTime($user_id)
{
$user = User::find($user_id);
if (!$user->is_approved) {
$user->approve_time = 3;
$user->save();
}
return;
}
/**
* 退认证费
* @return [type] [description]
*/
public function refundApprove($from_openid)
{
$user_id = Wechat::where('openid', $from_openid)->value('user_id');
if (empty($user_id)) {
return ;
}
//是否交认证费
$approve_order = Order::where('user_id', $user_id)->where('type', 'approve')->where('pay_status', 'PAID')->first();
if (empty($approve_order)) {
return ;
}
$approve_pay_order = PayOrder::where('user_id', $user_id)->where('trade_no', $approve_order->trade_no)->where('is_hooked', 1)->first();
//是否有被邀请人认证
//是否有已邀请认证
$invite_user_ids = User::where('from_openid', $from_openid)->pluck('id');
$count = Order::where('type', 'approve')->where('pay_status', 'PAID')->whereIn('user_id', $invite_user_ids)->count();
if (empty($count)) {
return ;
}
//是否已退
$refund_order = RefundOrder::where('user_id', $user_id)->where('type','approve')->first();
//生成退款记录
if (empty($refund_order)) {
$refund_order = RefundOrder::create([
'user_id'=>$user_id,
'type'=>'approve',
'trade_no'=>$approve_order->trade_no,
'refund_trade_no'=>$this->getRefundTradeNo(),
'total_fee'=>$approve_pay_order->cash,
'refund_fee'=>$approve_pay_order->cash,
]);
}else{
return ;
}
$total = $refund_order->total_fee * 100;
$desc = '用户实名认证费退款';
//退款
$result = \WechatService::userTransfer($refund_order->refund_trade_no, $from_openid, $total, $desc);
if ($result) {
}
return ;
}
/**
* 支付回调
*/
public function markOrderPayV2(Request $request, $trade_no)
{
if ($trade_no) {
$pay_order = PayOrder::where('trade_no', $trade_no)->first();
if ($pay_order->is_hooked) {
return $this->success('ok');
}
$order = Order::where('trade_no', $trade_no)->first();
if ($pay_order->cash > 0 ) {
//当前时间大于订单时间30天不能查询
$now_time = date('Y-m-d H:i:s');
$order_time = $pay_order->created_at->toDateTimeString();
$compare_result = $this->compareTime($now_time, $order_time);
if ($compare_result) {
$result = \WechatService::orderPaid($trade_no);
}else{
$result = false;
}
}elseif ($pay_order->score > 0 && $pay_order->cash == 0 ) {
$result = true;
}else{
$result = false;
}
if ($result) {
if ($order->type == 'rank') {
$result = $this->markRankOrder($order->id);
if (empty($result)) {
return;
}
$this->addPaasAccountHistoriy($order->id, $trade_no, 'RANK', $order->user_id);
}
PayOrder::where('trade_no', $trade_no)->update(['is_hooked'=>1,'pay_status'=>'PAID']);
Order::where('trade_no', $trade_no)->update(['pay_status'=>'PAID']);
StoreOrderWorthShare::dispatch($order, $pay_order)->onQueue('love');
$redis = Redis::connection('big_data');
$redis->lpush('love:earning:order:ids', $order->id);
SendEarningMessage::dispatch($order->id)->onQueue('love')->delay(now()->addMinutes(1));
return $this->success('mark ok');
}else{
return $this->failure('支付失败', $result);
}
}else{
return $this->failure('no order');
}
}
// 双人同行订单将生成衍生订单和用户
public function friendOrder($linkmen,$activity,$mobile)
{
foreach ($linkmen as $key => $value) {
if($value['mobile']==$mobile)
continue;
$user = User::where('mobile',$value['mobile'])->first();
if(!$user){
$user = new User();
$user->name = $value['name'];
$user->nickname = $value['name'];
$user->mobile = $value['mobile'];
$user->email = $value['mobile'].'@ufutx.com';
$user->save();
}
ProfileCourtship::firstOrCreate(['user_id' => $user->id]);
$member = new ActivityMember;
$member->is_joined = 1;
$member->user_id = $user->id;
$member->activity_id = $activity->id;
$member->name = $value['name'];
$member->mobile = $value['mobile'];
$member->avatar = User::DefaultAvatar;
$member->linkmen = $linkmen;
$member->desc = '两人同行,同行人:'.$mobile;
$member->save();
}
}
public function sendSmsNotice($activity_id,$user_id){
$member = ActivityMember::where('activity_id',$activity_id)->where('user_id',$user_id)->first();
$member->linkmen = json_decode($member->linkmen);
$mobiles = [];
if(!empty($member->linkmen)){
foreach ($member->linkmen as $men) {
$mobiles[] = $men['mobile'];
}
}
$array = [
'mobile' => $mobiles,
'message' => "您好!您已报名福恋平台9月16日的5+1线上深度了解,线下约会的活动,请添加客服微信18922809346(电话同号),提醒您届时参加!谢谢!",
];
SendSmsBatch::dispatch($array)->onQueue('love');
}
/**
* 添加平台收益
* @param [type] $order_id [description]
*/
public function addPaasAccountHistoriy($order_id, $trade_no, $type, $user_id)
{
if ($type == 'RANK') {
//用户所属平台
$paas_user = PaasUser::where('user_id', $user_id)->where('type', 'MAIN')->first();
if (empty($paas_user)) {
return;
}
$paas = Paas::where('id', $paas_user->paas_id)->value("name");
$amount = PayOrder::where('trade_no', $trade_no)->value('cash');
if (empty($amount)) {
return;
}
//百分之五十
$remain_amount = number_format($amount/2, 2);
$paas_service = new PaasService;
$paas_service->addAccountHistory($paas, $type, $order_id, $remain_amount);
}elseif ($type == 'ACTIVITY') {
$activity_id = Order::where('id', $order_id)->value('type_id');
$paas_id = PaasActivity::where('activity_id', $activity_id)->value('paas_id');
if (empty($paas_id)) {
return;
}
$paas = Paas::where('id', $paas_id)->value("name");
$amount = PayOrder::where('trade_no', $trade_no)->value('cash');
if (empty($amount)) {
return;
}
$paas_service = new PaasService;
$paas_service->addAccountHistory($paas, $type, $order_id, $amount);
}
return;
}
public function markRankOrder($order_id)
{
try {
\DB::beginTransaction();
$order = Order::find($order_id);
$pay_order = PayOrder::where('trade_no', $order->trade_no)->first();
$user = User::with('wechat')->find($order->user_id);
//检测福币
if ($pay_order->score > 0) {
$result = $user->addCoinLog('RANK', $order->type_id, $pay_order->score, $remark='小程序购买超级会员');
if (empty($result)) throw new \Exception("增加福币记录失败", 1);
$result = $user->updateCoinInfo('sub', $pay_order->score);
if (empty($result)) throw new \Exception("修改福币信息失败", 1);
}
$this->changeRank($order->user_id, $order->type_id);
\DB::commit();
//微信通知
$sub_rank = SubRank::find($order->type_id);
$array['openid'] = $user->wechat->openid;
$array['rank_id'] = $sub_rank->rank_id;
SendRankNotice::dispatch($array)->onQueue('love');
return true;
} catch (\Exception $e) {
\DB::rollBack();
$this->getError($e);
return false;
}
}
//活动福币支付回调
public function payment_change($order,$trade_no)
{
$user = User::where('id', $order->user_id)->first();
$wechat = wechat::where('user_id', $order->user_id)->first();
$avatar = '';
if (!empty($wechat)) {
$avatar = $wechat->avatar2?$wechat->avatar2:$wechat->avatar;
}
$sex = $user->sex;
if (empty($sex)) {
$sex = $wechat->gender;
}
$member = new ActivityMember;
$member->is_joined = 1;
$member->user_id = $order->user_id;
$member->activity_id = $order->type_id;
$member->name = $member->name?$member->name:$user->name;
$member->mobile = $member->mobile?$member->mobile:$user->mobile;
$member->avatar = $member->avatar?$member->avatar:$avatar;
$member->linkmen = $order->linkmen;
$member->from_openid = $order->from_openid;
$member->save();
//添加平台订单收益
$this->addPaasAccountHistoriy($order->id, $trade_no, 'ACTIVITY', $order->user_id);
//通知给管理员
$activity = Activity::findOrFail($order->type_id);
$this->sendActivityNotice($activity, $user);
}
/**
* 修改会员
* @return [type] [description]
*/
public function changeRank($user_id, $sub_rank_id)
{
$sub_rank = SubRank::find($sub_rank_id);
$rank_id = $sub_rank->rank_id;
$month = $sub_rank->month;
$user = User::find($user_id);
$user->addSuperRank(0, $month, $type='mini_rank');
return ;
}
/**
* 积分修改
* @param int $user_id 用户ID
* @param decimal $score 更改积分
* @param string $type 类型
* @param string $message 备注
* @param inte $other_user_id 其他人ID
* @return bool 是否成功
*/
public function changeScore($user_id, $score, $type, $message='', $other_user_id=null)
{
//本地积分
$score_obj = Score::where('user_id', $user_id)->first();
if (empty($score_obj)) {
$score_obj = Score::create([
'user_id'=>$user_id,
]);
}
if ($type == 'gained') {
//更新积分
$score_obj->increment('remain_amount', $score);
}else{
if ($score_obj->remain_amount >= $score) {
$score_obj->decrement('remain_amount', $score);
// 优先使用不可提现的福分
// 不可提现的福分不够,从可提现的福分扣除
$extraScore = $score_obj->remain_amount - $score_obj->cash_score;
$deductCash = $extraScore - $score;
if($deductCash){
$score_obj->decrement('cash_amount', $deductCash);
}
}else{
$this->sms->sentMessage('15872844805', '用户id:'.$user_id.', 福分超额.'.$message);
throw new \Exception('用户id:'.$user_id.', 福分超额.'.$message, 1);
}
$score_obj->increment('used_amount', $score);
}
//生成积分记录
ScoreHistory::create([
'user_id'=>$user_id,
'other_user_id'=>$other_user_id,
'type'=>$type,
'amount'=>$score,
'value'=>$score_obj->remain_amount,
'message'=>$message,
]);
//同步积分
// $array['message'] = $message;
// $array['user_id'] = $user_id;
// $array['other_user_id'] = $other_user_id;
// $array['type'] = $type;
// $array['score'] = $score;
// SyncScore::dispatch($array)->onQueue('love');
return true;
}
/**
* 给邀请人添加福分
*/
public function addInviteScore($openid ,$price)
{
//第最近个人的openid
$invite_user_id = Wechat::where('openid', $openid)->value('user_id');
if (empty($invite_user_id)) {
return ;
}
$add_score = $price * 0.1;
if ($add_score > 0) {
$this->changeScore($invite_user_id, $add_score, 'gained', '推荐赢福分');
}
return ;
}
// 家的味道
public function familyActivity(Request $request)
{
# code...
$goods_id = $request->goods_id??7;
$goods = Goods::where('id',$goods_id)->first();
if($request->price<=0) return $this->failure('支付价格有误。');
if(!$goods) return $this->failure('未查询到该商品信息');
if(!$goods->discount_price) return $this->failure('商品价格获取失败');
// 上架当天
$start = date('2021-08-07 00:00:00');
$end = date('2021-08-07 23:59:59');
if($startdiscount_price = 109;
}
$pay_price = $goods->discount_price*$request->num;
if($pay_price!=$request->price) return $this->failure('支付价格与商品价格不一致。');
$trade_no = $this->getRefundTradeNo();
$family['goods_id'] = $goods_id;
$family['num'] = $request->num;
$family['name'] = $request->name;
$family['mobile'] = $request->mobile;
$family['address'] = $request->address;
$family['from_openid'] = $request->from_openid;
$family['from_user_id'] = $request->from_user_id;
$family['trade_no'] = $trade_no;
$family['open_id'] = $request->openid;
$family['price'] = $request->price;
$family['from_platform'] = $request->from_platform;
FamilyOrder::create($family);
$openid = $request->openid;
$callback = config('app.url').'/api/app/callback/family/'.$trade_no;
$attributes = array(
'trade_type' => 'JSAPI', // JSAPI,NATIVE,APP...
'body' => '"家的味道,有爱中秋"中秋礼盒',
'detail' => $goods->name,
'out_trade_no' => $trade_no,
'total_fee' => round($request->price*100),
'notify_url' => $callback, // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'openid' => $openid,
);
$result = \WechatService::officialPay($attributes);
return $this->success('ok',$result);
}
//我的订单
public function familyOrderList(Request $request)
{
$openid = $request->openid;
usleep(500000);
$mobile = Viewer::where('openid',$openid)->value('mobile')??0;
$result = FamilyOrder::where(function ($query) use($openid,$mobile) {
$query->where('open_id', $openid)
->orWhere('mobile', $mobile);
})->where('pay_status',1)->orderby('id','desc')->paginate();
foreach ($result as $value) {
$goods = Goods::where('id',$value->goods_id)->first();
$value->goods_name = $goods->name;
$value->icon = $goods->icon;
$value->introduction = $goods->introduction;
}
return $this->success('ok',$result);
}
//商品详情
public function goods(Request $request)
{
$id = $request->id??7;
$result = Goods::select('id','name','icon','price','introduction','discount_price')->where('id',$id)->where('status',1)->first();
if($result){
$result->price = floatval($result->price);
$result->discount_price = floatval($result->discount_price);
// 8.7活动当天
$start = date('2021-08-07 00:00:00');
$end = date('2021-08-07 23:59:59');
$result->preferential = 0;
if($startpreferential = 1;
$result->discount_price = 109;
}
$openid = $request->openid;
$result->unsigned_order = FamilyOrder::where('open_id',$openid)->where('pay_status',1)->where('order_status','<>',2)->count();
}
return $this->success('ok',$result);
}
//确认收货
public function confirmReceipt(Request $request)
{
$id = $request->id;
$openid = $request->openid;
$order = FamilyOrder::where('id',$id)->where('open_id',$openid)->first();
if(!$order) return $this->failure('未查询到该订单信息.');
if($order->order_status==2){
return $this->failure('该订单已签收。');
}
$order->order_status = 2;
$order->save();
return $this->success('操作成功');
}
/**
* 送礼物
*/
public function sendGift(Request $request, $id, $gift_id)
{
$user_id = auth()->id();
$gift = Gift::find($gift_id);
$num = $request->input('num', 1);
$price = $gift->price * $num;
//积分
$score = $this->getAccountScore($user_id);
$total = $score->remain_amount - $price;
if ($total >= 0) {
$cash = 0;
$score = $price;
}else{
$cash = $price - $score->remain_amount;
$score = $score->remain_amount;
}
//购买积分
$trade_no = $this->getTradeNO();
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $cash,
'score' => $score,
);
$order = array(
'user_id'=>$user_id,
'type_id'=>$gift_id,
'goods'=>'购买'.$gift->name,
'price'=>$price,
'num'=>1,
'type'=>'gift',
'trade_no'=>$trade_no,
'pay_status'=>'UNPAID',
);
$wx_pay = [];
if ($cash > 0) {
$wx_pay = $this->constructWXPay($pay_order, $user_id);
}else{
$order['pay_status'] = 'PAID';
$pay_order['pay_status'] = 'PAID';
}
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$order_pay->wx_pay = $wx_pay;
$this->addGiftHistory($user_id, $id, $gift_id, 0, $num, $trade_no);
return $this->success('ok', $order_pay);
}
/**
* 添加礼物记录
*/
public function addGiftHistory($user_id, $other_user_id, $gift_id, $status, $num, $trade_no)
{
//礼物记录
GiftHistory::create([
'user_id'=>$user_id,
'other_user_id'=>$other_user_id,
'gift_id'=>$gift_id,
'type'=>'GIVEN',
'num'=>$num,
'status'=>$status,
'trade_no'=>$trade_no,
]);
GiftHistory::create([
'user_id'=>$other_user_id,
'other_user_id'=>$user_id,
'gift_id'=>$gift_id,
'type'=>'RECEVIED',
'num'=>$num,
'status'=>$status,
'trade_no'=>$trade_no,
]);
if ($status == 1) {
//更新礼物库
$user_gift = UserGift::where('user_id', $other_user_id)->where('gift_id', $gift_id)->first();
if (empty($user_gift)) {
$user_gift = UserGift::create([
'user_id'=>$other_user_id,
'gift_id'=>$gift_id,
'num'=>0,
]);
}
$user_gift->num += $num;
$user_gift->save();
}
return ;
}
/**
* 商品列表
*/
public function goodses(Request $request)
{
$user_id = auth()->id();
$goodses = Goods::all();
//我的福分
$score = $this->getAccountScore($user_id);
return $this->success('ok', compact('score', 'goodses'));
}
//
/**
* 兑换商品
*/
public function exchangeGoods(Request $request, $id)
{
$user_id = auth()->id();
$user = auth()->user();
$goods = Goods::find($id);
if (empty($goods)) {
return $this->failure('no goods');
}
$num = $request->input('num', 1);
$total = $num * $goods->price;
$score = $this->getAccountScore($user_id);
$remain_amount = $score->remain_amount;
if ($remain_amount < $total) {
return $this->failure('福分不足');
}
$trade_no = $this->getTradeNO();
$name = $request->input('name');
if (empty($name)) {
return $this->failure('请输入姓名');
}
$mobile = $request->input('mobile');
if (empty($mobile)) {
return $this->failure('请输入电话');
}
$address = $request->input('address');
if (empty($address)) {
return $this->failure('请输入地址');
}
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'PAID',
'score' => $total,
);
$order = array(
'user_id'=>$user_id,
'type_id'=>0,
'goods'=>'兑换'.$goods->name,
'price'=>$goods->price,
'num'=>$num,
'type'=>'goods',
'trade_no'=>$trade_no,
'pay_status' => 'PAID',
'name'=>$name,
'address'=>$address,
'mobile'=>$mobile,
);
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$this->changeScore($user_id, $total, 'used', $order['goods']);
//通知
$message = '您已经使用'.$total.'福分兑换商品['.$goods->name.'],我们将尽快为您发货';
$this->sms->sentMessage($user->mobile, $message);
return $this->success('ok', $order);
}
/**
* 积分充值
*/
public function rechargeScore(Request $request)
{
$user_id = auth()->id();
$price = $request->input('price');
if (empty($price)) {
return $this->failure('请输入金额');
}
if($price < 0.01 || $price > 100000) {
return $this->failure('充值金额范围:0.01-100000');
}
$trade_no = $this->getTradeNO();
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $price,
);
$order = array(
'user_id'=>$user_id,
'type_id'=>0,
'goods'=>'账户充值',
'price'=>$price,
'num'=>1,
'type'=>'score',
'trade_no'=>$trade_no,
'pay_status' => 'UNPAID',
);
$wx_pay = $this->constructWXPay($pay_order, $user_id);
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$order_pay->wx_pay = $wx_pay;
return $this->success('ok', $order_pay);
}
/**
* 绑定别人支付
*/
public function useInviteOrder(Request $request, $id)
{
$is_register = 0;
$invited = 0;
$is_ok = true;
$other_openid = $request->input('other_openid');
if (empty($other_openid)) {
return $this->failure('no openid');
}
$invite_order = InviteOrder::findOrFail($id);
if ($invite_order->other_openid) {
if ($invite_order->other_openid != $other_openid) {
$invited = 1;
$wechat = Wechat::where('openid', $other_openid)->whereNotNull('user_id')->first();
if ($wechat) {
$user = User::find($wechat->user_id);
if ($user) {
$is_register = 1;
}
}
$is_ok = false;
return $this->success('邀请已被抢注', compact('is_ok', 'invited', 'is_register'));
}else{
$is_register = 1;
return $this->success('ok', compact('is_ok', 'invited', 'is_register'));
}
}
if (!$invite_order->status) {
return $this->failure('该订单未支付');
}
$order = Order::with('user')->where('trade_no', $invite_order->trade_no)->first();
$rank = Rank::find($order->type_id);
//已注册用户绑定
$wechat = Wechat::where('openid', $other_openid)->whereNotNull('user_id')->first();
//分享VIP多出金额
$amount = 0;
//接收人名称
$user_name = '';
$user_mobile = '';
$user_rank_name = '';
$invite_score = $order->price;
if ($wechat) {
$user = User::find($wechat->user_id);
if ($user) {
$is_register = 1;
$user_name = $user->name;
$user_mobile = $user->mobile;
if ($user->type != 'single') {
return $this->failure('不是单身不需要充值会员');
}
if (empty($user->rank_id)) {
$user->rank_id = $rank->id;
}else{
$user_rank = Rank::find($user->rank_id);
$user_rank_name = $user_rank->name;
if ($user_rank->price >= $rank->price) {
$is_ok = false;
return $this->success('false', compact('is_ok', 'invited', 'is_register'));
}
$user->rank_id = $rank->id;
//分享VIP多出金额
$amount = $user_rank->price;
$invite_score = $rank->price - $user_rank->price;
}
RankHistory::create([
'user_id'=>$user->id,
'rank_id'=>$rank->id,
]);
$user->save();
}
}
$invite_order->other_openid = $other_openid;
$invite_order->save();
//生成分享记录
// $this->addInviteHistory($invite_order->other_openid, $invite_order->openid);
//分享收益
$this->addInviteScore($invite_order->openid,$invite_score);
//短信通知
$invite_wechat = Wechat::where('openid', $invite_order->openid)->first();
$invite_user = User::where('id', $invite_wechat->user_id)->select('id', 'name', 'mobile')->first();
if ($user_mobile) {
$message = '尊敬的用户, 您成功的接受了用户【'.$user_name.'】的'.$rank->name.'会员邀请';
$this->sms->sentMessage($user_mobile, $message);
}
$pay_order = PayOrder::where('trade_no', $invite_order->trade_no)->where('pay_status', 'PAID')->first();
$refund_trade_no = $this->getRefundTradeNo();
//多出金额退款
if ($amount > 0) {
$this->changeScore($invite_user->id, $amount, 'gained', '替人支付会员福分返回');
//通知用户
$message = '亲爱的用户您好,用户['.$user_name.']接受了您的福恋'.$rank->name.'会员邀请,由于用户['.$user_name.']本是'.$user_rank_name.'会员,多出的部分将返回您的福分中.';
$this->sms->sentMessage($invite_user->mobile, $message);
}
// $score = 0;
// $cash = 0;
// if ($amount > 0) {
// //判断是微信支付还是福分支付
// if ($pay_order->score) {//福分支付
// if ($pay_order->score >= $amount) {//福分大于可退金额
// $score = $amount;
// }else{
// $score = $pay_order->score;
// $cash = $amount - $pay_order->score;
// }
// }else{
// $cash = $pay_order->cash - $amount;
// }
// }
// $user_id = Wechat::where('openid', $invite_order->openid)->value('user_id');
// if ($score > 0) {
// $this->changeScore($user_id, $score, 'gained', '替人支付会员积分返回');
// }
// //退款订单号
// $refund_trade_no = $this->getRefundTradeNo();
// if ($cash > 0) {
// $array = [];
// $array['refund_desc'] = '替人会员返回';
// WechatService::orderRefund($invite_order->trade_no, $refund_trade_no, $pay_order->cash * 100, $cash *100, $array);
// }
// if ($score > 0 || $cash > 0) {
// RefundOrder::create([
// 'user_id'=>$user_id,
// 'trade_no'=>$invite_order->trade_no,
// 'refund_trade_no'=>$refund_trade_no,
// 'total_fee'=>$pay_order->cash,
// 'refund_fee'=>$cash,
// 'refund_score'=>$score
// ]);
// }
return $this->success('ok', compact('is_ok', 'invited', 'is_register'));
}
/**
* 绑定页面
*/
public function inviteOrder(Request $request, $id)
{
$session = $this->getWechatSession($request->code);
$openid = '';
if ($session) {
if(!isset($session['session_key'])){
return $this->failure('failure', $session);
}
$openid = $session['openid'];
}
$invite_order = InviteOrder::find($id);
if (empty($invite_order)) {
return $this->failure('未检测到有vip卡');
}
$order = Order::with('user')->where('trade_no', $invite_order->trade_no)->first();
if (empty($order)) {
return $this->failure('邀请不存在');
}
$rank = Rank::find($order->type_id);
$order->rank = $rank;
$wechat = Wechat::where('user_id', $order->user_id)->select('avatar', 'avatar2')->first();
if (empty($wechat)) {
if ($order->user->sex == 1) {
$avatar = 'http://images.ufutx.com/201811/12/0e8b72aae6fa640d9e73ed312edeebf3.png';
}else {
$avatar = 'http://images.ufutx.com/201811/12/dddd79aa2c2fc6a6f35e641f6b8fb8f5.png';
}
}else{
$avatar = $wechat->avatar2?$wechat->avatar2:$wechat->avatar;
}
$order->avatar = $avatar;
return $this->success('ok', compact('order', 'openid'));
}
public function getWechatSession($code)
{
$session = null;
$mp = \EasyWechat::miniProgram();
try{
if(config('app.debug') && $code == 'the code is a mock one'){
//simulate
$session = [
'openid' => 'oyBj70MRExrrzYH7K8F_VE75XeoE',
'session_key' => 'oyBj70MRExrrzYH7K8F_VE75XeoE',
'unionid' => 'oVMWoswKQA2ToVHyLzcc6t19N4zE',
];
}else{
$session = $mp->auth->session($code);
}
}catch(\Exeception $e){
$failure = $e->getMessage;
}
return $session;
}
/**
* 购买约见
* @param Request $request [description]
* @return [type] [description]
*/
public function buyAppointment(Request $request, $point_id)
{
$user = auth()->user();
if (empty($user)) {
return $this->failure('no user');
}
if ($user->type != 'single') {
return $this->failure('暂只支持单身购买');
}
$user_id = $user->id;
$appointment = Appointment::findOrFail($point_id);
$price = $appointment->price;
$trade_no = $this->getTradeNO();
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $price,
);
$order = array(
'user_id'=>$user_id,
'type_id'=>$point_id,
'goods'=>$appointment->name,
'price'=>$price,
'num'=>1,
'type'=>'meet',
'trade_no'=>$trade_no,
);
$wx_pay = $this->constructWXPay($pay_order, $user_id, '福恋约见');
//支付订单
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$order_pay->wx_pay = $wx_pay;
return $this->success('ok', $order_pay);
}
/**
* 购买认证
* @param Request $request [description]
* @return [type] [description]
*/
public function officialBuyAppointment(Request $request, $point_id)
{
$user = auth()->user();
if (empty($user)) {
return $this->failure('no user');
}
if ($user->type != 'single') {
return $this->failure('暂只支持单身购买');
}
$user_id = $user->id;
$appointment = Appointment::findOrFail($point_id);
$price = $appointment->price;
$trade_no = $this->getTradeNO();
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $price,
);
$order = array(
'user_id'=>$user_id,
'type_id'=>$point_id,
'goods'=>$appointment->name,
'price'=>$price,
'num'=>1,
'type'=>'meet',
'trade_no'=>$trade_no,
);
if (strstr($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) {
$wx_pay = \WechatService::constructWXPay($pay_order, $user_id, '福恋约见');
}else{
$wx_pay = \WechatService::constructWXH5Pay($pay_order, $user_id, '福恋约见');
}
// $wx_pay = \WechatService::constructWXH5Pay($pay_order, $user_id, '购买认证');
//支付订单
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$order_pay->wx_pay = $wx_pay;
return $this->success('ok', $order_pay);
}
/**
* 奉献
* @param Request $request [description]
* @return [type] [description]
*/
public function donation(Request $request)
{
$user_id = auth()->id();
if (empty($user_id)) {
return $this->failure('no user_id');
}
$price = $request->input('price');
if (empty($price)) {
return $this->failure('请输入奉献金额');
}
$trade_no = $this->getTradeNO();
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $price,
);
$order = array(
'user_id'=>$user_id,
'type_id'=>0,
'goods'=>'奉献金',
'price'=>$price,
'num'=>1,
'type'=>'donation',
'trade_no'=>$trade_no,
);
$wx_pay = $this->constructWXPay($pay_order, $user_id, '奉献金');
//支付订单
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$order_pay->wx_pay = $wx_pay;
return $this->success('ok', $order_pay);
}
/**
* 奉献
* @param Request $request [description]
* @return [type] [description]
*/
public function officialAonation(Request $request)
{
$user_id = auth()->id();
if (empty($user_id)) {
return $this->failure('no user_id');
}
$price = $request->input('price');
if (empty($price)) {
return $this->failure('请输入奉献金额');
}
$trade_no = $this->getTradeNO();
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $price,
);
$order = array(
'user_id'=>$user_id,
'type_id'=>0,
'goods'=>'奉献金',
'price'=>$price,
'num'=>1,
'type'=>'donation',
'trade_no'=>$trade_no,
);
// $wx_pay = $this->constructWXPay($pay_order, $user_id, '奉献金');
if (strstr($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) {
$wx_pay = \WechatService::constructWXPay($pay_order, $user_id, '奉献金');
}else{
$wx_pay = \WechatService::constructWXH5Pay($pay_order, $user_id, '奉献金');
}
//支付订单
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$order_pay->wx_pay = $wx_pay;
return $this->success('ok', $order_pay);
}
/**
* 购买认证
* @param Request $request [description]
* @return [type] [description]
*/
public function buyApprove(Request $request)
{
$user_id = auth()->id();
if (empty($user_id)) {
return $this->failure('no user_id');
}
$price = $request->input('price', 10);
if (empty($price)) {
return $this->failure('没有购买金额');
}
$trade_no = $this->getTradeNO();
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $price,
);
$order = array(
'user_id'=>$user_id,
'type_id'=>0,
'goods'=>'实名认证',
'price'=>$price,
'num'=>1,
'type'=>'approve',
'trade_no'=>$trade_no,
);
$wx_pay = $this->constructWXPay($pay_order, $user_id, '认证');
//支付订单
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$order_pay->wx_pay = $wx_pay;
return $this->success('ok', $order_pay);
}
/**
* 参加活动
* @param Request $request [description]
* @param [type] $activity_id [description]
* @return [type] [description]
*/
public function joinActivity(Request $request, $activity_id)
{
$activity = Activity::find($activity_id);
if (empty($activity)) {
return $this->failure('该活动不存在');
}
// if (!empty($activity->is_deadline)) {
// return $this->failure('该活动已截止报名');
// }
$user = auth()->user();
$user_id = $user->id;
if (empty($user_id)) {
return $this->failure('no user_id');
}
$member = ActivityMember::where('user_id', $user_id)->where('activity_id', $activity_id)->where('is_joined', 1)->first();
if ($member) {
return $this->failure('已报名');
}
if ($activity->fee == 0) {
$wechat = wechat::where('user_id', $user_id)->first();
$avatar = '';
if (!empty($wechat)) {
$avatar = $wechat->avatar2?$wechat->avatar2:$wechat->avatar;
}
$sex = $user->sex;
if (empty($sex)) {
$sex = Wechat::where('user_id', $user->id)->value('gender');
}
if (empty($sex)) {
return $this->failure('请完善性别信息!');
}
$activity_member = ActivityMember::create([
'user_id'=>$user_id,
'activity_id'=>$activity_id,
'name'=>$user->name,
'sex'=>$sex,
'mobile'=>$user->mobile,
'avatar'=>$avatar,
'is_joined'=>1,
]);
$activity_member->wx_pay = [];
//发送模板通知给管理员(公众号)
$this->sendActivityNotice($activity, $user);
//发送订阅通知给用户
// $this->sendActivityNoticeToUser($activity, $user);
return $this->success('ok', $activity_member);
}else{
$trade_no = $this->getTradeNO();
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $activity->fee,
);
$order = array(
'user_id'=>$user_id,
'type_id'=>$activity_id,
'goods'=>$activity->theme,
'price'=>$activity->fee,
'num'=>1,
'type'=>'activity',
'trade_no'=>$trade_no,
'from_openid'=>$request->input('from_openid'),
'share_type'=>$request->input('share_type', 'normal'),
);
$wx_pay = $this->constructWXPay($pay_order, $user_id, $activity->theme);
//支付订单
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$order_pay->wx_pay = $wx_pay;
return $this->success('ok', $order_pay);
}
}
/**
* 用户参加活动V2
*/
public function joinActivityV2(Request $request, Activity $activity)
{
$trade_no = $this->getTradeNO();
//用户信息
$user = auth()->user();
if (empty($user)) {
return $this->failure('未登录');
}
$user_id = $user->id;
$member = $user->activityMember()->where('activity_id', $activity->id)->where('is_joined', 1)->first();
if ($member) {
return $this->failure('已报名');
}
$wechat = $user->wechat;
$avatar = '';
if (!empty($wechat)) {
$avatar = $wechat->avatar2?$wechat->avatar2:$wechat->avatar;
}
$sex = $user->sex;
if (empty($sex)) {
$sex = $wechat->gender?:0;
}
//生成订单
$order = array(
'type_id'=>$activity->id,
'goods'=>$activity->theme,
'price'=>$activity->fee,
'num'=>1,
'type'=>'activity',
'trade_no'=>$trade_no,
'name'=>$request->input('name'),
'mobile'=>$request->input('mobile'),
'wechat_id'=>$request->input('wechat_id'),
'remark'=>$request->input('remark'),
'pay_status'=>'UNPAID',
'from_openid'=>$request->input('from_openid'),
);
if ($activity->fee == 0) {//免费活动
$user->activityMember()->create([
'activity_id'=>$activity->id,
'name'=>$user->name,
'sex'=>$sex,
'mobile'=>$user->mobile,
'avatar'=>$avatar,
'is_joined'=>1,
]);
$order['pay_status'] = 'PAID';
$order = $user->orders()->create($order);
$order->wx_pay = [];
//发送模板通知给管理员(公众号)
$this->sendActivityNotice($activity, $user);
//发送订阅通知给用户
// $this->sendActivityNoticeToUser($activity, $user);
return $this->success('ok', $order);
}else{//收费活动
$pay_order = array(
'user_id' => $user_id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $activity->fee,
);
$wx_pay = $this->constructWXPay($pay_order, $user_id, $activity->theme);
$order = $user->orders()->create($order);
//支付订单
$order_pay = PayOrder::create($pay_order);
$order_pay->wx_pay = $wx_pay;
return $this->success('ok', $order_pay);
}
}
/**
* 用户参加活动V3
* 增加sku
*/
public function joinActivityV3(Request $request, Activity $activity, $sku_id=0)
{
try {
$trade_no = $this->getTradeNO();
//用户信息
$user = auth()->user();
$rule_name = $request->path();
$h5 = strstr($rule_name,'official');
if($h5) $type='h5';
$user_id = $user->id;
$member = $user->activityMember()->where('activity_id', $activity->id)->where('is_joined', 1)->first();
if ($member&&$activity->can_repeat_sign!=1) {
return $this->failure('已报名');
}
// if(!empty($activity->apply_deadline)){
// $apply_deadline = strtotime($activity->apply_deadline);
// if($apply_deadline