From 41d75efeb681d0a3529b784787e525ca988700e2 Mon Sep 17 00:00:00 2001 From: "12691282@qq.com" <12691282@qq.com> Date: Wed, 30 Oct 2024 15:55:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E6=94=AF=E4=BB=98=E5=AE=9D?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 14 ++--- mall-portal/pom.xml | 9 +++- .../controller/OmsPortalOrderController.java | 36 ++++++++++++- .../mall/portal/domain/AlipayPayTradeDto.java | 14 +++++ .../mall/portal/pay/alipay/AlipayConfig.java | 37 +++++++++++++ .../mall/portal/service/AlipayService.java | 13 +++++ .../portal/service/OmsPortalOrderService.java | 7 +++ .../service/impl/AlipayServiceImpl.java | 44 +++++++++++++++ .../impl/OmsPortalOrderServiceImpl.java | 53 +++++++++++++------ .../src/main/resources/application-dev.yml | 26 ++++++--- .../src/main/resources/application-prod.yml | 10 +++- .../src/main/resources/application.yml | 2 +- 12 files changed, 228 insertions(+), 37 deletions(-) create mode 100644 mall-portal/src/main/java/com/buy507/mall/portal/domain/AlipayPayTradeDto.java create mode 100644 mall-portal/src/main/java/com/buy507/mall/portal/pay/alipay/AlipayConfig.java create mode 100644 mall-portal/src/main/java/com/buy507/mall/portal/service/AlipayService.java create mode 100644 mall-portal/src/main/java/com/buy507/mall/portal/service/impl/AlipayServiceImpl.java diff --git a/mall-admin/src/main/resources/application-dev.yml b/mall-admin/src/main/resources/application-dev.yml index 02134d4..e765324 100644 --- a/mall-admin/src/main/resources/application-dev.yml +++ b/mall-admin/src/main/resources/application-dev.yml @@ -3,9 +3,9 @@ server: spring: datasource: - url: jdbc:mysql://47.104.224.184:3306/ysr_mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai - username: root - password: 507admin + url: jdbc:mysql://192.168.31.162:3306/hui-mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai + username: lion + password: leeqiang druid: initial-size: 5 #连接池初始化大小 min-idle: 10 #最小空闲连接数 @@ -17,10 +17,10 @@ spring: login-password: druid redis: - host: 47.104.224.184 # Redis服务器地址 - database: 0 # Redis数据库索引(默认为0) + host: 192.168.31.162 # Redis服务器地址 + database: 1 # Redis数据库索引(默认为0) port: 6379 # Redis服务器连接端口 - password: redis # Redis服务器连接密码(默认为空) + password: leeqiang # Redis服务器连接密码(默认为空) jedis: pool: max-active: 8 # 连接池最大连接数(使用负值表示没有限制) @@ -30,7 +30,7 @@ spring: timeout: 3000ms # 连接超时时间(毫秒) rabbitmq: - host: 47.104.224.184 + host: 192.168.122.201 port: 5672 virtual-host: /mall username: mall diff --git a/mall-portal/pom.xml b/mall-portal/pom.xml index a9cb565..7604595 100644 --- a/mall-portal/pom.xml +++ b/mall-portal/pom.xml @@ -70,7 +70,7 @@ commons-codec commons-codec - + com.aliyun aliyun-java-sdk-core @@ -83,6 +83,13 @@ commons-io 1.3.2 + + + + com.alipay.sdk + alipay-sdk-java + 4.39.246.ALL + diff --git a/mall-portal/src/main/java/com/buy507/mall/portal/controller/OmsPortalOrderController.java b/mall-portal/src/main/java/com/buy507/mall/portal/controller/OmsPortalOrderController.java index c71caeb..8002c0f 100644 --- a/mall-portal/src/main/java/com/buy507/mall/portal/controller/OmsPortalOrderController.java +++ b/mall-portal/src/main/java/com/buy507/mall/portal/controller/OmsPortalOrderController.java @@ -1,5 +1,7 @@ package com.buy507.mall.portal.controller; +import java.io.IOException; +import java.io.OutputStream; import java.util.List; import java.util.Map; @@ -132,7 +134,25 @@ public class OmsPortalOrderController { public CommonResult> wxPrePay(@RequestParam Long orderId) { return portalOrderService.wxPrePay(orderId); } - + + + @ApiOperation("支付宝web跳转接口") + @ApiImplicitParam(name = "orderId", value = "订单ID", paramType = "query") + @RequestMapping(value = "/toAlipayWeb", method = RequestMethod.POST) + public CommonResult> toAlipayWeb(@RequestParam Long orderId, HttpServletResponse response) + throws IOException { + String result = portalOrderService.toAlipayWeb(orderId); + if(result != null){ + String charset = "UTF-8"; + response.setContentType("text/html;charset=" + charset); + OutputStream out = response.getOutputStream(); + out.write(result.getBytes(charset)); + response.getOutputStream().flush(); + } + return CommonResult.failed("调用支付宝支付失败"); + } + + /** * 微信支付成功回调方法 * @param request @@ -142,5 +162,17 @@ public class OmsPortalOrderController { public void wxPayCallback(HttpServletRequest request, HttpServletResponse response) throws Exception { portalOrderService.wxPayCallback(request, response); } - + + + + /** + * 支付宝支付成功回调方法 + * @param request + * @param response + */ + @RequestMapping("/alipay/callback") + public void alipayCallback(HttpServletRequest request, HttpServletResponse response) throws Exception { + portalOrderService.wxPayCallback(request, response); + } + } diff --git a/mall-portal/src/main/java/com/buy507/mall/portal/domain/AlipayPayTradeDto.java b/mall-portal/src/main/java/com/buy507/mall/portal/domain/AlipayPayTradeDto.java new file mode 100644 index 0000000..c4c96f0 --- /dev/null +++ b/mall-portal/src/main/java/com/buy507/mall/portal/domain/AlipayPayTradeDto.java @@ -0,0 +1,14 @@ +package com.buy507.mall.portal.domain; + +import lombok.Data; + +@Data +public class AlipayPayTradeDto { + + private String subject; + + private String outTradeNo; + + private String totalFee; + +} diff --git a/mall-portal/src/main/java/com/buy507/mall/portal/pay/alipay/AlipayConfig.java b/mall-portal/src/main/java/com/buy507/mall/portal/pay/alipay/AlipayConfig.java new file mode 100644 index 0000000..8147cdc --- /dev/null +++ b/mall-portal/src/main/java/com/buy507/mall/portal/pay/alipay/AlipayConfig.java @@ -0,0 +1,37 @@ +package com.buy507.mall.portal.pay.alipay; + +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class AlipayConfig { + + @Value("${alipay.appId}") + private String appId; + + @Value("${alipay.appPrivateKey}") + private String appPrivateKey; + + @Value("${alipay.alipayPublicKey}") + private String alipayPublicKey; + + @Value("${alipay.serverUrl}") + private String serverUrl; + + @Value("${alipay.format}") + private String format; + + @Value("${alipay.charset}") + private String charset; + + @Value("${alipay.signType}") + private String signType; + + @Bean + public AlipayClient alipayClient() { + return new DefaultAlipayClient(serverUrl, appId, appPrivateKey, format, charset, alipayPublicKey, signType); + } +} diff --git a/mall-portal/src/main/java/com/buy507/mall/portal/service/AlipayService.java b/mall-portal/src/main/java/com/buy507/mall/portal/service/AlipayService.java new file mode 100644 index 0000000..7c924e9 --- /dev/null +++ b/mall-portal/src/main/java/com/buy507/mall/portal/service/AlipayService.java @@ -0,0 +1,13 @@ +package com.buy507.mall.portal.service; + + +import com.buy507.mall.portal.domain.AlipayPayTradeDto; + +public interface AlipayService { + /** + * 跳转支付宝支付 + * @param tradeDto + * @return + */ + String createPayment(AlipayPayTradeDto tradeDto); +} diff --git a/mall-portal/src/main/java/com/buy507/mall/portal/service/OmsPortalOrderService.java b/mall-portal/src/main/java/com/buy507/mall/portal/service/OmsPortalOrderService.java index 03f779a..de75e72 100644 --- a/mall-portal/src/main/java/com/buy507/mall/portal/service/OmsPortalOrderService.java +++ b/mall-portal/src/main/java/com/buy507/mall/portal/service/OmsPortalOrderService.java @@ -87,6 +87,13 @@ public interface OmsPortalOrderService { * @return */ CommonResult> wxPrePay(Long orderId); + + /** + * 支付宝预支付 + * @param orderId + * @return + */ + String toAlipayWeb(Long orderId); /** * 微信支付成功回调方法 diff --git a/mall-portal/src/main/java/com/buy507/mall/portal/service/impl/AlipayServiceImpl.java b/mall-portal/src/main/java/com/buy507/mall/portal/service/impl/AlipayServiceImpl.java new file mode 100644 index 0000000..e4845f7 --- /dev/null +++ b/mall-portal/src/main/java/com/buy507/mall/portal/service/impl/AlipayServiceImpl.java @@ -0,0 +1,44 @@ +package com.buy507.mall.portal.service.impl; + +import com.alipay.api.AlipayClient; +import com.alipay.api.request.AlipayTradeWapPayRequest; +import com.alipay.api.response.AlipayTradeWapPayResponse; +import com.buy507.mall.portal.domain.AlipayPayTradeDto; +import com.buy507.mall.portal.service.AlipayService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +@Service +public class AlipayServiceImpl implements AlipayService { + + @Autowired + private AlipayClient alipayClient; + + @Value("${alipay.payCallBackUrl}") + private String WECHAT_PAY_PAY_CALLBACK_URL; + + + @Override + public String createPayment(AlipayPayTradeDto tradeDto) { + AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest(); + alipayRequest.setNotifyUrl(WECHAT_PAY_PAY_CALLBACK_URL); + + alipayRequest.setBizContent("{" + + "\"out_trade_no\":\"" + tradeDto.getOutTradeNo() + "\"," + + "\"total_amount\":\"" + tradeDto.getTotalFee() + "\"," + + "\"subject\":\"" + tradeDto.getSubject() + "\"," + + "\"product_code\":\"QUICK_WAP_WAY\"" + + "}"); + + try { + AlipayTradeWapPayResponse response = alipayClient.pageExecute(alipayRequest, "POST"); + return response.getBody(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + +} diff --git a/mall-portal/src/main/java/com/buy507/mall/portal/service/impl/OmsPortalOrderServiceImpl.java b/mall-portal/src/main/java/com/buy507/mall/portal/service/impl/OmsPortalOrderServiceImpl.java index 16d2729..7da7d25 100644 --- a/mall-portal/src/main/java/com/buy507/mall/portal/service/impl/OmsPortalOrderServiceImpl.java +++ b/mall-portal/src/main/java/com/buy507/mall/portal/service/impl/OmsPortalOrderServiceImpl.java @@ -16,6 +16,8 @@ import java.util.concurrent.ExecutorService; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.buy507.mall.portal.domain.*; +import com.buy507.mall.portal.service.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -65,23 +67,9 @@ import com.buy507.mall.portal.component.CancelOrderSender; import com.buy507.mall.portal.component.DistributeSender; import com.buy507.mall.portal.component.RedisLock; import com.buy507.mall.portal.dao.PortalOrderDao; -import com.buy507.mall.portal.domain.CartOrderParam; -import com.buy507.mall.portal.domain.LogisticsResult; -import com.buy507.mall.portal.domain.OfflinePaymentParam; -import com.buy507.mall.portal.domain.OfflinePaymentRecordResult; -import com.buy507.mall.portal.domain.OmsOrderDetail; -import com.buy507.mall.portal.domain.OrderItemResult; -import com.buy507.mall.portal.domain.OrderParam; -import com.buy507.mall.portal.domain.OrderResult; -import com.buy507.mall.portal.domain.SellerBankAccountResult; -import com.buy507.mall.portal.domain.WxPayTradeDto; import com.buy507.mall.portal.pay.wxpay.MyConfig; import com.buy507.mall.portal.pay.wxpay.WXPay; import com.buy507.mall.portal.pay.wxpay.WXPayUtil; -import com.buy507.mall.portal.service.OmsPortalOrderService; -import com.buy507.mall.portal.service.PortalCommonService; -import com.buy507.mall.portal.service.RedisService; -import com.buy507.mall.portal.service.UmsMemberService; import com.github.pagehelper.PageHelper; import com.google.gson.Gson; @@ -161,6 +149,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { @Autowired private RedisLock redisLock; + + @Autowired + private AlipayService alipayService; @Value("${kuaidi100.url}") private String KUAIDI100_URL; @@ -1393,7 +1384,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { try { WxPayTradeDto tradeDto = new WxPayTradeDto(); - tradeDto.setBody("渝森蓉商城-森态空气"); + tradeDto.setBody("森态空气"); tradeDto.setOutTradeNo(order.getOrderSn()); Double totalFree = order.getPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() * 100; tradeDto.setTotalFee(String.valueOf(totalFree.intValue())); @@ -1415,7 +1406,34 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { return CommonResult.failed("调用微信支付失败"); } - + + + + @Override + public String toAlipayWeb(Long orderId) { + + OmsOrder order = orderMapper.selectByPrimaryKey(orderId); + // 支付方式为1才允许支付 + if(order != null && order.getPayType() == 1) { + + //如果实际支付金额大于0,调用支付接口 + //flag = -1,表示PayAmount小于zero;flag = 0,表示PayAmount等于zero;flag = 1,表示PayAmount大于zero; + if (order.getPayAmount().compareTo(BigDecimal.ZERO) == 1) { + + AlipayPayTradeDto tradeDto = new AlipayPayTradeDto(); + tradeDto.setSubject("订单号:"+order.getOrderSn()); + tradeDto.setOutTradeNo(order.getOrderSn()); + Double totalFree = order.getPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + tradeDto.setTotalFee(String.valueOf(totalFree.intValue())); + + return alipayService.createPayment(tradeDto); + + } + } + return null; + } + + private Map wxPay(WxPayTradeDto tradeDto, String notifyUrl) throws Exception { MyConfig config = new MyConfig(WECHAT_APPID, WECHAT_PAY_MCHID, WECHAT_PAY_KEY); WXPay wxpay = new WXPay(config); @@ -1462,7 +1480,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { } } - + /** * 微信支付成功回调方法 * @param request @@ -1625,4 +1643,5 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { } + } diff --git a/mall-portal/src/main/resources/application-dev.yml b/mall-portal/src/main/resources/application-dev.yml index ace770e..5a39059 100644 --- a/mall-portal/src/main/resources/application-dev.yml +++ b/mall-portal/src/main/resources/application-dev.yml @@ -3,9 +3,9 @@ server: spring: datasource: - url: jdbc:mysql://47.104.224.184:3306/ysr_mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai - username: root - password: 507admin + url: jdbc:mysql://192.168.31.162:3306/hui-mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai + username: lion + password: leeqiang druid: initial-size: 5 #连接池初始化大小 min-idle: 10 #最小空闲连接数 @@ -18,15 +18,15 @@ spring: data: mongodb: - host: 47.104.224.184 - port: 27017 + host: 192.168.31.162 + port: 40001 database: mall-port redis: - host: 47.104.224.184 # Redis服务器地址 + host: 192.168.31.162 # Redis服务器地址 database: 0 # Redis数据库索引(默认为0) port: 6379 # Redis服务器连接端口 - password: redis # Redis服务器连接密码(默认为空) + password: leeqiang # Redis服务器连接密码(默认为空) jedis: pool: max-active: 8 # 连接池最大连接数(使用负值表示没有限制) @@ -36,7 +36,7 @@ spring: timeout: 3000ms # 连接超时时间(毫秒) rabbitmq: - host: 47.104.224.184 + host: 192.168.122.201 port: 5672 virtual-host: /mall username: mall @@ -77,3 +77,13 @@ logging: com.buy507.mall.mapper: debug com.buy507.mall.portal: debug +alipay: + appId: 9021000141666104 + appPrivateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCPp50bwLpQ5ofFcUztw46BTcc1lOGKoyuOtI+biJmgNfysl0nqeDYEriPTZo0pe7gwujrwNSMBKvmKLQ+awQSM7XEQfDj7oGNp1yw5EFjT62tFlIoi7bMueRUZnxQRTkZhNobj6+BfOeMMg0HURVE1VinUr4UVjO7IIODLCkYDURNMfSr3f4paO0odPCRSw47+b6euuzoszd81nfZUa7f6NPBaf6iAn6i2aSPTASlfAW/TZ9IHmVd13tI3pWSpsaMu0KcKZIfTz+l/VazHWQBLACzOF0LJ+eSjsj8aNGOp9Jo82zh+GddK94fElqCjoFQySeYjQ6OErGLsz1Pm6CJhAgMBAAECggEAK+p+0hQqIT9IdGi9rtYgw5DGfK/l/18AmuDCIjcxV9QJSa36b86OHQIre54XO35SAbt89yAXcmzz2nUKFzI4tOiFrxd6yBnxKlMYdt1zel227o+JZ0Ipi+SCOdHy7ZNzWpazyAu9DP+CVLnvrvf96oNLyHRcCAmMmevLLOcYHjz+d56pTS/JblPQWz/WRPkqSJt2FcMKQCbGNhthjHFf+EFF/OGVGTSpS8AW6gytUR/k713UBrrY9eYAsZ+ZA/wAsECQCvRnoxO7zy+7rTlVT+I6kJu+BfUuTgx2FOO4gjQa8ICZI/ncpW+7X7DLhcNA6Yh20T4sY8AlMU3tIoyuQQKBgQDJbzva1J3MpTwUo1FtkWrrne8X58lqKOo7T7+J2xvif3sFd9/nu/R2FX9QoJuxIgHGsl0AA5wsaEReUFf00m542zLQAfOWmPtCQ0D5zzE6MBr2BwUvNHdw0UlYzFqfq0xfty27fwIv3rI60cJ0GnxIrBB9/BaGPX6i7Pv3nXy2iQKBgQC2kY8KWMOT8r+EMs6Lm4tf+lKauYbGLIjZuAcjP1p8NO6B1psTnwQfrI/JBipXxdgwlNyfytYPTah5m2zWDfaUkcbNIu+wXUZCvVUgLi3ZYj0hlOOOzXkYiRg7k9yirzXxjdk3yRGJ0DZqxCMcizNrsQmM1B8nMcg4N+e48bQXGQKBgHzzeBCFZSFFuiAfMuqhks53WJHeoQ0uNiX2kRzlgsWcSGaa9pRb/gelzCTqi8l0C+ACUjgpBR5yyz4p3nWqdwaXCk0HeN+JJAr1hv+u651pq7/DmQ6wIAsmd7YShYCYFLcm/MJaxbOGE87ywQmeSEwYF97emeZJjR1pnd76nRrpAoGABzqeQlefbuVGxhJI8Wg4TZWY3b2I46HxzUUnKzMf/xkNdKCtxUofnK11iA0xcgZIeCv8zGr4rORzTlVkKtmksN9Q0uCWQxJ+bLgYfcy2TgxAxWqi1A24xMrw5bMGIn7zkNwABOB2TFGtRe78QO4WHCaHbUcc8K1c8zTrfPw9GEkCgYB+mMZXsFe8KDOsy+fRdnB2KN+FlZIKKP2ehTGZnj9JENIR6A8//MgC4astniIy/K2JY6EsvPpHzT9nSK0uQBFSIXFgXm4qnVLXATZskKu8mvQgcYcvXKZHdQHNzvn+J53xfxnAcqXtcMPzvLzCoTMcbjKJ8YC0bBr0eNonb4ea5g== + alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6dBwV5KsJHqqvxh29bkGxEW8eIb8WJx6Ax5NuERvbM5BcTKEe/yse/mCR5OEZSWSNnxa3SQCql50xcxt0cfSe/QcmXP+Mi6sY07LO2/tK+N8PhYWzKunnq+KbanQ+R0wGw4oVl02g/vXx097aWiDZdLcHu8No78b6VIy79EsqThbiQuqJdmFkXfrePzKxNbIrAr4ENZJVcmp2+/LU7LrdAqgnlzyx4Ya0begj7d/MPz+weteSmoyBeAH2xzPiKpdOtR5HdKyaaTIRBGyr+BTYMdyeZYrGtB7HNPv2ydAHJwiQj88dDCCGhCRyDLpLdF15xZGLxTq8FlqKzfzut/UowIDAQAB + serverUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do + format: json + charset: UTF-8 + signType: RSA2 + payCallBackUrl: https://yusenrong.507buy.com/member/order/alipay/callback + diff --git a/mall-portal/src/main/resources/application-prod.yml b/mall-portal/src/main/resources/application-prod.yml index f73ecc0..b7fe827 100644 --- a/mall-portal/src/main/resources/application-prod.yml +++ b/mall-portal/src/main/resources/application-prod.yml @@ -77,4 +77,12 @@ logging: com.buy507.mall.portal: debug path: /var/logs - +alipay: + appId: your_app_id + appPrivateKey: your_app_private_key + alipayPublicKey: your_alipay_public_key + serverUrl: https://openapi.alipay.com/gateway.do + format: json + charset: UTF-8 + signType: RSA2 + payCallBackUrl: https://yusenrong.507buy.com/member/order/alipay/callback diff --git a/mall-portal/src/main/resources/application.yml b/mall-portal/src/main/resources/application.yml index 5abb5a2..496fddf 100644 --- a/mall-portal/src/main/resources/application.yml +++ b/mall-portal/src/main/resources/application.yml @@ -22,4 +22,4 @@ redis: authCode: "portal:authCode:" orderId: "portal:orderId:" expire: - authCode: 300 # 验证码超期时间 5分钟有效 \ No newline at end of file + authCode: 300 # 验证码超期时间 5分钟有效