123
This commit is contained in:
@@ -12,8 +12,11 @@ CREATE TABLE `cai_pay_trd_config`
|
||||
`notify_url` varchar(100) NOT NULL COMMENT '回调域名',
|
||||
`mch_id` varchar(100) NOT NULL COMMENT '商户ID',
|
||||
`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 '创建时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) 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.dtflys.forest.annotation.JSONBody;
|
||||
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
||||
import com.ruoyi.cai.pay.PayReturnResp;
|
||||
import com.ruoyi.cai.service.CitysService;
|
||||
import com.ruoyi.cai.service.PayTrdConfigService;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
@@ -37,8 +38,8 @@ public class CityController {
|
||||
|
||||
|
||||
@PostMapping("/createOrder")
|
||||
public R<String> createOrder(@RequestBody PayOrderInfoDTO dto){
|
||||
String orderAli = payTrdConfigService.createOrderAli(dto);
|
||||
public R<Object> createOrder(@RequestBody PayOrderInfoDTO dto){
|
||||
PayReturnResp orderAli = payTrdConfigService.createOrderAli(dto);
|
||||
return R.ok(orderAli);
|
||||
}
|
||||
|
||||
|
||||
@@ -76,22 +76,44 @@ public class PayController {
|
||||
return R.ok(orderPayStatusResp);
|
||||
}
|
||||
|
||||
@PostMapping(value = "/trdAli")
|
||||
@Operation(summary = "第三方支付宝支付")
|
||||
@Log(title = "第三方支付宝支付", businessType = BusinessType.OTHER, isSaveDb = true)
|
||||
@PostMapping(value = "/merge/ali")
|
||||
@Operation(summary = "支付宝聚合支付")
|
||||
@Log(title = "支付宝聚合支付", businessType = BusinessType.OTHER, isSaveDb = true)
|
||||
public R<PayReturnResp> trdWxPay(@RequestBody PayControllerDTO dto){
|
||||
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo());
|
||||
if(payOrderInfo == null){
|
||||
return R.fail(600,"支付失败,未找到订单");
|
||||
}
|
||||
Long userId = LoginHelper.getUserId();
|
||||
boolean userTrdPay = trdPayManager.useTrdPay(userId);
|
||||
if(userTrdPay){
|
||||
try {
|
||||
String ali = payTrdConfigService.createOrderAli(payOrderInfo);
|
||||
PayReturnResp payTrdReturnResp = new PayReturnResp();
|
||||
payTrdReturnResp.setData(ali);
|
||||
return R.ok(payTrdReturnResp);
|
||||
PayReturnResp orderAli = payTrdConfigService.createOrderAli(payOrderInfo);
|
||||
return R.ok(orderAli);
|
||||
}catch (Exception e){
|
||||
log.error("第三方微信支付失败!",e);
|
||||
return R.fail(600,"支付失败!微信支付通道失败!");
|
||||
log.error("第三方支付宝支付失败!",e);
|
||||
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) {
|
||||
try {
|
||||
Map<String, String> params = AliPayApi.toMap(request);
|
||||
log.info("第三方支付回调:{}",JSON.toJSONString(params));
|
||||
log.info("第三方支付回调V1:{}",JSON.toJSONString(params));
|
||||
String mchOrderNo = params.get("mchOrderNo");
|
||||
String payOrderId = params.get("payOrderId");
|
||||
String productId = params.get("productId");
|
||||
@@ -272,7 +294,7 @@ public class PayController {
|
||||
public String trdNotifyUrlV2(HttpServletRequest request) {
|
||||
try {
|
||||
Map<String, String> params = AliPayApi.toMap(request);
|
||||
log.info("第三方支付回调:{}",JSON.toJSONString(params));
|
||||
log.info("第三方支付回调V2:{}",JSON.toJSONString(params));
|
||||
String mchOrderNo = params.get("mchOrderNo");
|
||||
String payOrderId = params.get("payOrderId");
|
||||
String productId = params.get("productId");
|
||||
|
||||
@@ -55,12 +55,16 @@ public class SettingAppController {
|
||||
@Operation(summary = "充值配置")
|
||||
@Log(title = "充值配置", businessType = BusinessType.OTHER,isPrintResponseData = false, isSaveDb = false)
|
||||
public R<SettingGoodsVo> goods(){
|
||||
boolean useTrdPay = trdPayManager.useTrdPay(LoginHelper.getUserId());
|
||||
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.setHasWechatPay(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.OPEN_WX_PAY));
|
||||
}
|
||||
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)
|
||||
.eq(Goods::getStatus,0)
|
||||
.orderByAsc(Goods::getPrice));
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.ruoyi.cai.pay.PayManager;
|
||||
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
||||
import com.ruoyi.cai.pay.PayReturnResp;
|
||||
import com.ruoyi.cai.service.PayTrdConfigService;
|
||||
import jdk.nashorn.internal.runtime.regexp.JoniRegExp;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -29,8 +30,8 @@ public class PayTest {
|
||||
dto.setSubject("subject");
|
||||
dto.setPrice(new BigDecimal("10"));
|
||||
dto.setOrderNo("ORSKALKLASJDKLAS");
|
||||
String orderAli = payTrdConfigService.createOrderAli(dto);
|
||||
log.info(orderAli);
|
||||
PayReturnResp orderAli = payTrdConfigService.createOrderAli(dto);
|
||||
log.info(JSON.toJSONString(orderAli));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -14,8 +14,6 @@ public class SettingGoodsVo {
|
||||
private Integer hasWechatPay = 1;
|
||||
@Schema(description = "支付宝是否放在第一个 1-是 0-否")
|
||||
private Integer alipayFirst = 1;
|
||||
@Schema(description = "是否使用第四方支付 1-是 0-否")
|
||||
private Integer useTrdPay = 1;
|
||||
@Schema(description = "支付设置")
|
||||
private List<Goods> goods;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,25 @@
|
||||
package com.ruoyi.cai.pay;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class PayReturnResp {
|
||||
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.ruoyi.cai.domain.PayTrdConfig;
|
||||
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
||||
import com.ruoyi.cai.pay.PayReturnResp;
|
||||
|
||||
/**
|
||||
* 四方支付配置Service接口
|
||||
@@ -12,7 +13,7 @@ import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
||||
* @date 2024-11-25
|
||||
*/
|
||||
public interface PayTrdConfigService extends IService<PayTrdConfig> {
|
||||
String createOrderAli(PayOrderInfoDTO dto);
|
||||
PayReturnResp createOrderAli(PayOrderInfoDTO dto);
|
||||
|
||||
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.pay.PayManager;
|
||||
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
||||
import com.ruoyi.cai.pay.PayReturnResp;
|
||||
import com.ruoyi.cai.pay.PayTypeEnum;
|
||||
import com.ruoyi.cai.service.PayTrdConfigService;
|
||||
import com.ruoyi.cai.trdpay.TrdPayManager;
|
||||
import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.tencentcloudapi.gme.v20180711.models.AppStatisticsItem;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -36,7 +38,7 @@ public class PayTrdConfigServiceImpl extends ServiceImpl<PayTrdConfigMapper, Pay
|
||||
private PayManager payManager;
|
||||
|
||||
@Override
|
||||
public String createOrderAli(PayOrderInfoDTO dto){
|
||||
public PayReturnResp createOrderAli(PayOrderInfoDTO dto){
|
||||
PayTrdConfig payTrdConfig = getEnableStatus();
|
||||
if(payTrdConfig == null){
|
||||
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));
|
||||
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){
|
||||
if(!"0".equals(jsonObject.getString("retCode"))){
|
||||
log.info("第三方支付失败 V2统一支付失败失败 dto={}, payTrdConfig={}, typeEnum={}", JSON.toJSONString(dto), JSON.toJSONString(payTrdConfig),JSON.toJSONString(typeEnum));
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user