From ce73b4255215e604e020057ad6f24bdadf2c36c0 Mon Sep 17 00:00:00 2001 From: linhw <5331581+linhw11@user.noreply.gitee.com> Date: Tue, 30 Apr 2024 17:17:56 +0800 Subject: [PATCH] ~ --- .../ruoyi/app/controller/PayController.java | 83 +++++++++++++++++++ .../ruoyi/app/domain/vo/AppUserDynamicVo.java | 2 + .../com/ruoyi/app/service/AlipayService.java | 35 ++++++++ .../mapper/app/AppUserDynamicMapper.xml | 6 +- 4 files changed, 124 insertions(+), 2 deletions(-) diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java index 7c3cb6b..8ffd55b 100644 --- a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java +++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java @@ -319,6 +319,89 @@ public class PayController extends BaseController } } + @RequestMapping(value = "/aliPayCallback") + public void aliPayCallback(HttpServletRequest request, HttpServletResponse response) { + /*log.info("=======>>>开始获取支付宝支付返回信息"); + //获取支付宝POST过来反馈信息,将异步通知中收到的待验证所有参数都存放到map中 + Map< String , String > params = new HashMap < String , String > (); + Map requestParams = request.getParameterMap(); + for(Iterator iter = requestParams.keySet().iterator();iter.hasNext();){ + String name = (String)iter.next(); + String[] values = (String [])requestParams.get(name); + String valueStr = ""; + for(int i = 0;i < values.length;i ++ ){ + valueStr = (i==values.length-1)?valueStr + values [i]:valueStr + values[i] + ","; + } + //乱码解决,这段代码在出现乱码时使用。 + //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); + params.put (name,valueStr); + } + //调用SDK验证签名 + //公钥验签示例代码 + boolean signVerified = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, CHARSET,sign_type) ; + //公钥证书验签示例代码 + // boolean flag = AlipaySignature.rsaCertCheckV1(params,alipayPublicCertPath,"UTF-8","RSA2"); + + if (signVerified){ + // TODO 验签成功后 + //按照支付结果异步通知中的描述,对支付结果中的业务内容进行1\2\3\4二次校验,校验成功后在response中返回success + } else { + // TODO 验签失败则记录异常日志,并在response中返回fail. + }*/ + StringBuilder sb = new StringBuilder(); + InputStream in; + try { + in = request.getInputStream(); + InputStreamReader reader = new InputStreamReader(in); + BufferedReader br = new BufferedReader(reader); + String s = ""; + while ((s = br.readLine()) != null) { + sb.append(s); + } + br.close(); + reader.close(); + in.close(); + } catch (IOException e) { + log.info("获取返回信息失败"); + } + log.info("微信返回来的字符串" + sb.toString()); + WeChatPayResult wexinResult = getResultByXml(sb.toString()); + PrintWriter out; + try { + out = response.getWriter(); + if (!("SUCCESS".equals(wexinResult.getResultCode()))) { + out.println("fail"); + } + + String outTradeNo = wexinResult.getOutTradeNo(); + AppOrder appOrder = appOrderMapper.selectOneByOutTradeNo(outTradeNo); + + AppOrder entity = new AppOrder(); + entity.setId(appOrder.getId()); + entity.setTradeNo(wexinResult.getTransactionId()); + entity.setPayStatus(2); + entity.setPayTime(new Date()); + appOrderMapper.updateAppOrder(entity); + + AppOrderPay miniOrderWechatPay = new AppOrderPay(); + miniOrderWechatPay.setAppid(wexinResult.getAppid()); + miniOrderWechatPay.setNoncestr(wexinResult.getNonceStr()); + miniOrderWechatPay.setOuttradeno(wexinResult.getOutTradeNo()); + miniOrderWechatPay.setResultcode(wexinResult.getResultCode()); + miniOrderWechatPay.setTimeend(wexinResult.getTimeEnd()); + miniOrderWechatPay.setTotalfee(wexinResult.getTotalFee()); + miniOrderWechatPay.setTransactionid(wexinResult.getTransactionId()); + appOrderPayMapper.insertAppOrderPay(miniOrderWechatPay); + + //修改用户信息 + updateUser(appOrder); + out.println("success"); + } catch (Exception e) { + log.info("异常订单:" + wexinResult.toString()); + log.info("========>PrintWriter fail"); + } + } + @RequestMapping(value = "/test") public AjaxResult test(){ diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/vo/AppUserDynamicVo.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/vo/AppUserDynamicVo.java index 76ae66e..ab8e4d6 100644 --- a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/vo/AppUserDynamicVo.java +++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/vo/AppUserDynamicVo.java @@ -53,6 +53,8 @@ public class AppUserDynamicVo extends AppUserDynamic // 是否会员;0是1否 private int isMember; + private String cityName; + // 话题 private List appTopicList = new ArrayList<>(); diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/AlipayService.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/AlipayService.java index 287386d..9f8bfd2 100644 --- a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/AlipayService.java +++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/AlipayService.java @@ -3,11 +3,16 @@ package com.ruoyi.app.service; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.request.AlipayTradeCreateRequest; import com.alipay.api.request.AlipayTradePagePayRequest; import com.alipay.api.response.AlipayTradeCreateResponse; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + @Service public class AlipayService { @@ -55,4 +60,34 @@ public class AlipayService { // 发起支付请求并获取支付结果 return alipayClient.sdkExecute(alipayRequest); } + + // https://api.xx.com/receive_notify.htm?gmt_payment=2015-06-11 22:33:59¬ify_id=42af7baacd1d3746cf7b56752b91edcj34&seller_email=testyufabu07@alipay.com¬ify_type=trade_status_sync&sign=kPbQIjX+xQc8F0/A6/AocELIjhhZnGbcBN6G4MM/HmfWL4ZiHM6fWl5NQhzXJusaklZ1LFuMo+lHQUELAYeugH8LYFvxnNajOvZhuxNFbN2LhF0l/KL8ANtj8oyPM4NN7Qft2kWJTDJUpQOzCzNnV9hDxh5AaT9FPqRS6ZKxnzM=&trade_no=2015061121001004400068549373&out_trade_no=21repl2ac2eOutTradeNo322&gmt_create=2015-06-11 22:33:46&seller_id=2088211521646673¬ify_time=2015-06-11 22:34:03&subject=FACE_TO_FACE_PAYMENT_PRECREATE中文&trade_status=TRADE_SUCCESS&sign_type=RSA2 + public void handleCallback(HttpServletRequest request) { + // 获取支付宝POST过来的数据 + Map params = new HashMap(); + Map requestParams = request.getParameterMap(); + for (String key : requestParams.keySet()) { + params.put(key, request.getParameter(key)); + } + + // 验证签名 + boolean signVerified = false; + try { + signVerified = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, "UTF-8", "RSA2"); + } catch (AlipayApiException e) { + e.printStackTrace(); + } + + if (signVerified) { + // 验证成功,处理业务逻辑 + String tradeStatus = params.get("trade_status"); + if ("TRADE_SUCCESS".equals(tradeStatus)) { + // 订单支付成功,更新你的系统状态 + // TODO: 更新系统订单状态 + } + } else { + // 验证失败 + // TODO: 记录日志,可能的安全问题 + } + } } \ No newline at end of file diff --git a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserDynamicMapper.xml b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserDynamicMapper.xml index a4f6f21..22ebf97 100644 --- a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserDynamicMapper.xml +++ b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserDynamicMapper.xml @@ -50,16 +50,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" u.start_time as "startTime", u.end_time as "endTime", u.is_member as "isMember", - a.create_time as "createTime" + a.create_time as "createTime", + t.name as "cityName" from app_user_dynamic a left join app_user u on u.id = a.user_id + left join app_town t on t.id = a.address and user_id = #{userId} and username like concat('%',#{username},'%') and content = #{content} and video_url = #{videoUrl} and topic_id like concat('%',#{topicId},'%') - and address like concat('%',#{address},'%') + and address = #{address} and privacy_status = #{privacyStatus} and updateBy = #{updateBy} and is_top = #{isTop}