OrderController.java 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package com.qmrb.system.controller;
  2. import cn.hutool.core.util.IdUtil;
  3. import cn.hutool.json.JSONUtil;
  4. import com.qmrb.system.pojo.dto.LoginParam;
  5. import com.qmrb.system.pojo.dto.UserParam;
  6. import com.qmrb.system.pojo.entity.Order;
  7. import com.qmrb.system.pojo.entity.ToolWxConfig;
  8. import com.qmrb.system.pojo.vo.ReCreateOrderVO;
  9. import com.qmrb.system.pojo.vo.ToCreateOrderVO;
  10. import com.qmrb.system.pojo.vo.UserInfo;
  11. import com.qmrb.system.pojo.vo.WxLoginVO;
  12. import com.qmrb.system.service.OrderService;
  13. import com.qmrb.system.service.ToolWxConfigService;
  14. import com.qmrb.system.service.UserService;
  15. import com.qmrb.system.utils.WxPayUtil;
  16. import com.qmrb.system.wxpayback.api.CommonController;
  17. import com.qmrb.system.wxpayback.api.CommonResult;
  18. import com.qmrb.system.wxpayback.constant.SystemConstant;
  19. import com.qmrb.system.wxpayback.constant.wxpay.WXOrderConstant;
  20. import com.wechat.pay.contrib.apache.httpclient.exception.ParseException;
  21. import com.wechat.pay.contrib.apache.httpclient.exception.ValidationException;
  22. import com.wechat.pay.contrib.apache.httpclient.notification.Notification;
  23. import lombok.extern.slf4j.Slf4j;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.web.bind.annotation.*;
  26. import javax.servlet.http.HttpServletRequest;
  27. import java.io.IOException;
  28. import java.util.HashMap;
  29. import java.util.Map;
  30. /**
  31. * <p>
  32. * 订单表 前端控制器
  33. * </p>
  34. *
  35. * @author 小王八
  36. * @since 2023-07-28
  37. */
  38. @RestController
  39. @RequestMapping("/api/order")
  40. @Slf4j
  41. public class OrderController extends CommonController {
  42. @Autowired
  43. private OrderService orderService;
  44. @Autowired
  45. private UserService userService;
  46. @Autowired
  47. private ToolWxConfigService toolWxConfigService;
  48. /**
  49. * 根据code获取openId,session_key,用于支付
  50. * @param loginVO
  51. * @return
  52. */
  53. @PostMapping("/wxLogin")
  54. public CommonResult<WxLoginVO> wxLogin(@RequestBody WxLoginVO loginVO){
  55. return process(() -> orderService.getOpenId(toolWxConfigService.findConf(),loginVO));
  56. }
  57. /**
  58. * 获取当前默认用户信息
  59. * @param userParam
  60. * @return
  61. */
  62. @GetMapping("/getMyInfo")
  63. public CommonResult<UserInfo> getMyInfo(UserParam userParam){
  64. return process(() -> userService.getMyInfo(userParam));
  65. }
  66. /**
  67. * 微信小程序登录
  68. * @param loginParam
  69. * @return
  70. */
  71. @GetMapping("/wxMpLogin")
  72. public CommonResult<UserInfo> wxMpLogin(LoginParam loginParam){
  73. return process(() -> userService.wxMpLogin(loginParam));
  74. }
  75. @PostMapping("/createOrder")
  76. public CommonResult<ReCreateOrderVO> createOrder(@RequestBody ToCreateOrderVO toCreatOrderVO){
  77. Long id = IdUtil.getSnowflake().nextId();
  78. toCreatOrderVO.setOutTradeNo(id.toString());
  79. //订单入库
  80. orderService.save(new Order().setAmount(toCreatOrderVO.getTotal())
  81. .setPayDescription(toCreatOrderVO.getDescription())
  82. .setPkId(id)
  83. .setPayStatus(SystemConstant.NUM_ZERO));
  84. return process(() -> orderService.createOrder(toolWxConfigService.findConf(),toCreatOrderVO));
  85. }
  86. @GetMapping("/refundOrder")
  87. public CommonResult<String> refundOrder(@RequestParam("outTradeNo") String outTradeNo){
  88. return process(() -> orderService.refundOrder(toolWxConfigService.findConf(), orderService.getById(outTradeNo)));
  89. }
  90. /**
  91. * 支付回调给微信确认
  92. * @param request
  93. * @return
  94. */
  95. @PostMapping("/wechatPayCallback")
  96. public String wechatCallback(HttpServletRequest request) {
  97. ToolWxConfig wxConfig = toolWxConfigService.findConf();
  98. log.info("微信退款回调通知调用=============================");
  99. Map<String,String> result = new HashMap(SystemConstant.NUM_16);
  100. result.put("code", "FAIL");
  101. result.put("message","失败");
  102. try {
  103. //微信回调信息校验
  104. // 构建request,传入必要参数
  105. Notification notification = WxPayUtil.verifyBack(request, wxConfig);
  106. log.info("=================微信验证签名成功=======成功时间=={}=====",notification.getCreateTime());
  107. notification.getSummary();
  108. if(SystemConstant.PAY_SUCCESS.equals(notification.getSummary())){
  109. if (orderService.verifyCreateOrder(notification.getDecryptData())) {
  110. log.info("==============================微信退款成功订单=====================================");
  111. result.put("code", WXOrderConstant.WX_BACK_OK);
  112. result.put("message", "支付回调成功");
  113. }
  114. }
  115. } catch (ValidationException | ParseException | IOException e) {
  116. log.error("微信支付回调失败验证" + e);
  117. }
  118. log.info("微信返回结果"+result);
  119. return JSONUtil.toJsonStr(result);
  120. }
  121. @GetMapping("/closeOrder")
  122. public void closeOrder(@RequestParam("outTradeNo") String outTradeNo) {
  123. orderService.closeOrder(toolWxConfigService.findConf(),outTradeNo);
  124. }
  125. @PostMapping("/wechatRefundBack")
  126. public String wechatRefundBack(HttpServletRequest request) {
  127. ToolWxConfig wxConfig = toolWxConfigService.findConf();
  128. Map result = new HashMap();
  129. result.put("code", "FAIL");
  130. result.put("message","失败");
  131. try {
  132. //微信回调信息校验
  133. // 构建request,传入必要参数
  134. Notification notification = WxPayUtil.verifyBack(request, wxConfig);
  135. log.info("=================微信验证签名成功=======成功时间=={}=====", notification.getCreateTime());
  136. // 根据退款返回结果 更新订单状态 返回结果
  137. if(orderService.updateRefundOrder(notification.getDecryptData())){
  138. log.info("==============================微信退款成功订单=====================================");
  139. result.put("code", WXOrderConstant.WX_BACK_OK);
  140. result.put("message", "退款回调成功");
  141. }
  142. } catch (ValidationException | ParseException | IOException e) {
  143. log.error("微信退款回调失败" + e);
  144. }
  145. return JSONUtil.toJsonStr(result);
  146. }
  147. @GetMapping("/toQueryOrderState")
  148. public CommonResult<String> toQueryOrderState(@RequestParam("outTradeNo") String outTradeNo) {
  149. return process(() -> orderService.queryCreateOrder(toolWxConfigService.findConf(), outTradeNo));
  150. }
  151. @GetMapping("/toQueryRefundState")
  152. public CommonResult<String> toQueryRefundState(@RequestParam("refundNo") String refundNo) {
  153. return process(() -> orderService.queryRefundOrder(toolWxConfigService.findConf(), refundNo));
  154. }
  155. }