初始化

master
法外狂徒张三 2024-08-30 21:29:16 +08:00
parent c4094b17f0
commit d3990621e7
6 changed files with 114 additions and 176 deletions

View File

@ -1,23 +0,0 @@
package com.muyu.pay.domain;
import lombok.Data;
/**
* @Author
* @Date Created in 2024/1/13 15:26
* @DESCRIPTION: alipay
* @Version V1.0
*/
@Data
public class AliPay {
//路径
private String returnUrl;
//订单编号
private String traceNo;
//商品金额
private double totalAmount;
//商品名称
private String subject;
//订单追踪号,商户自己生成,可已不使用
private String alipayTraceNo;
}

View File

@ -1,46 +0,0 @@
package com.muyu.pay.domain;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* @Author
* @Date Created in 2023/1/13 15:06
* @DESCRIPTION:
* @Version V1.0
*/
@Data
@Component
//读取yml文件中alipay 开头的配置
@ConfigurationProperties(prefix = "alipay")
public class AliPayConfig {
private String appId;
private String appPrivateKey;
private String alipayPublicKey;
//异步通知回调地址(可选)
private String notifyUrl;
//支付成功后的回调地址
private String returnUrl;
@PostConstruct
public void init() {
// 设置参数(全局只需设置一次)
Config config = new Config();
config.protocol = "https";
config.gatewayHost = "openapi.alipaydev.com";
config.signType = "RSA2";
config.appId = this.appId;
config.merchantPrivateKey = this.appPrivateKey;
config.alipayPublicKey = this.alipayPublicKey;
config.notifyUrl = this.notifyUrl;
Factory.setOptions(config);
System.out.println("=======支付宝SDK初始化成功=======");
}
}

View File

@ -0,0 +1,37 @@
package com.muyu.pay.domain;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class PaymentParam {
/**
*
*/
private String returnUrl;
/**
*
*/
private String outTradeNo;
/**
*
*/
private BigDecimal totalAmount;
/**
*
*/
private String subject;
/**
* QUICK_WAP_WAY FAST_INSTANT_TRADE_PAY
*/
private String productCode;
}

View File

@ -1,101 +0,0 @@
package com.muyu.pay.controller;
import com.alipay.easysdk.factory.Factory;
import com.muyu.common.core.domain.Result;
import com.muyu.pay.domain.AliPay;
import com.muyu.pay.domain.AliPayConfig;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
* @Author
* @Date Created in 2023/5/5 15:23
* @DESCRIPTION:
* @Version V1.0
*/
@RestController
@RequestMapping("alipay")
@Transactional(rollbackFor = Exception.class)
public class AliPayController {
@Resource
AliPayConfig aliPayConfig;
private static final String GATEWAY_URL ="https://openapi-sandbox.dl.alipaydev.com/gateway.do";
private static final String FORMAT ="JSON";
private static final String CHARSET ="utf-8";
private static final String SIGN_TYPE ="RSA2";
@GetMapping("/pay")
@ResponseBody
public Result pay(@Validated AliPay aliPay, HttpServletResponse httpResponse) throws Exception {
AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, aliPayConfig.getAppId(),
aliPayConfig.getAppPrivateKey(), FORMAT, CHARSET, aliPayConfig.getAlipayPublicKey(), SIGN_TYPE);
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
request.setNotifyUrl(aliPayConfig.getNotifyUrl());
request.setReturnUrl(aliPay.getReturnUrl());
request.setBizContent("{\"out_trade_no\":\"" + aliPay.getTraceNo() + "\","
+ "\"total_amount\":\"" + aliPay.getTotalAmount() + "\","
+ "\"subject\":\"" + aliPay.getSubject() + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
String form = "";
try {
// 调用SDK生成表单
form = alipayClient.pageExecute(request).getBody();
} catch (AlipayApiException e) {
e.printStackTrace();
}
httpResponse.setContentType("text/html;charset=" + CHARSET);
// 直接将完整的表单html输出到页面
httpResponse.getWriter().write(form);
httpResponse.getWriter().flush();
httpResponse.getWriter().close();
return Result.success();
}
@PostMapping("/notify") // 注意这里必须是POST接口
public String payNotify(HttpServletRequest request) throws Exception {
if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
System.out.println("=========支付宝异步回调========");
Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
for (String name : requestParams.keySet()) {
params.put(name, request.getParameter(name));
}
String tradeNo = params.get("out_trade_no");
String gmtPayment = params.get("gmt_payment");
String alipayTradeNo = params.get("trade_no");
// 支付宝验签
if (Factory.Payment.Common().verifyNotify(params)) {
// 验签通过
System.out.println("交易名称: " + params.get("subject"));
System.out.println("交易状态: " + params.get("trade_status"));
System.out.println("支付宝交易凭证号: " + params.get("trade_no"));
System.out.println("商户订单号: " + params.get("out_trade_no"));
System.out.println("交易金额: " + params.get("total_amount"));
System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
System.out.println("买家付款时间: " + params.get("gmt_payment"));
System.out.println("买家付款金额: " + params.get("buyer_pay_amount"));
// 更新订单已支付的逻辑代码
}
}
return "success";
}
}

View File

@ -0,0 +1,76 @@
package com.muyu.pay.controller;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;
import com.muyu.common.core.domain.Result;
import com.muyu.pay.domain.PaymentParam;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
/**
*
*/
@Controller
@RequestMapping("/aliyun/pay")
public class PaymentController {
//appid
private final String APP_ID = "APPID";
//应用私钥
private final String APP_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxgs8NKTdf640VOuZPwu+LglJseKfezWVIeJtSryyQrkEfSMAViT/g/tcp07VmwxGXi7P1Xj/rFuPVGg0C/ibUIwIOrXK9ob2RN58dWGTd31oholiQ0hjLv8qqD0hyjidXiknAMuT5vQbEDjftq6GQz+jgka7G9KNzdbGwJhRgJP/7fIUvSGQ4HtEsk4YdyScKbV4YCMyqFNDxbXMt4UFlkziR77Bk9ZvgsS7vjFKoMfFhOI1R+stOX74g5GHX0HkJcKwAow0MQ3B4biAVU4j+kwBibrqHqu7C9Z9hIKX+oIrdFfwAKmW6EHrZcYXZGtiCpj213lQ5i/G1mksZgUkxAgMBAAECggEAfe6NMYsSC+yyNGOKzP9ArjqQev/GKFyTBCz8FFbOSP42mRklnKG4PcjNoJDfWr39FwQ3cVWiBwhALgjDPmJL7afAZ+VJR5sdP460RT9Wn8k6yi3Ao01J5hJ0lt0syohrBMHIvJ/ergYabLChoO1oO7IkRl1UHzWjV+AhZRQ+1E19DWbJOAfAaIOfy91ykCYr5uTs/GXtkbE3w6jPL4ehOPEPKmGqhR3n6rNEtgdtB0WjDfr8iWQGTIArUiMNf+rrJWoAcOKSC/rtUUGyVUwqEObrnvZ8tx69iv1wEpPUg1wpiE+z8Hr+LAE/WSpAu/A4KrvtjOvJGSQYoC9wxJ8YAQKBgQDVeaFbY5LpX6gWIKaxKasHw2FUkNea4jBJ+gmyxlBWer0Vu2BNrT2DWECgEAbthv7BGcq2HYrFHe2uYMGNClHjJPxxirTH4BOpS8W+zdTM5rCdMj8xa9WqGMlFJUo6KvbJy0ji6hG9s25J82TyQm64WCf7BFyhvvAZPOZc7WWqcQKBgQDU3ybyFKXwdEC5qW+4XkKM18DhOi3TLWYIirJDg30MK8M/5v8nepaUgTK6XTPHKs9W48pqybRbPo+CUcrCBYh6x1IMIKhtBcr3J0oKfKMW5NDBC64DHWC2M6TR3rJ4sYhcQB9hK8Yuvkw7yZLnUCUo7Sp3op8wC7AFa/B7JllqwQKBgGnN6P2EsrHcaVDeSgAQ6OXmHn1tdI8dgFWKCfiDdhoGp2T4A9k7/fr1aMJsbyKW//jxMZlltvvPw5fj+MpQzRlJoZ0c5FEUbGpCVfYlykzsIakn2E5EZhfyRP9yZgHCfaKykKN24+gj4IviiKvR5VKUzuwI02iPXC0GFB8GwpbhAoGBAJ2sWK2Q68SqZ1LeFNlsQEEQglaRgGXeR6hmC1qEp3f/ZlUL5cy5OZXwCMIPzQ1mQUOr4D+u/b9kHGo76UJDVO8UekpvWjG+y7K70FTqMub/PzzuSMsX1I3AvQGSwYEyhr1F5bhU8yumWtMiIITjUVL6MK2CsASnc47gf7TIGA1BAoGAMWBnxnmobmWFvzfDGbFpaqSsOr4pHfPscJXP70ZBfcAlrv94KGn8dWQoqyPD0RDul4Lz1wn/w+7mbciKkTSzBXBkLf6n0wETtHwCgg6Fssa9SZj08tlFbxev6f3/bZX0FGqMgJzxC74K6ltEWGVIqmXaQxk6HbCMJ2qZZsjPgH0=\n";
private final String CHARSET = "UTF-8";
// 支付宝公钥
private final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsYLPDSk3X+uNFTrmT8Lvi4JSbHin3s1lSHibUq8skK5BH0jAFYk/4P7XKdO1ZsMRl4uz9V4/6xbj1RoNAv4m1CMCDq1yvaG9kTefHVhk3d9aIaJYkNIYy7/Kqg9Ico4nV4pJwDLk+b0GxA437auhkM/o4JGuxvSjc3WxsCYUYCT/+3yFL0hkOB7RLJOGHcknCm1eGAjMqhTQ8W1zLeFBZZM4ke+wZPWb4LEu74xSqDHxYTiNUfrLTl++IORh19B5CXCsAKMNDENweG4gFVOI/pMAYm66h6ruwvWfYSCl/qCK3RX8ACpluhB62XGF2RrYgqY9td5UOYvxtZpLGYFJMQIDAQAB\n";
//这是沙箱接口路径
private final String GATEWAY_URL ="https://openapi-sandbox.dl.alipaydev.com/gateway.do";
private final String FORMAT = "JSON";
//签名方式
private final String SIGN_TYPE = "RSA2";
//支付宝异步通知路径,付款完毕后会异步调用本项目的方法,必须为公网地址
private final String NOTIFY_URL = "http://47.116.173.119/aliyun/pay/yibu";
//支付宝同步通知路径,也就是当付款完毕后跳转本项目的页面,可以不是公网地址
private final String RETURN_URL = "http://47.116.173.119/entertainment/payment";
@RequestMapping(value = "/payZFB", method = RequestMethod.POST)
@ResponseBody
public Result<String> payZFB(@RequestBody PaymentParam paymentParam) throws AlipayApiException {
AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
//异步接收地址仅支持http/https公网可访问
request.setNotifyUrl("");
//同步跳转地址仅支持http/https
request.setReturnUrl(paymentParam.getReturnUrl());
JSONObject json = new JSONObject();
json.put("outTradeNo", paymentParam.getOutTradeNo());
String params = json.toString();
/******必传参数******/
JSONObject bizContent = new JSONObject();
//商户订单号,商家自定义,保持唯一性
bizContent.put("out_trade_no", paymentParam.getOutTradeNo());
//支付金额最小值0.01元
bizContent.put("total_amount", paymentParam.getTotalAmount());
//订单标题,不可使用特殊符号
bizContent.put("subject", paymentParam.getSubject());
//电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY
bizContent.put("product_code", paymentParam.getProductCode());
//支付宝请求的传值 可以在req中获取
bizContent.put("body", params);
/******可选参数******/
request.setBizContent(bizContent.toString());
AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
return Result.success(response.getBody());
}
}

View File

@ -54,11 +54,6 @@ logging:
level:
com.muyu.system.mapper: DEBUG
alipay:
appId: 9021000140627330
appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxgs8NKTdf640VOuZPwu+LglJseKfezWVIeJtSryyQrkEfSMAViT/g/tcp07VmwxGXi7P1Xj/rFuPVGg0C/ibUIwIOrXK9ob2RN58dWGTd31oholiQ0hjLv8qqD0hyjidXiknAMuT5vQbEDjftq6GQz+jgka7G9KNzdbGwJhRgJP/7fIUvSGQ4HtEsk4YdyScKbV4YCMyqFNDxbXMt4UFlkziR77Bk9ZvgsS7vjFKoMfFhOI1R+stOX74g5GHX0HkJcKwAow0MQ3B4biAVU4j+kwBibrqHqu7C9Z9hIKX+oIrdFfwAKmW6EHrZcYXZGtiCpj213lQ5i/G1mksZgUkxAgMBAAECggEAfe6NMYsSC+yyNGOKzP9ArjqQev/GKFyTBCz8FFbOSP42mRklnKG4PcjNoJDfWr39FwQ3cVWiBwhALgjDPmJL7afAZ+VJR5sdP460RT9Wn8k6yi3Ao01J5hJ0lt0syohrBMHIvJ/ergYabLChoO1oO7IkRl1UHzWjV+AhZRQ+1E19DWbJOAfAaIOfy91ykCYr5uTs/GXtkbE3w6jPL4ehOPEPKmGqhR3n6rNEtgdtB0WjDfr8iWQGTIArUiMNf+rrJWoAcOKSC/rtUUGyVUwqEObrnvZ8tx69iv1wEpPUg1wpiE+z8Hr+LAE/WSpAu/A4KrvtjOvJGSQYoC9wxJ8YAQKBgQDVeaFbY5LpX6gWIKaxKasHw2FUkNea4jBJ+gmyxlBWer0Vu2BNrT2DWECgEAbthv7BGcq2HYrFHe2uYMGNClHjJPxxirTH4BOpS8W+zdTM5rCdMj8xa9WqGMlFJUo6KvbJy0ji6hG9s25J82TyQm64WCf7BFyhvvAZPOZc7WWqcQKBgQDU3ybyFKXwdEC5qW+4XkKM18DhOi3TLWYIirJDg30MK8M/5v8nepaUgTK6XTPHKs9W48pqybRbPo+CUcrCBYh6x1IMIKhtBcr3J0oKfKMW5NDBC64DHWC2M6TR3rJ4sYhcQB9hK8Yuvkw7yZLnUCUo7Sp3op8wC7AFa/B7JllqwQKBgGnN6P2EsrHcaVDeSgAQ6OXmHn1tdI8dgFWKCfiDdhoGp2T4A9k7/fr1aMJsbyKW//jxMZlltvvPw5fj+MpQzRlJoZ0c5FEUbGpCVfYlykzsIakn2E5EZhfyRP9yZgHCfaKykKN24+gj4IviiKvR5VKUzuwI02iPXC0GFB8GwpbhAoGBAJ2sWK2Q68SqZ1LeFNlsQEEQglaRgGXeR6hmC1qEp3f/ZlUL5cy5OZXwCMIPzQ1mQUOr4D+u/b9kHGo76UJDVO8UekpvWjG+y7K70FTqMub/PzzuSMsX1I3AvQGSwYEyhr1F5bhU8yumWtMiIITjUVL6MK2CsASnc47gf7TIGA1BAoGAMWBnxnmobmWFvzfDGbFpaqSsOr4pHfPscJXP70ZBfcAlrv94KGn8dWQoqyPD0RDul4Lz1wn/w+7mbciKkTSzBXBkLf6n0wETtHwCgg6Fssa9SZj08tlFbxev6f3/bZX0FGqMgJzxC74K6ltEWGVIqmXaQxk6HbCMJ2qZZsjPgH0=
alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsYLPDSk3X+uNFTrmT8Lvi4JSbHin3s1lSHibUq8skK5BH0jAFYk/4P7XKdO1ZsMRl4uz9V4/6xbj1RoNAv4m1CMCDq1yvaG9kTefHVhk3d9aIaJYkNIYy7/Kqg9Ico4nV4pJwDLk+b0GxA437auhkM/o4JGuxvSjc3WxsCYUYCT/+3yFL0hkOB7RLJOGHcknCm1eGAjMqhTQ8W1zLeFBZZM4ke+wZPWb4LEu74xSqDHxYTiNUfrLTl++IORh19B5CXCsAKMNDENweG4gFVOI/pMAYm66h6ruwvWfYSCl/qCK3RX8ACpluhB62XGF2RrYgqY9td5UOYvxtZpLGYFJMQIDAQAB
notifyUrl: http://47.116.173.119:80/alipay/notify
returnUrl: http://47.116.173.119:80/market/apitype