123
This commit is contained in:
@@ -12,8 +12,11 @@ CREATE TABLE `cai_pay_trd_config`
|
|||||||
`notify_url` varchar(100) NOT NULL COMMENT '回调域名',
|
`notify_url` varchar(100) NOT NULL COMMENT '回调域名',
|
||||||
`mch_id` varchar(100) NOT NULL COMMENT '商户ID',
|
`mch_id` varchar(100) NOT NULL COMMENT '商户ID',
|
||||||
`sign` varchar(200) NOT NULL COMMENT '秘钥',
|
`sign` varchar(200) NOT NULL COMMENT '秘钥',
|
||||||
`delete_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
|
`ali_product_id` varchar(100) NOT NULL COMMENT '支付宝产品号',
|
||||||
|
`ali_pay_type` varchar(10) NOT NULL DEFAULT 'H5' COMMENT '支付宝支付方式',
|
||||||
|
`enable_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否开启',
|
||||||
|
`delete_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除',
|
||||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
) ENGINE = InnoDB
|
) ENGINE = InnoDB
|
||||||
AUTO_INCREMENT = 1;
|
AUTO_INCREMENT = 3;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ package com.ruoyi.web.controller.cai.admin.init;
|
|||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.dtflys.forest.annotation.JSONBody;
|
import com.dtflys.forest.annotation.JSONBody;
|
||||||
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
||||||
|
import com.ruoyi.cai.pay.PayReturnResp;
|
||||||
import com.ruoyi.cai.service.CitysService;
|
import com.ruoyi.cai.service.CitysService;
|
||||||
import com.ruoyi.cai.service.PayTrdConfigService;
|
import com.ruoyi.cai.service.PayTrdConfigService;
|
||||||
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.domain.R;
|
||||||
@@ -37,8 +38,8 @@ public class CityController {
|
|||||||
|
|
||||||
|
|
||||||
@PostMapping("/createOrder")
|
@PostMapping("/createOrder")
|
||||||
public R<String> createOrder(@RequestBody PayOrderInfoDTO dto){
|
public R<Object> createOrder(@RequestBody PayOrderInfoDTO dto){
|
||||||
String orderAli = payTrdConfigService.createOrderAli(dto);
|
PayReturnResp orderAli = payTrdConfigService.createOrderAli(dto);
|
||||||
return R.ok(orderAli);
|
return R.ok(orderAli);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,22 +76,44 @@ public class PayController {
|
|||||||
return R.ok(orderPayStatusResp);
|
return R.ok(orderPayStatusResp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/trdAli")
|
@PostMapping(value = "/merge/ali")
|
||||||
@Operation(summary = "第三方支付宝支付")
|
@Operation(summary = "支付宝聚合支付")
|
||||||
@Log(title = "第三方支付宝支付", businessType = BusinessType.OTHER, isSaveDb = true)
|
@Log(title = "支付宝聚合支付", businessType = BusinessType.OTHER, isSaveDb = true)
|
||||||
public R<PayReturnResp> trdWxPay(@RequestBody PayControllerDTO dto){
|
public R<PayReturnResp> trdWxPay(@RequestBody PayControllerDTO dto){
|
||||||
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo());
|
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo());
|
||||||
if(payOrderInfo == null){
|
if(payOrderInfo == null){
|
||||||
return R.fail(600,"支付失败,未找到订单");
|
return R.fail(600,"支付失败,未找到订单");
|
||||||
}
|
}
|
||||||
|
Long userId = LoginHelper.getUserId();
|
||||||
|
boolean userTrdPay = trdPayManager.useTrdPay(userId);
|
||||||
|
if(userTrdPay){
|
||||||
try {
|
try {
|
||||||
String ali = payTrdConfigService.createOrderAli(payOrderInfo);
|
PayReturnResp orderAli = payTrdConfigService.createOrderAli(payOrderInfo);
|
||||||
PayReturnResp payTrdReturnResp = new PayReturnResp();
|
return R.ok(orderAli);
|
||||||
payTrdReturnResp.setData(ali);
|
|
||||||
return R.ok(payTrdReturnResp);
|
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
log.error("第三方微信支付失败!",e);
|
log.error("第三方支付宝支付失败!",e);
|
||||||
return R.fail(600,"支付失败!微信支付通道失败!");
|
return R.fail(600,"第三方支付宝支付失败!");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
try {
|
||||||
|
boolean b = payConfigManager.initAliPay();
|
||||||
|
if(!b){
|
||||||
|
log.error("支付失败,未找到可用的支付宝配置");
|
||||||
|
return R.fail(600,"支付失败!未开通支付宝支付!");
|
||||||
|
}
|
||||||
|
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
|
||||||
|
model.setBody(payOrderInfo.getBody());
|
||||||
|
model.setSubject(payOrderInfo.getSubject());
|
||||||
|
model.setOutTradeNo(payOrderInfo.getOrderNo());
|
||||||
|
model.setTimeoutExpress("30m");
|
||||||
|
model.setTotalAmount(payOrderInfo.getPrice().toString());
|
||||||
|
String notifyUrl = AliPayApiConfigKit.getAliPayApiConfig().getDomain();
|
||||||
|
String orderInfo = AliPayApi.appPayToResponse(model, notifyUrl+NOTIFY_ALI_URL).getBody();
|
||||||
|
return R.ok(PayReturnResp.createApp(orderInfo));
|
||||||
|
} catch (AlipayApiException e) {
|
||||||
|
log.error("支付宝支付失败",e);
|
||||||
|
return R.fail("支付宝支付失败,请联系客服");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,7 +274,7 @@ public class PayController {
|
|||||||
public String trdNotifyUrlV1(HttpServletRequest request) {
|
public String trdNotifyUrlV1(HttpServletRequest request) {
|
||||||
try {
|
try {
|
||||||
Map<String, String> params = AliPayApi.toMap(request);
|
Map<String, String> params = AliPayApi.toMap(request);
|
||||||
log.info("第三方支付回调:{}",JSON.toJSONString(params));
|
log.info("第三方支付回调V1:{}",JSON.toJSONString(params));
|
||||||
String mchOrderNo = params.get("mchOrderNo");
|
String mchOrderNo = params.get("mchOrderNo");
|
||||||
String payOrderId = params.get("payOrderId");
|
String payOrderId = params.get("payOrderId");
|
||||||
String productId = params.get("productId");
|
String productId = params.get("productId");
|
||||||
@@ -272,7 +294,7 @@ public class PayController {
|
|||||||
public String trdNotifyUrlV2(HttpServletRequest request) {
|
public String trdNotifyUrlV2(HttpServletRequest request) {
|
||||||
try {
|
try {
|
||||||
Map<String, String> params = AliPayApi.toMap(request);
|
Map<String, String> params = AliPayApi.toMap(request);
|
||||||
log.info("第三方支付回调:{}",JSON.toJSONString(params));
|
log.info("第三方支付回调V2:{}",JSON.toJSONString(params));
|
||||||
String mchOrderNo = params.get("mchOrderNo");
|
String mchOrderNo = params.get("mchOrderNo");
|
||||||
String payOrderId = params.get("payOrderId");
|
String payOrderId = params.get("payOrderId");
|
||||||
String productId = params.get("productId");
|
String productId = params.get("productId");
|
||||||
|
|||||||
@@ -55,12 +55,16 @@ public class SettingAppController {
|
|||||||
@Operation(summary = "充值配置")
|
@Operation(summary = "充值配置")
|
||||||
@Log(title = "充值配置", businessType = BusinessType.OTHER,isPrintResponseData = false, isSaveDb = false)
|
@Log(title = "充值配置", businessType = BusinessType.OTHER,isPrintResponseData = false, isSaveDb = false)
|
||||||
public R<SettingGoodsVo> goods(){
|
public R<SettingGoodsVo> goods(){
|
||||||
|
boolean useTrdPay = trdPayManager.useTrdPay(LoginHelper.getUserId());
|
||||||
SettingGoodsVo vo = new SettingGoodsVo();
|
SettingGoodsVo vo = new SettingGoodsVo();
|
||||||
|
if(useTrdPay){ // 使用第三方支付
|
||||||
|
vo.setHasAlipayPay(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.OPEN_ALI_PAY));
|
||||||
|
vo.setHasWechatPay(0);
|
||||||
|
}else{
|
||||||
vo.setHasAlipayPay(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.OPEN_ALI_PAY));
|
vo.setHasAlipayPay(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.OPEN_ALI_PAY));
|
||||||
vo.setHasWechatPay(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.OPEN_WX_PAY));
|
vo.setHasWechatPay(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.OPEN_WX_PAY));
|
||||||
|
}
|
||||||
vo.setAlipayFirst(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.ALI_PAY_FIRST));
|
vo.setAlipayFirst(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.ALI_PAY_FIRST));
|
||||||
boolean useTrdPay = trdPayManager.useTrdPay(LoginHelper.getUserId());
|
|
||||||
vo.setUseTrdPay(useTrdPay?1:0);
|
|
||||||
List<Goods> list = goodsService.list(Wrappers.lambdaQuery(Goods.class)
|
List<Goods> list = goodsService.list(Wrappers.lambdaQuery(Goods.class)
|
||||||
.eq(Goods::getStatus,0)
|
.eq(Goods::getStatus,0)
|
||||||
.orderByAsc(Goods::getPrice));
|
.orderByAsc(Goods::getPrice));
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
import com.alipay.api.AlipayApiException;
|
import com.alipay.api.AlipayApiException;
|
||||||
import com.ruoyi.cai.pay.PayManager;
|
import com.ruoyi.cai.pay.PayManager;
|
||||||
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
||||||
|
import com.ruoyi.cai.pay.PayReturnResp;
|
||||||
import com.ruoyi.cai.service.PayTrdConfigService;
|
import com.ruoyi.cai.service.PayTrdConfigService;
|
||||||
import jdk.nashorn.internal.runtime.regexp.JoniRegExp;
|
import jdk.nashorn.internal.runtime.regexp.JoniRegExp;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -29,8 +30,8 @@ public class PayTest {
|
|||||||
dto.setSubject("subject");
|
dto.setSubject("subject");
|
||||||
dto.setPrice(new BigDecimal("10"));
|
dto.setPrice(new BigDecimal("10"));
|
||||||
dto.setOrderNo("ORSKALKLASJDKLAS");
|
dto.setOrderNo("ORSKALKLASJDKLAS");
|
||||||
String orderAli = payTrdConfigService.createOrderAli(dto);
|
PayReturnResp orderAli = payTrdConfigService.createOrderAli(dto);
|
||||||
log.info(orderAli);
|
log.info(JSON.toJSONString(orderAli));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ public class SettingGoodsVo {
|
|||||||
private Integer hasWechatPay = 1;
|
private Integer hasWechatPay = 1;
|
||||||
@Schema(description = "支付宝是否放在第一个 1-是 0-否")
|
@Schema(description = "支付宝是否放在第一个 1-是 0-否")
|
||||||
private Integer alipayFirst = 1;
|
private Integer alipayFirst = 1;
|
||||||
@Schema(description = "是否使用第四方支付 1-是 0-否")
|
|
||||||
private Integer useTrdPay = 1;
|
|
||||||
@Schema(description = "支付设置")
|
@Schema(description = "支付设置")
|
||||||
private List<Goods> goods;
|
private List<Goods> goods;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,25 @@
|
|||||||
package com.ruoyi.cai.pay;
|
package com.ruoyi.cai.pay;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class PayReturnResp {
|
public class PayReturnResp {
|
||||||
private String data;
|
private String data;
|
||||||
|
@Schema(description = "H5,APP")
|
||||||
|
private String appType;
|
||||||
|
|
||||||
|
public static PayReturnResp createH5(String data){
|
||||||
|
PayReturnResp resp = new PayReturnResp();
|
||||||
|
resp.setData(data);
|
||||||
|
resp.setAppType("H5");
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PayReturnResp createApp(String data){
|
||||||
|
PayReturnResp resp = new PayReturnResp();
|
||||||
|
resp.setData(data);
|
||||||
|
resp.setAppType("APP");
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.ruoyi.cai.domain.PayTrdConfig;
|
import com.ruoyi.cai.domain.PayTrdConfig;
|
||||||
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
||||||
|
import com.ruoyi.cai.pay.PayReturnResp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 四方支付配置Service接口
|
* 四方支付配置Service接口
|
||||||
@@ -12,7 +13,7 @@ import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
|||||||
* @date 2024-11-25
|
* @date 2024-11-25
|
||||||
*/
|
*/
|
||||||
public interface PayTrdConfigService extends IService<PayTrdConfig> {
|
public interface PayTrdConfigService extends IService<PayTrdConfig> {
|
||||||
String createOrderAli(PayOrderInfoDTO dto);
|
PayReturnResp createOrderAli(PayOrderInfoDTO dto);
|
||||||
|
|
||||||
JSONObject queryOrder(String orderNo, String trdPayType);
|
JSONObject queryOrder(String orderNo, String trdPayType);
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,13 @@ import com.ruoyi.cai.domain.PayTrdConfig;
|
|||||||
import com.ruoyi.cai.mapper.PayTrdConfigMapper;
|
import com.ruoyi.cai.mapper.PayTrdConfigMapper;
|
||||||
import com.ruoyi.cai.pay.PayManager;
|
import com.ruoyi.cai.pay.PayManager;
|
||||||
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
||||||
|
import com.ruoyi.cai.pay.PayReturnResp;
|
||||||
import com.ruoyi.cai.pay.PayTypeEnum;
|
import com.ruoyi.cai.pay.PayTypeEnum;
|
||||||
import com.ruoyi.cai.service.PayTrdConfigService;
|
import com.ruoyi.cai.service.PayTrdConfigService;
|
||||||
import com.ruoyi.cai.trdpay.TrdPayManager;
|
import com.ruoyi.cai.trdpay.TrdPayManager;
|
||||||
import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
|
import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
|
||||||
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
|
import com.tencentcloudapi.gme.v20180711.models.AppStatisticsItem;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -36,7 +38,7 @@ public class PayTrdConfigServiceImpl extends ServiceImpl<PayTrdConfigMapper, Pay
|
|||||||
private PayManager payManager;
|
private PayManager payManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String createOrderAli(PayOrderInfoDTO dto){
|
public PayReturnResp createOrderAli(PayOrderInfoDTO dto){
|
||||||
PayTrdConfig payTrdConfig = getEnableStatus();
|
PayTrdConfig payTrdConfig = getEnableStatus();
|
||||||
if(payTrdConfig == null){
|
if(payTrdConfig == null){
|
||||||
throw new ServiceException("未开启支付,请联系客服");
|
throw new ServiceException("未开启支付,请联系客服");
|
||||||
@@ -55,13 +57,19 @@ public class PayTrdConfigServiceImpl extends ServiceImpl<PayTrdConfigMapper, Pay
|
|||||||
log.info("第三方支付失败 V1统一支付失败失败 dto={}, payTrdConfig={}, typeEnum={}", JSON.toJSONString(dto), JSON.toJSONString(payTrdConfig),JSON.toJSONString(typeEnum));
|
log.info("第三方支付失败 V1统一支付失败失败 dto={}, payTrdConfig={}, typeEnum={}", JSON.toJSONString(dto), JSON.toJSONString(payTrdConfig),JSON.toJSONString(typeEnum));
|
||||||
throw new ServiceException("调用支付失败");
|
throw new ServiceException("调用支付失败");
|
||||||
}
|
}
|
||||||
return jsonObject.getJSONObject("payParams").getString("payUrl");
|
String payUrl = jsonObject.getJSONObject("payParams").getString("payUrl");
|
||||||
|
return PayReturnResp.createH5(payUrl);
|
||||||
}else if(typeEnum == TrdPayTypeEnum.V2){
|
}else if(typeEnum == TrdPayTypeEnum.V2){
|
||||||
if(!"0".equals(jsonObject.getString("retCode"))){
|
if(!"0".equals(jsonObject.getString("retCode"))){
|
||||||
log.info("第三方支付失败 V2统一支付失败失败 dto={}, payTrdConfig={}, typeEnum={}", JSON.toJSONString(dto), JSON.toJSONString(payTrdConfig),JSON.toJSONString(typeEnum));
|
log.info("第三方支付失败 V2统一支付失败失败 dto={}, payTrdConfig={}, typeEnum={}", JSON.toJSONString(dto), JSON.toJSONString(payTrdConfig),JSON.toJSONString(typeEnum));
|
||||||
throw new ServiceException("调用支付失败");
|
throw new ServiceException("调用支付失败");
|
||||||
}
|
}
|
||||||
return JSON.toJSONString(jsonObject);
|
String payMethod = jsonObject.getString("payMethod");
|
||||||
|
if("alipayApp".equals(payMethod)){
|
||||||
|
String appStr = jsonObject.getJSONObject("payParams").getString("appStr");
|
||||||
|
return PayReturnResp.createApp(appStr);
|
||||||
|
}
|
||||||
|
return PayReturnResp.createH5(JSON.toJSONString(jsonObject));
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user