middleware('auth');
view()->share('nav', 2);
}
public function index(Request $request)
{
$user_id = $request->user_id;
if ($user_id) {
$user = User::find($user_id);
} else {
$user = Auth::user();
}
$withdraw_explain = \Params::get('withdraw_explain');
$withdraw_explain = str_replace("\n", "
", $withdraw_explain);
$withdraw_explain = str_replace("\r", "
", $withdraw_explain);
$logs = Withdraw::where('user_id', $user->id)->orderBy('id', 'desc')->get();
$withdraw_total = sprintf("%.2f", abs($user->account->logs()->whereIn('rule_id', [1, 2])->sum('variable')));
return view('withdraw.index', compact('logs', 'withdraw_total', 'withdraw_explain'));
}
public function store(Request $request)
{
die();
$week_start = Carbon::now()->startOfWeek()->toDateTimeString();
$week_end = Carbon::now()->endOfWeek()->toDateTimeString();
$num = Withdraw::where('user_id', Auth::id())->whereBetween('created_at', [$week_start, $week_end])->where('state', '<>', 2)->count();
if ($num > 0) {
return $this->error('您本周已提现过,下周再来吧~');
}
if (empty($request->way)) {
return $this->error('请选择提现方式');
} elseif ($request->way == 'WenxinNo') {
if (empty($request->wechat)) {
return $this->error('请输入微信号,工作人员会在1-2个工作日内为您转款');
}
} elseif ($request->way == 'Alipay') {
if (empty($request->alipay)) {
return $this->error('请输入支付宝账号,工作人员会在1-2个工作日内为您转款');
}
} elseif ($request->way == 'Wechat') {
if ($request->money > 200) {
return $this->error('单次提现金额最大200元');
}
} elseif ($request->way == 'Bankcard') {
$request->validate([
'bank_name' => 'required',
'bank_address' => 'required',
'bank_no' => 'required',
'payee' => 'required|min:2|max:8',
], [
'bank_name.required' => '收款银行必须填写',
'bank_address.required' => '收款支行必须填写',
'bank_no.required' => '银行卡号必须填写',
'payee.required' => '收款人必须填写',
'payee.min' => '收款人不能少于:min个汉字',
'payee.max' => '收款人不能多于:max个汉字',
]);
if (!preg_match("/^([\x{4e00}-\x{9fa5}]+)$/u", $request->payee)) {
return $this->error('请输入确认的收款人姓名');
}
}
if ($request->money < 100) {
return $this->error('提现金额必须大于等于100元');
}
if ($request->money > Auth::user()->account->cash) {
return $this->error('账户余额不足');
}
if (empty($request->openid)) {
return $this->error('未获取到微信信息');
}
try {
DB::transaction(function () use ($request) {
$tax = round($request->money * 0.05, 3);
$take = $request->money - $tax;
Withdraw::create([
'user_id' => Auth::id(),
'amount' => $request->money,
'tax' => $tax, //手续费
'take' => $take, //实到金额
'balance' => Auth::user()->account->cash - $request->money,
'openid' => $request->openid,
'way' => $request->way,
'wechat' => $request->has('wechat') ? $request->wechat : '',
'alipay' => $request->has('alipay') ? $request->alipay : '',
'bank_no' => $request->has('bank_no') ? $request->bank_no : '',
'bank_name' => $request->has('bank_name') ? $request->bank_name : '',
'bank_name' => $request->has('bank_address') ? $request->bank_address : '',
'payee' => $request->has('payee') ? $request->payee : '',
'state' => 0,
]);
if ($request->way == 'Bankcard') {
$userinfo = Auth::user()->info;
$userinfo->bank_no = $request->bank_no;
$userinfo->bank_name = $request->bank_name;
$userinfo->bank_address = $request->bank_address;
$userinfo->payee = $request->payee;
$userinfo->save();
}
Auth::user()->rule('withdraw', -$request->money);
});
} catch (\Exception $e) {
return $this->error($e->getmessage());
}
return $this->success('申请提现成功,等待管理员审核', route('withdraw.index'));
}
public function wechat(Request $request)
{
$withdraw_min = \Params::get('withdraw_min');
$withdraw_max = \Params::get('withdraw_max');
return view('withdraw.wechat', compact('withdraw_min', 'withdraw_max'));
}
public function wechatdo(Request $request)
{
// $user = Auth::user();
// if (!in_array($user->id, [1, 7])) {
// return $this->error('暂未开通');
// }
$data = $request->all();
$validator = Validator::make($data, [
'amount' => 'required|integer',
], [
'amount.required' => '提现金额必须填写',
'amount.integer' => '提现金额必须是整数',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$user = Auth::user();
$withdraw_min = \Params::get('withdraw_min');
$withdraw_max = \Params::get('withdraw_max');
if ($request->amount < $withdraw_min) {
return $this->error('单次最少提现金额为' . $withdraw_min);
}
if ($request->amount > $user->account->cash) {
return $this->error('账户余额不足,当前提现金额为' . $user->account->cash);
}
if ($request->amount > $withdraw_max) {
return $this->error('单次最多提现金额为' . $withdraw_max);
}
$validator = Validator::make($data, [
'code' => 'required|sms_check:mobile,DEFAULT',
], [
'code.required' => '验证码必须填写',
'code.sms_check' => '验证码不正确',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$in_data = [
'amount' => $request->amount,
'tax' => 0,
'type' => 'Wechat',
'take' => $request->amount,
'user_id' => $user->id,
];
$info = Withdraw::create($in_data);
if ($info) {
$app = app('wechat.payment');
$no = 'W' . date('YmdHis') . str_pad(rand(0, 9999), 4, "0", STR_PAD_LEFT);
$str = $app->transfer->toBalance([
'partner_trade_no' => $no,
'openid' => $user->openid,
'check_name' => 'NO_CHECK',
'amount' => $info->take * 100,
'desc' => '提现到账',
]);
if ($str->return_code == 'SUCCESS' && $str->result_code == 'SUCCESS') {
$user->rule('withdraw', -$info->take, true);
$info->remark = '微信自动到账';
$info->partner_trade_no = $no;
$info->state = 1;
$info->save();
event(new WithdrawCompleted($info));
return $this->success('提现成功,查看提现记录请点击《跳转》,继续提现点击《取消》。', route('withdraw.index'));
} else {
$info->remark = $str->return_msg . ',' . $str->err_code_des;
$info->state = -1;
$info->save();
\Log::error($str);
return $this->error('系统繁忙。');
}
} else {
return $this->error('提现失败');
}
}
public function code()
{
$app = app('wechat.official_account');
$user = $app->oauth->user();
Session::put('withdraw_openid', $user->id);
return redirect()->route('withdraw.create');
}
}