From 3593158c0ac17ae2be1a8a5a2eafb4d7c9707092 Mon Sep 17 00:00:00 2001 From: sikadi <13315935+sikadi_love@user.noreply.gitee.com> Date: Thu, 30 Nov 2023 14:47:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=94=AF=E4=BB=98=E5=AE=9D?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fate-firm-server/pom.xml | 7 + .../com/fate/firm/config/AlipayConfig.java | 61 +++++++++ .../fate/firm/controller/FirmController.java | 120 +++++++++++++++++- .../firm/controller/FirmTypeController.java | 3 + .../firm/service/impl/FirmServiceImpl.java | 5 +- 5 files changed, 190 insertions(+), 6 deletions(-) create mode 100644 fate-firm-server/src/main/java/com/fate/firm/config/AlipayConfig.java diff --git a/fate-firm-server/pom.xml b/fate-firm-server/pom.xml index 6d8b135..a612767 100644 --- a/fate-firm-server/pom.xml +++ b/fate-firm-server/pom.xml @@ -65,6 +65,13 @@ 3.6.3 + + com.alipay.sdk + alipay-sdk-java + 4.9.28.ALL + + + com.fate diff --git a/fate-firm-server/src/main/java/com/fate/firm/config/AlipayConfig.java b/fate-firm-server/src/main/java/com/fate/firm/config/AlipayConfig.java new file mode 100644 index 0000000..86f0432 --- /dev/null +++ b/fate-firm-server/src/main/java/com/fate/firm/config/AlipayConfig.java @@ -0,0 +1,61 @@ +package com.fate.firm.config; + +import javax.swing.*; +import java.io.FileWriter; + +/** + * 基础配置 + * + * @description: TODO + * @author: ZHUOXIN + * @date: 2023/11/29 21:18 + **/ +public class AlipayConfig { + // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 + public static String APP_ID = "201609283823923"; + + // 商户私钥,您的PKCS8格式RSA2私钥 + public static String MERCHANT_PRIVATE_KEY = "dasidiwedfehfue"; + + //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。 + public static String ALIPAY_PUBLIC_KEY = "dhhduwd8wdushhshdsh"; + + // 服务器异步通知页面路径 + public static String NOTIFY_URL = "http://127.0.0.1:8080/alipay.trade.page.pay"; + + // 页面跳转同步通知页面路径 + public static String RETURN_URL = "http://127.0.0.1:8080/alipay.trade.page.pay"; + + // 签名方式 + public static String SIGN_TYPE = "RSA2"; + + // 字符编码格式 + public static String CHARSET = "utf-8"; + + // 支付宝网关地址 + public static String GATEWAY_URL = "https://openapi.alipaydev.com/gateway.do"; + + + // 日志目录 + public static String LOG_PATH= "./"; + + public static void logResult(String sWord){ + FileWriter writer = null; + try{ + writer = new FileWriter(LOG_PATH + "alipay_log_" + System.currentTimeMillis() + ".txt"); + }catch (Exception e){ + e.printStackTrace(); + }finally { + if(writer!= null){ + try { + writer.close(); + } catch (Exception e2) { + e2.printStackTrace(); + } + } + } + } + + + +} diff --git a/fate-firm-server/src/main/java/com/fate/firm/controller/FirmController.java b/fate-firm-server/src/main/java/com/fate/firm/controller/FirmController.java index 0c5c4ff..0dcb175 100644 --- a/fate-firm-server/src/main/java/com/fate/firm/controller/FirmController.java +++ b/fate-firm-server/src/main/java/com/fate/firm/controller/FirmController.java @@ -1,11 +1,14 @@ package com.fate.firm.controller; -import com.alibaba.fastjson.JSON; +import com.alipay.api.AlipayApiException; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.domain.AlipayTradeAdvanceConsultModel; +import com.alipay.api.internal.util.AlipaySignature; +import com.alipay.api.request.AlipayTradePagePayRequest; import com.fate.common.datasource.annotation.Master; import com.fate.common.core.domain.Result; import com.fate.common.core.web.controller.BaseController; -import com.fate.common.security.utils.SecurityUtils; -import com.fate.common.system.domain.LoginUser; +import com.fate.firm.config.AlipayConfig; import com.fate.firm.domain.Firm; import com.fate.firm.domain.request.FirmRequest; import com.fate.firm.service.FirmService; @@ -15,7 +18,12 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; /** *

@@ -26,9 +34,10 @@ import java.util.List; * @since 2023-11-18 06:27:02 */ @RestController - @RequestMapping("/firm") +@RequestMapping("/firm") @Log4j2 -@Master +@Master // = fate-fate +// fate-fate -> t_firm public class FirmController extends BaseController { @Autowired private FirmService firmService; @@ -136,5 +145,106 @@ public class FirmController extends BaseController { return result; } + @RequestMapping("/index") + public String firmIndex(){ + return "index"; + } + + + @RequestMapping("/showFirm") + public void showFirm(HttpServletRequest request , HttpServletResponse httpServletResponse) throws Exception { + // 获取初始化的AlipayClient + DefaultAlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.GATEWAY_URL, AlipayConfig.APP_ID, AlipayConfig.MERCHANT_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGN_TYPE); + + // 设置请求参数 + AlipayTradePagePayRequest alipayTradePagePayRequest = new AlipayTradePagePayRequest(); + alipayTradePagePayRequest.setReturnUrl(AlipayConfig.RETURN_URL); + alipayTradePagePayRequest.setNotifyUrl(AlipayConfig.NOTIFY_URL); + + //商家订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复 + String wiDoutTradeNo = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"), "UTF-8"); + // 付款金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] + String totalAmount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"), "UTF-8"); + // 订单名称,粗略描述用户的支付目的。如“xxx品牌xxx门店当面付扫码消费” + String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"), "UTF-8"); + // 商品描述,可以为空 + String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"), "UTF-8"); + + alipayTradePagePayRequest.setBizContent("{\"out_trade_no\":\"" + wiDoutTradeNo + "\"," + + "\"total_amount\":\"" + totalAmount + "\"," + + "\"subject\":\"" + subject + "\"," + + "\"body\":\"" + body + "\"," + + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); + + // 请求支付宝进行支付 + + // 构建支付宝官服支付页面 + String top = "\n" + + "\n" + + "\n" + + "\n" + + "付款\n" + + ""; + + String result = alipayClient.pageExecute(alipayTradePagePayRequest).getBody(); + + String bottom = "\n" + + "\n" + + ""; + + httpServletResponse.getWriter().println(top + result + bottom); + + } + + + @RequestMapping("/notify") + public void notify(HttpServletRequest request, HttpServletResponse response) throws Exception { + log.info("支付宝异步通知"); + PrintWriter out = response.getWriter(); + // 获取支付宝POST过来反馈信息 + HashMap params = new HashMap<>(); + Map parameterMap = request.getParameterMap(); + + for (Iterator iter = parameterMap.keySet().iterator(); iter.hasNext();){ + String name = (String) iter.next(); + String[] values = (String[]) parameterMap.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); + } + + boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.SIGN_TYPE); AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.SIGN_TYPE); + + if (signVerified) { + log.info("支付宝签名验证通过"); + //商品订单号 + String outTradeNo = new String(params.get("out_trade_no").getBytes("ISO-8859-1"), "UTF-8"); + + //支付宝交易号 + String tradeNo = new String(params.get("trade_no").getBytes("ISO-8859-1"), "UTF-8"); + + + // 交易状态 + String tradeStatus = new String(params.get("trade_status").getBytes("ISO-8859-1"), "UTF-8"); + + if(tradeStatus.equals("TRADE_FINISHED")){ + log.info("订单已完成"); + }else if(tradeStatus.equals("TRADE_SUCCESS")){ + log.info("支付宝交易成功"); + } + + out.println("success"); + }else { + out.println("fail"); + } + + } + } diff --git a/fate-firm-server/src/main/java/com/fate/firm/controller/FirmTypeController.java b/fate-firm-server/src/main/java/com/fate/firm/controller/FirmTypeController.java index e8f9d2a..a41448e 100644 --- a/fate-firm-server/src/main/java/com/fate/firm/controller/FirmTypeController.java +++ b/fate-firm-server/src/main/java/com/fate/firm/controller/FirmTypeController.java @@ -1,8 +1,11 @@ package com.fate.firm.controller; import com.alibaba.fastjson.JSON; +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.dynamic.datasource.annotation.Master; import com.fate.common.core.domain.Result; import com.fate.common.core.web.controller.BaseController; +import com.fate.common.datasource.annotation.Slave; import com.fate.firm.domain.FirmType; import com.fate.firm.service.FirmTypeService; import lombok.extern.log4j.Log4j2; diff --git a/fate-firm-server/src/main/java/com/fate/firm/service/impl/FirmServiceImpl.java b/fate-firm-server/src/main/java/com/fate/firm/service/impl/FirmServiceImpl.java index 8aaf8f8..522bc02 100644 --- a/fate-firm-server/src/main/java/com/fate/firm/service/impl/FirmServiceImpl.java +++ b/fate-firm-server/src/main/java/com/fate/firm/service/impl/FirmServiceImpl.java @@ -6,12 +6,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fate.common.core.domain.Result; import com.fate.common.core.utils.StringUtils; import com.fate.common.datasource.annotation.Master; +import com.fate.common.datasource.annotation.Slave; import com.fate.common.security.utils.SecurityUtils; import com.fate.common.system.domain.LoginUser; import com.fate.common.system.domain.SysRole; import com.fate.firm.domain.Firm; import com.fate.firm.mapper.FirmMapper; import com.fate.firm.service.FirmService; +import com.fate.firm.service.FirmTypeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping; @@ -28,7 +30,8 @@ import java.util.List; * @since 2023-11-18 06:27:02 */ @Service -@Master +@Master// = fate-fate +// fate-fate -> t_firm public class FirmServiceImpl extends ServiceImpl implements FirmService { @Autowired