package com.ruoyi.web.controller.api; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.domain.R; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.wxPay.enums.TradeStateEnum; import com.ruoyi.system.wxPay.model.WeixinPayProperties; import com.ruoyi.system.wxPay.utils.WxV3Pay; import com.wechat.pay.contrib.apache.httpclient.util.AesUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.Map; /** * 微信相关接口 */ @Slf4j @RestController @CrossOrigin @RequestMapping("/wx/") @Api(tags = {"微信支付相关接口"}) public class WxPayController { @Autowired private WxV3Pay wxV3Pay; @Autowired private TokenService tokenService; @Autowired private WeixinPayProperties weixinPayProperties; /** * 按实际修改 */ @ApiOperation("订单支付") @PostMapping("orderPay") public R> orderPay(@RequestParam(value = "inspectionId") String inspectionId) { // TSysOtherConfig sysOtherConfig = sysOtherConfigService.getById(1); // if (Objects.isNull(sysOtherConfig.getAiPrice())) { // return R.fail("系统未配置AI支付价格"); // } // // String userId = tokenService.getLoginUserApplet().getUserId(); // TSysAppUser sysAppUser = sysAppUserService.getById(userId); // // 价格 // Long totalPrice = sysOtherConfig.getAiPrice().multiply(new BigDecimal(100)).longValue(); // // 生成订单号 // String orderNo = CodeGenerateUtils.generateOrderSn(); // // 查询用户信息 用户openid // String openId = sysAppUser.getOpenId(); // // 存储支付记录 // sysPayRecordService.saveData(orderNo, userId, sysOtherConfig.getAiPrice(), 1); // // 调用支付方法 // Map result = wxV3Pay.jsApi(orderNo, totalPrice, openId,"AI检测报告支付",""); // log.info("支付参数:{}", result); return R.ok(); } /** * 支付回调 */ @PostMapping("pay/notify") @ApiOperation("订单回调") public void payNotify(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"); // 查询订单 // TSysPayRecord sysPayRecord = sysPayRecordService.getOne(Wrappers.lambdaQuery(TSysPayRecord.class) // .eq(TSysPayRecord::getOrderNo, out_trade_no).last("LIMIT 1")); if (trade_state.equals(TradeStateEnum.SUCCESS.name())) { log.info("回调成功"); // 订单号查询订单 // sysPayRecord.setPayState(2); // sysPayRecord.setPayTime(WxTimeUtils.dateToLocalDateTime(WxTimeUtils.toRfc3339Date(success_time))); // sysPayRecord.setTransactionId(transaction_id); // sysPayRecordService.updateById(sysPayRecord); // // // 处理检测报告为可见 // TSysInspection sysInspection = sysInspectionService.getById(sysPayRecord.getInspectionId()); // sysInspection.setIsPay(1); // sysInspectionService.updateById(sysInspection); PrintWriter out = response.getWriter(); out.print("SUCCESS"); out.flush(); out.close(); } } catch (Exception e) { log.error("支付回调异常:{}", e, e); wxV3Pay.ack(false, e.getMessage()); } } }