diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/config/AliPayConfig.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/config/AliPayConfig.java index 37bec50..d39ff8f 100644 --- a/cloud-market-server/src/main/java/com/muyu/cloud/market/config/AliPayConfig.java +++ b/cloud-market-server/src/main/java/com/muyu/cloud/market/config/AliPayConfig.java @@ -1,64 +1,35 @@ package com.muyu.cloud.market.config; - +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; + +@Data @Component @ConfigurationProperties(prefix = "alipay") public class AliPayConfig { - - /** - * 支付宝的APPID - */ private String appId; - /** - * 应用私钥 - */ private String appPrivateKey; - /** - * 支付宝公钥 - */ private String alipayPublicKey; - /** - * 支付宝通知本地的接口完整地址 - */ private String notifyUrl; - public String getAppId() { - return appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getAppPrivateKey() { - return appPrivateKey; - } - - public void setAppPrivateKey(String appPrivateKey) { - this.appPrivateKey = appPrivateKey; - } - - public String getAlipayPublicKey() { - return alipayPublicKey; - } - - public void setAlipayPublicKey(String alipayPublicKey) { - this.alipayPublicKey = alipayPublicKey; - } - - public String getNotifyUrl() { - return notifyUrl; - } - - public void setNotifyUrl(String notifyUrl) { - this.notifyUrl = notifyUrl; - + @PostConstruct + public void init() { + // 设置参数(全局只需设置一次) + Config config = new Config(); + config.protocol = "https"; + config.gatewayHost = "openapi-sandbox.dl.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-market-server/src/main/java/com/muyu/cloud/market/controller/AliPayController.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/AliPayController.java index 5add76f..14fa37b 100644 --- a/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/AliPayController.java +++ b/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/AliPayController.java @@ -1,20 +1,9 @@ package com.muyu.cloud.market.controller; - -import cn.hutool.json.JSONObject; -import com.alipay.api.AlipayApiException; -import com.alipay.api.AlipayClient; -import com.alipay.api.DefaultAlipayClient; -import com.alipay.api.internal.util.AlipaySignature; -import com.alipay.api.request.AlipayTradePagePayRequest; -import com.muyu.cloud.market.config.AliPayConfig; -import com.muyu.cloud.market.domin.Orders; -import com.muyu.cloud.market.domin.PayInfo; -import com.muyu.cloud.market.service.OrderShowService; -import com.muyu.cloud.market.service.PayInfoService; -import io.swagger.v3.oas.annotations.tags.Tag; +import com.alipay.easysdk.factory.Factory; +import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse; +import com.muyu.cloud.market.domin.AliPay; +import com.muyu.cloud.market.mapper.OrderShowMapper; import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.extern.log4j.Log4j2; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -24,69 +13,31 @@ import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; - @RestController @RequestMapping("/alipay") -@Log4j2 -@Tag(name = "支付接口控制层", description = "进行订单支付管理") public class AliPayController { - // 支付宝沙箱网关地址 - 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"; @Resource - private AliPayConfig aliPayConfig; + private OrderShowMapper ordersMapper; - @Resource - private PayInfoService payInfoService; - @Resource - private OrderShowService orderShowService; - @GetMapping("/pay") - public void pay(String ordersNum, HttpServletResponse httpResponse) throws Exception { - //查询订单信息 - Orders orders = payInfoService.selectByordersNum (ordersNum); - if (orders == null) { - return; - } - // 1.创建Client,通⽤SDK提供的Client,负责调⽤⽀付宝的API - AlipayClient alipayClient = new DefaultAlipayClient( - GATEWAY_URL, - aliPayConfig.getAppId(), - aliPayConfig.getAppPrivateKey(), - FORMAT, CHARSET, - aliPayConfig.getAlipayPublicKey(), - SIGN_TYPE); - - // 2. 创建 Request并设置Request参数 - AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); // 发送请求的 Request类 - request.setNotifyUrl(aliPayConfig.getNotifyUrl()); - cn.hutool.json.JSONObject bizContent = new JSONObject(); - bizContent.set("orders_num", orders.getOrdersNum()); // 我们自己生成的订单编号,必须唯一不允许重复 - bizContent.set("orders_price", orders.getOrdersPrice()); // 订单的总金额 - bizContent.set("product_name", orders.getProductName()); // 支付的名称 - bizContent.set("product_code", "FAST_INSTANT_TRADE_PAY"); // 固定配置 - request.setBizContent(bizContent.toString()); - request.setReturnUrl("http://localhost:8080/orders"); // 支付完成后自动跳转到本地页面的路径 - - //执⾏请求,拿到响应的结果,返回给浏览器 - String form = ""; + @GetMapping("/pay") // &subject=xxx&traceNo=xxx&totalAmount=xxx + public String pay(AliPay aliPay) { + AlipayTradePagePayResponse response; try { - form = alipayClient.pageExecute(request).getBody();//调⽤SDK⽣成表单 - } catch (AlipayApiException e) { - e.printStackTrace(); + // 发起API调用(以创建当面付收款二维码为例) + response = Factory.Payment.Page() + .pay(aliPay.getSubject(), aliPay.getTraceNo(), aliPay.getTotalAmount(), ""); + } catch (Exception e) { + System.err.println("调用遭遇异常,原因:" + e.getMessage()); + throw new RuntimeException(e.getMessage(), e); } - httpResponse.setContentType("text/html;charset=" + CHARSET); - httpResponse.getWriter().write(form);//直接将完整的表单html 输出到⻚⾯ - httpResponse.getWriter().flush(); - httpResponse.getWriter().close(); + return response.getBody(); } + @PostMapping("/notify") // 注意这里必须是POST接口 - public void payNotify(HttpServletRequest request) throws Exception { + public String payNotify(HttpServletRequest request) throws Exception { if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) { System.out.println("=========支付宝异步回调========"); @@ -94,35 +45,27 @@ public class AliPayController { Map requestParams = request.getParameterMap(); for (String name : requestParams.keySet()) { params.put(name, request.getParameter(name)); + // System.out.println(name + " = " + request.getParameter(name)); } - String sign = params.get("sign"); - String content = AlipaySignature.getSignCheckContentV1(params); - boolean checkSignature = AlipaySignature.rsa256CheckContent(content, sign, aliPayConfig.getAlipayPublicKey(), "UTF-8"); // 验证签名 + String tradeNo = params.get("out_trade_no"); + String gmtPayment = params.get("gmt_payment"); + String alipayTradeNo = params.get("trade_no"); // 支付宝验签 - if (checkSignature) { + if (Factory.Payment.Common().verifyNotify(params)) { // 验签通过 System.out.println("交易名称: " + params.get("subject")); - System.out.println("交易状态: " + params.get("pay_info_state")); + 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")); - - String tradeNo = params.get("out_trade_no"); // 订单编号 - String gmtPayment = params.get("gmt_payment"); // 支付时间 - String alipayTradeNo = params.get("trade_no"); // 支付宝交易编号 - - // 更新订单状态为已支付,设置支付信息 -// Orders orders = orderShowService.selectByOrderNo(tradeNo); -// orders.setOrdersState(Integer.valueOf("已支付")); -// orders.setCreateTime(gmtPayment); -// orders.setOrdersNum(alipayTradeNo); -// orderShowService.updateOrders(orders); - + // 更新订单未已支付 + ordersMapper.updateState(tradeNo, "已支付", gmtPayment, alipayTradeNo); } } + return "success"; } - } +} diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/WebController.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/WebController.java new file mode 100644 index 0000000..31d3bc4 --- /dev/null +++ b/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/WebController.java @@ -0,0 +1,14 @@ +package com.muyu.cloud.market.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class WebController { + + @GetMapping("/") + public String hello() { + return "success"; + } + +} diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/mapper/OrderShowMapper.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/mapper/OrderShowMapper.java index 522cb53..02e8dab 100644 --- a/cloud-market-server/src/main/java/com/muyu/cloud/market/mapper/OrderShowMapper.java +++ b/cloud-market-server/src/main/java/com/muyu/cloud/market/mapper/OrderShowMapper.java @@ -74,6 +74,8 @@ public interface OrderShowMapper { @Select("select * from orders where orders_num = #{ordersNum}") Orders selectByordersNum(String ordersNum); + void updateState(String tradeNo, String 已支付, String gmtPayment, String alipayTradeNo); + /** * 订单修改支付状态后,更改该商品的销量 */ diff --git a/cloud-market-server/src/main/resources/bootstrap.yml b/cloud-market-server/src/main/resources/bootstrap.yml index fa2424d..815ec85 100644 --- a/cloud-market-server/src/main/resources/bootstrap.yml +++ b/cloud-market-server/src/main/resources/bootstrap.yml @@ -52,8 +52,10 @@ spring: # rabbit 配置文件 - application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} - alipay: - appId: 9021000140633904 - appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCavSHP47iS43En9+MaR8ussAQmI9AbqhZYfb1yROE1ztMUmV9QJqmNiTdA2Tihn+srBG9AzVeJ/0XCqRlH8mFz5FXdsCG1M2EIPgiBYX58EJ565vAgHKRA/d/kKCA5MVkWYu6YiU/V2Pqw/X8K8/FNxXYvaHpjZwpjDqJCzvy4iK4DtM4QQoZRsVr0cOycYJSiC5A6+1wCpP4ZFNL9JdaQLCkLavAeRiRpwedtdW7B+malQEUomylZMwFaB0XJS+8oPlzqYf5RDyNYret4AZzfw0ke6fm3N7ygk3TTBZ9uKfqUNRHdpJ6/uIcHFE7MO16nyoxWHlM/u9i5vmxzhgKtAgMBAAECggEAdc+z85zUhXmHSL/x96tcBeGJdyRjKPzpwHwThfGtahNLIG7ZY6PcCbfECqqX9G5WVU0uCy+MC7QAgAHRDrcavWrGeV/FejlhEi5wuVjqPTlGABreDgTghd8E3Kg0SHcq9eFi+V3qG830qFaIqGUsfmLt5ZBtRktIXDzjC2yeezvV3IPHAQw5mTHmcbzz3WLJ8kuXV3gbOAPzV6Ig5pyp2NwdTMpg1Pn6Xfhf9reYnpkesW8Jph5c6P6bJZkQngC0TFQOpK3UfmFPq1dGfD5UcHjx1H4z09ny6rgXdRxvohDsgeiNmWY+rulzpQM8/DdUwwdmSACYAKgJSn6anCqzvQKBgQD6r/cEI/ShHZlLcS/vnc1W76KBpXx89luBo1NsbqwITSPKNktXpsocYuoxe4ednhBW69W71GfROQMw9zwiM1Gym9xs81Zys+IWySwd+J+T26Z1FoifPwW5ZA2cZYqzwZjg8Urw964cjZtmEhyBvGdzfRlFwvXi36ZB8b4wuOHsEwKBgQCeBJ/tGrGW15enkbmkCKSjFje7yVpjsB7ineuXd7QU3GVXNX9n35BvEcBkgx221woInEfyGsYnw13z1kwDPg2jh2tjVRSz2hjr7UNqeEXeuc366PHzoyJdl7K4ut7F5newzJhRqNKerLvTG8Ajta1NCnDevDVSYXgpso+Qw6iuPwKBgDWSJvJekKdhgOHLVVgaW8gpO4wDBkBaESH5+hjg6ah4e555zc30WZqJVMywPkHjhlBc43bZJDpkuZbcLqCMYPgPMKKjuaSXZkhCQ0hAWjGprb+1ygpl2F5O0E3MsUBKrdXcGoy2ESIO7Nd6JVdgIKdgY2cyC4OpEYlkFKWqzLS7AoGAQxR5g6D6VKuPAJ63LPBSW705yakPixQf+FnLwlAZjWWGS8A1JrZcTRo/Dywt+AlPhBo73IYLKqQgBTwqppG4HnyFVPSwRi1GuRjOrqsCFivQSjyLQb81/n9AanVBzscodlBUNQ4y4xM25MZ6CW69c+ADzDofdKpV5XWcxnqY5+cCgYEAoguI4wGcq1ULjOnt2BLhj2X4kU5UJZwFQuV8t5GDl9BoxO31qRCvu7cs3XtMsIaMn6Zvrg/bNjPF7sC1f0uXqCn3AlnVVTaG/jlI5QywJJflG33Hfa0K7j3ivGTU+AUL4LZbXOt9YR7vGjmItyAnZosdAogp50mOA1W0Jla+Aaw= - alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7rRdHzrcyEdSOLPm3ITg+t/C3tGp9+wl739nOgFExrSD1j1C95tTRGUCqNUQtatiYmlAfwOKzkNhr/XEH/Vvpq5Ei8C4ZBWJqOMw7fQfBE6m5erO/FOuS4pyZCtQZyP9C5nhtYOupnGtq0fmgQaGKk657vszYSMEtpuQaZ5/odUYxRbYP3IHbcK+++PQBarfOdnhNcnR/Ry7TVOC3+da0dogmClPEconZQMwCJ81CJ7Hj4TKKyLTe9bz+J2tkUeNr9Mc72g4ljjftX7k0RBpBpi4HSHJ3SmPLhktiuDOeOGOef88pBgBtFV03/+aFpUEHx/imiHhBMBeNT3kqFV03QIDAQAB - notifyUrl: http://8wvpet.natappfree.cc/alipay/notify + alipay: + appId: 9021000140633904 + appPrivateKey: + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCavSHP47iS43En9+MaR8ussAQmI9AbqhZYfb1yROE1ztMUmV9QJqmNiTdA2Tihn+srBG9AzVeJ/0XCqRlH8mFz5FXdsCG1M2EIPgiBYX58EJ565vAgHKRA/d/kKCA5MVkWYu6YiU/V2Pqw/X8K8/FNxXYvaHpjZwpjDqJCzvy4iK4DtM4QQoZRsVr0cOycYJSiC5A6+1wCpP4ZFNL9JdaQLCkLavAeRiRpwedtdW7B+malQEUomylZMwFaB0XJS+8oPlzqYf5RDyNYret4AZzfw0ke6fm3N7ygk3TTBZ9uKfqUNRHdpJ6/uIcHFE7MO16nyoxWHlM/u9i5vmxzhgKtAgMBAAECggEAdc+z85zUhXmHSL/x96tcBeGJdyRjKPzpwHwThfGtahNLIG7ZY6PcCbfECqqX9G5WVU0uCy+MC7QAgAHRDrcavWrGeV/FejlhEi5wuVjqPTlGABreDgTghd8E3Kg0SHcq9eFi+V3qG830qFaIqGUsfmLt5ZBtRktIXDzjC2yeezvV3IPHAQw5mTHmcbzz3WLJ8kuXV3gbOAPzV6Ig5pyp2NwdTMpg1Pn6Xfhf9reYnpkesW8Jph5c6P6bJZkQngC0TFQOpK3UfmFPq1dGfD5UcHjx1H4z09ny6rgXdRxvohDsgeiNmWY+rulzpQM8/DdUwwdmSACYAKgJSn6anCqzvQKBgQD6r/cEI/ShHZlLcS/vnc1W76KBpXx89luBo1NsbqwITSPKNktXpsocYuoxe4ednhBW69W71GfROQMw9zwiM1Gym9xs81Zys+IWySwd+J+T26Z1FoifPwW5ZA2cZYqzwZjg8Urw964cjZtmEhyBvGdzfRlFwvXi36ZB8b4wuOHsEwKBgQCeBJ/tGrGW15enkbmkCKSjFje7yVpjsB7ineuXd7QU3GVXNX9n35BvEcBkgx221woInEfyGsYnw13z1kwDPg2jh2tjVRSz2hjr7UNqeEXeuc366PHzoyJdl7K4ut7F5newzJhRqNKerLvTG8Ajta1NCnDevDVSYXgpso+Qw6iuPwKBgDWSJvJekKdhgOHLVVgaW8gpO4wDBkBaESH5+hjg6ah4e555zc30WZqJVMywPkHjhlBc43bZJDpkuZbcLqCMYPgPMKKjuaSXZkhCQ0hAWjGprb+1ygpl2F5O0E3MsUBKrdXcGoy2ESIO7Nd6JVdgIKdgY2cyC4OpEYlkFKWqzLS7AoGAQxR5g6D6VKuPAJ63LPBSW705yakPixQf+FnLwlAZjWWGS8A1JrZcTRo/Dywt+AlPhBo73IYLKqQgBTwqppG4HnyFVPSwRi1GuRjOrqsCFivQSjyLQb81/n9AanVBzscodlBUNQ4y4xM25MZ6CW69c+ADzDofdKpV5XWcxnqY5+cCgYEAoguI4wGcq1ULjOnt2BLhj2X4kU5UJZwFQuV8t5GDl9BoxO31qRCvu7cs3XtMsIaMn6Zvrg/bNjPF7sC1f0uXqCn3AlnVVTaG/jlI5QywJJflG33Hfa0K7j3ivGTU+AUL4LZbXOt9YR7vGjmItyAnZosdAogp50mOA1W0Jla+Aaw= + alipayPublicKey: + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7rRdHzrcyEdSOLPm3ITg+t/C3tGp9+wl739nOgFExrSD1j1C95tTRGUCqNUQtatiYmlAfwOKzkNhr/XEH/Vvpq5Ei8C4ZBWJqOMw7fQfBE6m5erO/FOuS4pyZCtQZyP9C5nhtYOupnGtq0fmgQaGKk657vszYSMEtpuQaZ5/odUYxRbYP3IHbcK+++PQBarfOdnhNcnR/Ry7TVOC3+da0dogmClPEconZQMwCJ81CJ7Hj4TKKyLTe9bz+J2tkUeNr9Mc72g4ljjftX7k0RBpBpi4HSHJ3SmPLhktiuDOeOGOef88pBgBtFV03/+aFpUEHx/imiHhBMBeNT3kqFV03QIDAQAB + notifyUrl: http://rnkig5.natappfree.cc/alipay/notify diff --git a/cloud-market-server/src/main/resources/mapper/market/OrderShowMapper.xml b/cloud-market-server/src/main/resources/mapper/market/OrderShowMapper.xml index 652fbfa..8b45afb 100644 --- a/cloud-market-server/src/main/resources/mapper/market/OrderShowMapper.xml +++ b/cloud-market-server/src/main/resources/mapper/market/OrderShowMapper.xml @@ -79,6 +79,8 @@ UPDATE `orders` SET `orders`.`exist` = 1 WHERE `orders`.`orders_id` = #{ordersId} + + DELETE FROM `orders` WHERE `orders`.`orders_id` = #{ordersId}