| | |
| | | import com.ruoyi.common.utils.CodeGenerateUtils; |
| | | import com.ruoyi.framework.web.service.TokenService; |
| | | import com.ruoyi.system.model.TCourseOrder; |
| | | import com.ruoyi.system.model.TInsurance; |
| | | import com.ruoyi.system.model.TInsuranceOrder; |
| | | import com.ruoyi.system.service.TCourseOrderService; |
| | | import com.ruoyi.system.service.TInsuranceOrderService; |
| | | import com.ruoyi.system.wxPay.enums.RefundEnum; |
| | | import com.ruoyi.system.wxPay.enums.TradeStateEnum; |
| | | import com.ruoyi.system.wxPay.model.WeixinPayProperties; |
| | |
| | | import java.io.PrintWriter; |
| | | import java.math.BigDecimal; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Date; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | |
| | |
| | | |
| | | @Autowired |
| | | private TCourseOrderService courseOrderService; |
| | | |
| | | @Autowired |
| | | private TInsuranceOrderService tInsuranceOrderService; |
| | | |
| | | |
| | | |
| | |
| | | order.setPayTime(WxTimeUtils.dateToLocalDateTime(WxTimeUtils.toRfc3339Date(success_time))); |
| | | order.setTransactionId(transaction_id); |
| | | courseOrderService.updateById(order); |
| | | |
| | | PrintWriter out = response.getWriter(); |
| | | out.print("SUCCESS"); |
| | | out.flush(); |
| | | out.close(); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("支付回调异常:{}", e, e); |
| | | wxV3Pay.ack(false, e.getMessage()); |
| | | } |
| | | } |
| | | /** |
| | | * 支付回调 |
| | | */ |
| | | @PostMapping("pay/notifyInsurance") |
| | | @ApiOperation("保险订单回调") |
| | | public void notifyInsurance(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")); |
| | | System.err.println("微信解密的字符串信息" + decryptedData); |
| | | JSONObject jsonInfo = JSONObject.parse(decryptedData); |
| | | String out_trade_no = jsonInfo.getString("out_trade_no"); |
| | | String transaction_id = jsonInfo.getString("transaction_id"); |
| | | String trade_state = jsonInfo.getString("trade_state"); |
| | | String success_time = jsonInfo.getString("success_time"); |
| | | // 查询订单 |
| | | |
| | | TInsuranceOrder order = tInsuranceOrderService.getOne(Wrappers.lambdaQuery(TInsuranceOrder.class) |
| | | .eq(TInsuranceOrder::getPayNo, out_trade_no).last("LIMIT 1")); |
| | | if (trade_state.equals(TradeStateEnum.SUCCESS.name())) { |
| | | log.info("回调成功"); |
| | | // 订单号查询订单 |
| | | order.setStatus(2); |
| | | order.setPayTime(LocalDateTime.now()); |
| | | order.setTransactionId(transaction_id); |
| | | tInsuranceOrderService.updateById(order); |
| | | |
| | | PrintWriter out = response.getWriter(); |
| | | out.print("SUCCESS"); |
| | |
| | | |
| | | JSONObject params = JSONObject.parseObject(decryptedData); |
| | | |
| | | System.out.println("退款返回参数"+params); |
| | | // 商户订单号 |
| | | String out_trade_no = params.get("out_trade_no").toString(); |
| | | // 商户退款单号 |
| | |
| | | courseOrderService.updateById(order); |
| | | |
| | | wxV3Pay.ack(); |
| | | }else { |
| | | TCourseOrder order = courseOrderService.getOne(Wrappers.lambdaQuery(TCourseOrder.class) |
| | | .eq(TCourseOrder::getRefundNumber, out_refund_no).last("LIMIT 1")); |
| | | order.setRefundStatus(1); |
| | | |
| | | courseOrderService.updateById(order); |
| | | wxV3Pay.ack(); |
| | | } |
| | | }catch (Exception e){ |
| | | wxV3Pay.ack(false, "不是成功的退款状态"); |
| | | } |
| | | } |
| | | |
| | | |
| | | @PostMapping("refund/notifyInsurance") |
| | | public void notifyInsurance(HttpServletRequest request) throws IOException { |
| | | 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")); |
| | | System.err.println("微信解密的字符串信息" + decryptedData); |
| | | |
| | | JSONObject params = JSONObject.parseObject(decryptedData); |
| | | |
| | | // 商户订单号 |
| | | 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())) { |
| | | TInsuranceOrder order = tInsuranceOrderService.getOne(Wrappers.lambdaQuery(TInsuranceOrder.class) |
| | | .eq(TInsuranceOrder::getRefundNumber, out_refund_no).last("LIMIT 1")); |
| | | order.setStatus(1); |
| | | order.setRefundStatus(2); |
| | | order.setRefundTransactionId(transaction_id); |
| | | tInsuranceOrderService.updateById(order); |
| | | |
| | | wxV3Pay.ack(); |
| | | } |
| | | }catch (Exception e){ |
| | | wxV3Pay.ack(false, "不是成功的退款状态"); |