diff --git a/cloud-pay-common/src/main/java/com/muyu/pay/domain/AliPay.java b/cloud-pay-common/src/main/java/com/muyu/pay/domain/AliPay.java deleted file mode 100644 index 907ef83..0000000 --- a/cloud-pay-common/src/main/java/com/muyu/pay/domain/AliPay.java +++ /dev/null @@ -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; -} diff --git a/cloud-pay-common/src/main/java/com/muyu/pay/domain/AliPayConfig.java b/cloud-pay-common/src/main/java/com/muyu/pay/domain/AliPayConfig.java deleted file mode 100644 index bde515f..0000000 --- a/cloud-pay-common/src/main/java/com/muyu/pay/domain/AliPayConfig.java +++ /dev/null @@ -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初始化成功======="); - } -} diff --git a/cloud-pay-common/src/main/java/com/muyu/pay/domain/PaymentParam.java b/cloud-pay-common/src/main/java/com/muyu/pay/domain/PaymentParam.java new file mode 100644 index 0000000..5787085 --- /dev/null +++ b/cloud-pay-common/src/main/java/com/muyu/pay/domain/PaymentParam.java @@ -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; + + + +} diff --git a/cloud-pay-server/src/main/java/com/muyu/pay/controller/AliPayController.java b/cloud-pay-server/src/main/java/com/muyu/pay/controller/AliPayController.java deleted file mode 100644 index 91fb98d..0000000 --- a/cloud-pay-server/src/main/java/com/muyu/pay/controller/AliPayController.java +++ /dev/null @@ -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 params = new HashMap<>(); - Map 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"; - } - -} diff --git a/cloud-pay-server/src/main/java/com/muyu/pay/controller/PaymentController.java b/cloud-pay-server/src/main/java/com/muyu/pay/controller/PaymentController.java new file mode 100644 index 0000000..4139860 --- /dev/null +++ b/cloud-pay-server/src/main/java/com/muyu/pay/controller/PaymentController.java @@ -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 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()); + } + + + +} diff --git a/cloud-pay-server/src/main/resources/bootstrap.yml b/cloud-pay-server/src/main/resources/bootstrap.yml index 8371622..c82e24c 100644 --- a/cloud-pay-server/src/main/resources/bootstrap.yml +++ b/cloud-pay-server/src/main/resources/bootstrap.yml @@ -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 +