VipController.java 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package com.zhentao.controller;
  2. import com.github.binarywang.wxpay.exception.WxPayException;
  3. import com.zhentao.common.Result;
  4. import com.zhentao.dto.VipPayOrderRequest;
  5. import com.zhentao.service.VipService;
  6. import com.zhentao.vo.UserVipInfoVO;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.web.bind.annotation.*;
  10. import java.util.Map;
  11. /**
  12. * VIP控制器
  13. */
  14. @Slf4j
  15. @RestController
  16. @RequestMapping("/api/vip")
  17. public class VipController {
  18. @Autowired
  19. private VipService vipService;
  20. /**
  21. * 获取VIP信息和套餐列表
  22. * @param userId 用户ID(可选,不传则默认为1)
  23. * @return VIP信息
  24. */
  25. @GetMapping("/inf")
  26. public Result<UserVipInfoVO> getVipInfo(@RequestParam(required = false) Long userId) {
  27. try {
  28. // 如果没有传userId,默认使用1
  29. if (userId == null) {
  30. userId = 1L;
  31. }
  32. UserVipInfoVO vo = vipService.getVipInfo(userId);
  33. return Result.success(vo);
  34. } catch (Exception e) {
  35. return Result.error("获取VIP信息失败: " + e.getMessage());
  36. }
  37. }
  38. /**
  39. * 购买VIP
  40. * @param userId 用户ID
  41. * @param packageId 套餐ID
  42. * @return 购买结果
  43. */
  44. @PostMapping("/purchase")
  45. public Result<String> purchaseVip(@RequestBody VipPayOrderRequest payOrderRequest) {
  46. try {
  47. Map<String, Object> stringObjectMap = vipService.purchaseVip(payOrderRequest.getUserId(), payOrderRequest.getPackageId());
  48. if (stringObjectMap != null) {
  49. return Result.success("VIP开通成功!", stringObjectMap);
  50. } else {
  51. return Result.error("VIP开通失败");
  52. }
  53. } catch (RuntimeException e) {
  54. return Result.error(e.getMessage());
  55. } catch (Exception e) {
  56. log.error(e.getMessage());
  57. return Result.error("VIP开通失败");
  58. }
  59. }
  60. /**
  61. * 微信支付V2回调接口(需配置为外网可访问)
  62. */
  63. @PostMapping("/notify")
  64. public String handleWxPayNotify(@RequestBody String notifyData) {
  65. log.info("收到微信支付回调:{}", notifyData);
  66. try {
  67. return vipService.handlePayNotify(notifyData);
  68. } catch (WxPayException e) {
  69. log.error("处理支付回调失败", e);
  70. return "处理支付回调失败";
  71. }
  72. }
  73. }