This commit is contained in:
dute7liang
2024-01-21 01:20:07 +08:00
parent af38f89072
commit 0814fc36c5
25 changed files with 513 additions and 65 deletions

View File

@@ -0,0 +1,106 @@
package com.ruoyi.cai.pay;
import com.alipay.api.domain.AppItemDataDiffVO;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ijpay.alipay.AliPayApiConfig;
import com.ijpay.alipay.AliPayApiConfigKit;
import com.ruoyi.cai.domain.PayConfig;
import com.ruoyi.cai.service.PayConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
@Slf4j
public class PayConfigManager {
private static final Map<Long,PayConfig> PAY_CONFIGS_MAP = new HashMap<>();
@Autowired
private PayConfigService payConfigService;
@PostConstruct
public void init(){
List<PayConfig> list = payConfigService.list(Wrappers.lambdaQuery(PayConfig.class));
for (PayConfig payConfig : list) {
PAY_CONFIGS_MAP.put(payConfig.getId(), payConfig);
}
}
// 1支付宝2微信
public void addPayConfig(PayConfig payConfig) {
PAY_CONFIGS_MAP.put(payConfig.getId(),payConfig);
}
public void updatePayConfig(PayConfig payConfig) {
PAY_CONFIGS_MAP.put(payConfig.getId(),payConfig);
if(PayTypeEnum.ALI.getCode().equals(payConfig.getPayType())){
AliPayApiConfigKit.removeApiConfig(payConfig.getAppid());
}
}
public void deletePayConfig(PayConfig payConfig) {
PAY_CONFIGS_MAP.remove(payConfig.getId());
if(PayTypeEnum.ALI.getCode().equals(payConfig.getPayType())){
AliPayApiConfigKit.removeApiConfig(payConfig.getAppid());
}
}
public PayConfig getWxConfig(){
Collection<PayConfig> values = PAY_CONFIGS_MAP.values();
for (PayConfig value : values) {
if(PayTypeEnum.WX.getCode().equals(value.getPayType())){
return value;
}
}
return null;
}
public PayConfig getAliConfig(){
Collection<PayConfig> values = PAY_CONFIGS_MAP.values();
for (PayConfig value : values) {
if(PayTypeEnum.ALI.getCode().equals(value.getPayType())){
return value;
}
}
return null;
}
public boolean initAliPay() {
PayConfig payConfig = this.getAliConfig();
if(payConfig == null){
return false;
}
AliPayApiConfig aliPayApiConfig;
try {
aliPayApiConfig = AliPayApiConfigKit.getApiConfig(payConfig.getAppid());
} catch (Exception e) {
log.error("实例化AliPayApiConfig...");
// 如果Map中没有当前支付宝的实例就初始化并添加到Map中
aliPayApiConfig = AliPayApiConfig.builder()
.setAppId(payConfig.getAppid())
.setAliPayPublicKey(payConfig.getPublicKey())
.setCharset("UTF-8")
.setPrivateKey(payConfig.getPrivateKey())
.setServiceUrl(payConfig.getNotifyUrl())
.setSignType("RSA2")
.build();
}
AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
return true;
}
public PayConfig getAliConfigByAppId(String appId) {
this.getWxConfigByMchId(appId);
return null;
}
public PayConfig getWxConfigByMchId(String mchId) {
return null;
}
}

View File

@@ -0,0 +1,12 @@
package com.ruoyi.cai.pay;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class PayControllerDTO {
@Schema(description = "订单号")
private String tradeNo;
@Schema(description = "微信支付的时候需要传")
private String wxAppId;
}

View File

@@ -8,6 +8,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
@Slf4j
public class PayManager {
@@ -20,6 +22,10 @@ public class PayManager {
private AwardManager awardManager;
public void callBack(String orderNo){
callBack(orderNo,null,null,null,null);
}
public void callBack(String orderNo, String transId, Map<String,String> params, String appId,PayTypeEnum payTypeEnum){
OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo);
if(orderTypeEnum == null){
log.error("订单类型有误orderNo={}",orderNo);
@@ -27,17 +33,20 @@ public class PayManager {
}
switch (orderTypeEnum){
case VIP_ORDER_SUB:
vipOrderService.orderSuccess(orderNo);
ConsumeResp vipResp = vipOrderService.orderSuccess(orderNo,params,appId,payTypeEnum);
if(vipResp.isSuccess()){
// 记录数据 TODO
}
break;
case RECHARGE_ORDER_SUB:
ConsumeResp resp = consumerManager.rechargeOrderSuccess(orderNo);
ConsumeResp resp = consumerManager.rechargeOrderSuccess(orderNo,params,appId,payTypeEnum);
if(resp.isSuccess()){
awardManager.giveFastPayAsync(resp.getUserId(), resp.getTraceId());
// 记录数据 TODO
}
break;
default:
break;
}
}
}

View File

@@ -0,0 +1,8 @@
package com.ruoyi.cai.pay;
import lombok.Data;
@Data
public class PayReturnResp {
private String data;
}

View File

@@ -0,0 +1,16 @@
package com.ruoyi.cai.pay;
public enum PayTypeEnum {
ALI(1),
WX(2),
;
private final Integer code;
PayTypeEnum(Integer code) {
this.code = code;
}
public Integer getCode() {
return code;
}
}