提交支付宝功能
parent
538fdd8da9
commit
3593158c0a
|
@ -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>
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue