提交支付宝功能

master
sikadi 2023-11-30 14:47:01 +08:00
parent 538fdd8da9
commit 3593158c0a
5 changed files with 190 additions and 6 deletions

View File

@ -65,6 +65,13 @@
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.9.28.ALL</version>
</dependency>
<dependency>
<groupId>com.fate</groupId>

View File

@ -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();
}
}
}
}
}

View File

@ -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;
/**
* <p>
@ -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 = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n" +
"<html>\n" +
"<head>\n" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n" +
"<title>付款</title>\n" +
"</head>";
String result = alipayClient.pageExecute(alipayTradePagePayRequest).getBody();
String bottom = "<body>\n" +
"</body>\n" +
"</html>";
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<String, String> params = new HashMap<>();
Map<String, String[]> parameterMap = request.getParameterMap();
for (Iterator<String> 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");
}
}
}

View File

@ -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;

View File

@ -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<FirmMapper, Firm> implements FirmService {
@Autowired