| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- namespace App\Http\Controllers\Game;
- use App\Http\logic\api\CouponLogic;
- use App\Models\UserCoupon;
- use Illuminate\Http\Request;
- /**
- * 优惠券 API 控制器
- *
- * 路由:
- * GET /coupon/list 获取用户优惠券列表(自动发放)
- * POST /coupon/preview 预估优惠券赠送金额(充值前调用)
- */
- class CouponController
- {
- /**
- * 获取用户优惠券列表
- *
- * 同时触发自动发放逻辑:根据配置策略检查用户是否符合条件并自动发放。
- *
- * GET /api/coupon/list
- * 参数: userID (必填)
- *
- * 响应:
- * {
- * "code": 200,
- * "msg": "success",
- * "data": {
- * "list": [...], // 当前可用优惠券
- * "new_issued": [...] // 本次新发放的优惠券
- * }
- * }
- */
- public function list(Request $request)
- {
- // game.php 中间件设置 globalUser;api.php 使用 userID 参数
- $userId = (int) ($request->globalUser->UserID ?? $request->input('userID', 0));
- if ($userId <= 0) {
- return apiReturnFail('Invalid userID');
- }
- $logic = new CouponLogic();
- $data = $logic->getList($userId);
- return apiReturnSuc($data);
- }
- /**
- * 预估优惠券赠送金额(充值前调用)
- *
- * 用户在充值页面选择优惠券后,可调用此接口查看预计赠送金额。
- *
- * POST /api/coupon/preview
- * 参数: userID (必填), coupon_id (必填), payAmt (必填, 充值金额元)
- *
- * 响应:
- * {
- * "code": 200,
- * "msg": "success",
- * "data": {
- * "coupon_id": 1,
- * "bonus_amount": 10.00, // 赠送金额(元)
- * "bonus_coins": 1000, // 赠送金币(分)
- * "total_amount": 60.00 // 到账总额(元) = 充值 + 赠送
- * }
- * }
- */
- public function preview(Request $request)
- {
- // game.php 中间件设置 globalUser;api.php 使用 userID 参数
- $userId = (int) ($request->globalUser->UserID ?? $request->input('userID', 0));
- $couponId = (int) $request->input('coupon_id');
- $payAmt = (float) $request->input('payAmt');
- if ($userId <= 0 || $couponId <= 0 || $payAmt <= 0) {
- return apiReturnFail('Invalid parameters');
- }
- $logic = new CouponLogic();
- $coupon = $logic->validateForPayment($couponId, $userId, $payAmt);
- if ($coupon === false) {
- return apiReturnFail($logic->getError());
- }
- $couponService = new \App\Services\CouponService();
- $bonusCoins = $couponService->calcBonusCoins($coupon, $payAmt);
- $bonusAmount = $bonusCoins / 100; // 分转元
- return apiReturnSuc([
- 'coupon_id' => $couponId,
- 'bonus_amount' => round($bonusAmount, 2),
- 'bonus_coins' => $bonusCoins,
- 'total_amount' => round($payAmt + $bonusAmount, 2),
- ]);
- }
- }
|