| | |
| | | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.fasterxml.jackson.core.type.TypeReference; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.utils.CodeGenerateUtils; |
| | | import com.ruoyi.framework.web.service.TokenService; |
| | | import com.ruoyi.system.model.TCourseOrder; |
| | | import com.ruoyi.system.service.TCourseOrderService; |
| | | import com.ruoyi.system.wxPay.enums.RefundEnum; |
| | | import com.ruoyi.system.wxPay.enums.TradeStateEnum; |
| | | import com.ruoyi.system.wxPay.model.WeixinPayProperties; |
| | | import com.ruoyi.system.wxPay.utils.WxTimeUtils; |
| | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.BufferedReader; |
| | | import java.io.IOException; |
| | | import java.io.PrintWriter; |
| | | import java.math.BigDecimal; |
| | | import java.nio.charset.StandardCharsets; |
| | |
| | | wxV3Pay.ack(false, e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 退款回调 |
| | | */ |
| | | // @PostMapping("refund/notify") |
| | | // @ApiOperation("退款回调") |
| | | // public void refundNotify(HttpServletRequest request, HttpServletResponse response) throws Exception { |
| | | // try { |
| | | //// System.err.println("微信回调"); |
| | | //// BufferedReader reader = request.getReader(); |
| | | //// StringBuilder requestBody = new StringBuilder(); |
| | | //// String line; |
| | | //// while ((line = reader.readLine()) != null) { |
| | | //// requestBody.append(line); |
| | | //// } |
| | | //// System.err.println("全部请求体" + requestBody); |
| | | //// JSONObject jsonObject = JSONObject.parseObject(requestBody.toString()); |
| | | //// JSONObject resource = jsonObject.getJSONObject("resource"); |
| | | //// AesUtil aesUtil = new AesUtil(weixinPayProperties.getV3().getApiKey().getBytes(StandardCharsets.UTF_8)); |
| | | //// String decryptedData = aesUtil.decryptToString(resource.getString("associated_data").getBytes(StandardCharsets.UTF_8), resource.getString("nonce").getBytes(StandardCharsets.UTF_8), resource.getString("ciphertext")) |
| | | // } |
| | | // } |
| | | @PostMapping("refund/notify") |
| | | public void refundNotify(HttpServletRequest request) throws IOException { |
| | | try { |
| | | Map<String, Object> params = wxV3Pay.verifyNotify(request, new TypeReference<Map<String, Object>>() { |
| | | }); |
| | | // 商户订单号 |
| | | String out_trade_no = params.get("out_trade_no").toString(); |
| | | // 商户退款单号 |
| | | String out_refund_no = params.get("out_refund_no").toString(); |
| | | // 退款状态 |
| | | String tradeState = params.get("refund_status").toString(); |
| | | // 微信支付订单号 |
| | | String transaction_id = params.get("transaction_id").toString(); |
| | | if (tradeState.equals(RefundEnum.SUCCESS.name())) { |
| | | TCourseOrder order = courseOrderService.getOne(Wrappers.lambdaQuery(TCourseOrder.class) |
| | | .eq(TCourseOrder::getRefundNumber, out_refund_no).last("LIMIT 1")); |
| | | order.setPayStatus(3); |
| | | order.setRefundStatus(2); |
| | | order.setRefundTransactionId(transaction_id); |
| | | courseOrderService.updateById(order); |
| | | |
| | | wxV3Pay.ack(); |
| | | } |
| | | }catch (Exception e){ |
| | | wxV3Pay.ack(false, "不是成功的退款状态"); |
| | | } |
| | | } |
| | | } |