123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- package com.qmrb.system.controller;
- import cn.hutool.core.util.IdUtil;
- import cn.hutool.json.JSONUtil;
- import com.qmrb.system.pojo.dto.LoginParam;
- import com.qmrb.system.pojo.dto.UserParam;
- import com.qmrb.system.pojo.entity.Order;
- import com.qmrb.system.pojo.entity.ToolWxConfig;
- import com.qmrb.system.pojo.vo.ReCreateOrderVO;
- import com.qmrb.system.pojo.vo.ToCreateOrderVO;
- import com.qmrb.system.pojo.vo.UserInfo;
- import com.qmrb.system.pojo.vo.WxLoginVO;
- import com.qmrb.system.service.OrderService;
- import com.qmrb.system.service.ToolWxConfigService;
- import com.qmrb.system.service.UserService;
- import com.qmrb.system.utils.WxPayUtil;
- import com.qmrb.system.wxpayback.api.CommonController;
- import com.qmrb.system.wxpayback.api.CommonResult;
- import com.qmrb.system.wxpayback.constant.SystemConstant;
- import com.qmrb.system.wxpayback.constant.wxpay.WXOrderConstant;
- import com.wechat.pay.contrib.apache.httpclient.exception.ParseException;
- import com.wechat.pay.contrib.apache.httpclient.exception.ValidationException;
- import com.wechat.pay.contrib.apache.httpclient.notification.Notification;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.*;
- import javax.servlet.http.HttpServletRequest;
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * <p>
- * 订单表 前端控制器
- * </p>
- *
- * @author 小王八
- * @since 2023-07-28
- */
- @RestController
- @RequestMapping("/api/order")
- @Slf4j
- public class OrderController extends CommonController {
- @Autowired
- private OrderService orderService;
- @Autowired
- private UserService userService;
- @Autowired
- private ToolWxConfigService toolWxConfigService;
- /**
- * 根据code获取openId,session_key,用于支付
- * @param loginVO
- * @return
- */
- @PostMapping("/wxLogin")
- public CommonResult<WxLoginVO> wxLogin(@RequestBody WxLoginVO loginVO){
- return process(() -> orderService.getOpenId(toolWxConfigService.findConf(),loginVO));
- }
- /**
- * 获取当前默认用户信息
- * @param userParam
- * @return
- */
- @GetMapping("/getMyInfo")
- public CommonResult<UserInfo> getMyInfo(UserParam userParam){
- return process(() -> userService.getMyInfo(userParam));
- }
- /**
- * 微信小程序登录
- * @param loginParam
- * @return
- */
- @GetMapping("/wxMpLogin")
- public CommonResult<UserInfo> wxMpLogin(LoginParam loginParam){
- return process(() -> userService.wxMpLogin(loginParam));
- }
- @PostMapping("/createOrder")
- public CommonResult<ReCreateOrderVO> createOrder(@RequestBody ToCreateOrderVO toCreatOrderVO){
- Long id = IdUtil.getSnowflake().nextId();
- toCreatOrderVO.setOutTradeNo(id.toString());
- //订单入库
- orderService.save(new Order().setAmount(toCreatOrderVO.getTotal())
- .setPayDescription(toCreatOrderVO.getDescription())
- .setPkId(id)
- .setPayStatus(SystemConstant.NUM_ZERO));
- return process(() -> orderService.createOrder(toolWxConfigService.findConf(),toCreatOrderVO));
- }
- @GetMapping("/refundOrder")
- public CommonResult<String> refundOrder(@RequestParam("outTradeNo") String outTradeNo){
- return process(() -> orderService.refundOrder(toolWxConfigService.findConf(), orderService.getById(outTradeNo)));
- }
- /**
- * 支付回调给微信确认
- * @param request
- * @return
- */
- @PostMapping("/wechatPayCallback")
- public String wechatCallback(HttpServletRequest request) {
- ToolWxConfig wxConfig = toolWxConfigService.findConf();
- log.info("微信退款回调通知调用=============================");
- Map<String,String> result = new HashMap(SystemConstant.NUM_16);
- result.put("code", "FAIL");
- result.put("message","失败");
- try {
- //微信回调信息校验
- // 构建request,传入必要参数
- Notification notification = WxPayUtil.verifyBack(request, wxConfig);
- log.info("=================微信验证签名成功=======成功时间=={}=====",notification.getCreateTime());
- notification.getSummary();
- if(SystemConstant.PAY_SUCCESS.equals(notification.getSummary())){
- if (orderService.verifyCreateOrder(notification.getDecryptData())) {
- log.info("==============================微信退款成功订单=====================================");
- result.put("code", WXOrderConstant.WX_BACK_OK);
- result.put("message", "支付回调成功");
- }
- }
- } catch (ValidationException | ParseException | IOException e) {
- log.error("微信支付回调失败验证" + e);
- }
- log.info("微信返回结果"+result);
- return JSONUtil.toJsonStr(result);
- }
- @GetMapping("/closeOrder")
- public void closeOrder(@RequestParam("outTradeNo") String outTradeNo) {
- orderService.closeOrder(toolWxConfigService.findConf(),outTradeNo);
- }
- @PostMapping("/wechatRefundBack")
- public String wechatRefundBack(HttpServletRequest request) {
- ToolWxConfig wxConfig = toolWxConfigService.findConf();
- Map result = new HashMap();
- result.put("code", "FAIL");
- result.put("message","失败");
- try {
- //微信回调信息校验
- // 构建request,传入必要参数
- Notification notification = WxPayUtil.verifyBack(request, wxConfig);
- log.info("=================微信验证签名成功=======成功时间=={}=====", notification.getCreateTime());
- // 根据退款返回结果 更新订单状态 返回结果
- if(orderService.updateRefundOrder(notification.getDecryptData())){
- log.info("==============================微信退款成功订单=====================================");
- result.put("code", WXOrderConstant.WX_BACK_OK);
- result.put("message", "退款回调成功");
- }
- } catch (ValidationException | ParseException | IOException e) {
- log.error("微信退款回调失败" + e);
- }
- return JSONUtil.toJsonStr(result);
- }
- @GetMapping("/toQueryOrderState")
- public CommonResult<String> toQueryOrderState(@RequestParam("outTradeNo") String outTradeNo) {
- return process(() -> orderService.queryCreateOrder(toolWxConfigService.findConf(), outTradeNo));
- }
- @GetMapping("/toQueryRefundState")
- public CommonResult<String> toQueryRefundState(@RequestParam("refundNo") String refundNo) {
- return process(() -> orderService.queryRefundOrder(toolWxConfigService.findConf(), refundNo));
- }
- }
|