CourseOrderController.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package com.zhentao.controller;
  2. import com.github.binarywang.wxpay.exception.WxPayException;
  3. import com.zhentao.common.Result;
  4. import com.zhentao.dto.CoursePurchaseRequest;
  5. import com.zhentao.service.CourseOrderService;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.web.bind.annotation.*;
  9. import java.util.List;
  10. import java.util.Map;
  11. /**
  12. * 课程订单控制器
  13. */
  14. @Slf4j
  15. @RestController
  16. @RequestMapping("/api/course-order")
  17. public class CourseOrderController {
  18. @Autowired
  19. private CourseOrderService courseOrderService;
  20. /**
  21. * 购买课程(获取支付参数)
  22. */
  23. @PostMapping("/purchase")
  24. public Result<Map<String, Object>> purchaseCourse(@RequestBody CoursePurchaseRequest request) {
  25. try {
  26. Map<String, Object> payParams = courseOrderService.purchaseCourse(
  27. request.getUserId(),
  28. request.getCourseId(),
  29. request.getCourseName(),
  30. request.getPrice()
  31. );
  32. return Result.success(payParams);
  33. } catch (RuntimeException e) {
  34. return Result.error(e.getMessage());
  35. } catch (WxPayException e) {
  36. log.error("微信支付下单失败", e);
  37. return Result.error("支付下单失败:" + e.getMessage());
  38. } catch (Exception e) {
  39. log.error("课程购买失败", e);
  40. return Result.error("课程购买失败");
  41. }
  42. }
  43. /**
  44. * 微信支付回调
  45. */
  46. @PostMapping("/notify")
  47. public String handlePayNotify(@RequestBody String notifyData) {
  48. log.info("收到课程支付回调:{}", notifyData);
  49. try {
  50. return courseOrderService.handlePayNotify(notifyData);
  51. } catch (WxPayException e) {
  52. log.error("处理课程支付回调失败", e);
  53. return "处理支付回调失败";
  54. }
  55. }
  56. /**
  57. * 检查用户是否已购买课程
  58. */
  59. @GetMapping("/check")
  60. public Result<Boolean> checkPurchased(
  61. @RequestParam Long userId,
  62. @RequestParam Integer courseId) {
  63. try {
  64. boolean purchased = courseOrderService.checkPurchased(userId, courseId);
  65. return Result.success(purchased);
  66. } catch (Exception e) {
  67. log.error("检查购买状态失败", e);
  68. return Result.error("检查购买状态失败");
  69. }
  70. }
  71. /**
  72. * 获取用户已购买的课程ID列表
  73. */
  74. @GetMapping("/purchased")
  75. public Result<List<Integer>> getPurchasedCourses(@RequestParam Long userId) {
  76. try {
  77. List<Integer> courseIds = courseOrderService.getPurchasedCourseIds(userId);
  78. return Result.success(courseIds);
  79. } catch (Exception e) {
  80. log.error("获取已购买课程失败", e);
  81. return Result.error("获取已购买课程失败");
  82. }
  83. }
  84. }