webman/app/controller/api/WithdrawController.php

167 lines
5.4 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\controller\api;
use app\model\Withdraw;
use app\model\User;
use app\model\ExchangeRate;
use app\model\Userbank;
use support\Request;
use App\Utils\API\Payment;
use App\Utils\API\PaymentNew;
use App\Utils\ApiResponse;
use App\Utils\ApiResponseApp;
use App\dao\UserRewardDao;
use hg\apidoc\annotation as Apidoc;
use Carbon\Carbon;
use support\Log;
/**
* @Apidoc\Title("提现订单")
*/
class WithdrawController
{
protected $noNeedLogin = ['callback'];
/**
* @Apidoc\Title("1.0 查询当前用户提现订单")
* @Apidoc\Url("api/withdraw/withdrawCashList")
* @Apidoc\Method("POST")
*/
public function withdrawCashList(Request $request)
{
$page = $request->post('page', 1); // 默认第一页
$size = $request->post('size', 15); // 默认每页15条
$status = $request->post('status', 0); // 默认状态为0全部
$time = $request->post('time', null); // 默认时间不做过滤
$userId = $request->data['id'];
// 初始化查询构建器
$query = Withdraw::query();
// 根据状态过滤
if ($status != 0) {
$query->where('status', $status);
}
// 根据时间过滤
if (!is_null($time)) {
$todayStart = Carbon::now()->startOfDay(); // 今天的开始时间 (00:00:00)
$todayEnd = Carbon::now()->endOfDay(); // 今天的结束时间 (23:59:59)
$yesterdayStart = Carbon::now()->subDay()->startOfDay(); // 昨天的开始时间
$sevenDaysAgoStart = Carbon::now()->subDays(7)->startOfDay(); // 七天前的开始时间
switch ($time) {
case 1:
$query->whereBetween('createtime2', [$todayStart, $todayEnd]);
break;
case 2:
$query->whereBetween('createtime2', [$yesterdayStart, $todayEnd]);
break;
case 3:
$query->whereBetween('createtime2', [$sevenDaysAgoStart, $todayEnd]);
break;
}
}
// 添加用户ID过滤条件
$query->where('user_id', $userId);
// 查询结果
$withdrawOrders = $query->orderBy('createtime2', 'desc')
->skip(($page - 1) * $size)
->take($size)
->get();
// 手动映射字段
// $withdrawOrders = $withdrawOrders->map(function ($item) {
// // 将 money 字段映射为 amount
// $item->amount = $item->money;
// unset($item->money); // 删除原始的 money 字段
// return $item;
// });
// $withdrawOrders->money = 100;
// var_dump($withdrawOrders);
// 返回成功响应
return ApiResponseApp::success($withdrawOrders);
}
/**
* @Apidoc\Title("小于1000直接转账大于1000生成审批")
* @Apidoc\Url("api/withdraw/submit")
* @Apidoc\Method("POST")
*/
public function submit(Request $request)
{
$money_no = $request->post('money');
//用户存了一个 转账信息 这里是用户转账信息的id
$bank_id = $request->post('bank_id');
$user_id = $request->data['id'];
$user = User::find($user_id);
//提现金额
$rate = ExchangeRate::where('type', 'BDT')->get();
$money = $money_no / 100 * $rate[0]['points'];
$withdraw = Withdraw::create([
'user_id' => $user_id,
'amount' => $money,
'status' => 1,
'createtime2' => date('Y-m-d H:i:s'),
'username' => $user->username,
'status_text' => '申请中',
]);
//大于1000等待管理员审核
if ($money >= 1000) {
return ApiResponseApp::success(null, '等待管理员审核');
}
//用户积分减少$money
UserRewardDao::base($user_id, 1, - ($money_no + 300), '提现');
$userbank = Userbank::where('id', $bank_id)->first();
//获取刚刚存入数据库的id(订单号)
$orderId = $withdraw->id;
$res = PaymentNew::pushMoney($money, $userbank->bank_username, $userbank->account, $userbank->bank_name, $orderId);
// //逻辑错误需要修改
if ($res['Success']) {
$withdraw->update([
'status' => 4, //
'status_text' => '等待银行打款',
'order_number' => $res['TrackingNumber'] ?? null,
]);
return ApiResponseApp::success(null, '转账成功');
} else {
return ApiResponseApp::error(null, '转账失败');
}
}
/**
* @Apidoc\Title("请求回调")
* @Apidoc\Url("api/withdraw/callback")
* @Apidoc\Method("POST")
*/
public function callback(Request $request)
{
$callbackData = $request->all();
// 记录回调数据以便调试
Log::info('Payment Callback Received:', $callbackData);
$orderId = $callbackData['TrackingNumber'] ?? null;
$failedMessage = $callbackData['FailedMessage'] ?? null;
$withdraw = Withdraw::where('order_number', $orderId)->first();
//$failedMessage为null就是成功
if ($failedMessage != null) {
$withdraw->update([
'status' => 5,
'status_text' => '支付失败: ' . $failedMessage,
]);
}
}
}