加入支付宝跳转接口

This commit is contained in:
2024-10-30 15:55:25 +08:00
parent d82fd875fd
commit 41d75efeb6
12 changed files with 228 additions and 37 deletions

View File

@@ -70,7 +70,7 @@
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
@@ -83,6 +83,13 @@
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 支付宝支付 -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.39.246.ALL</version>
</dependency>
</dependencies>

View File

@@ -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<Map<String, String>> 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<Map<String, String>> 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);
}
}

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -87,6 +87,13 @@ public interface OmsPortalOrderService {
* @return
*/
CommonResult<Map<String, String>> wxPrePay(Long orderId);
/**
* 支付宝预支付
* @param orderId
* @return
*/
String toAlipayWeb(Long orderId);
/**
* 微信支付成功回调方法

View File

@@ -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;
}
}
}

View File

@@ -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小于zeroflag = 0,表示PayAmount等于zeroflag = 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<String, String> 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 {
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -22,4 +22,4 @@ redis:
authCode: "portal:authCode:"
orderId: "portal:orderId:"
expire:
authCode: 300 # 验证码超期时间 5分钟有效
authCode: 300 # 验证码超期时间 5分钟有效