feat 证书以base64的方式保存

This commit is contained in:
xxm1995
2023-07-11 15:50:32 +08:00
parent 5948761b67
commit 68cb1c85ef
7 changed files with 45 additions and 18 deletions

View File

@@ -9,10 +9,13 @@ import cn.bootx.platform.daxpay.core.channel.alipay.service.AlipayConfigService;
import cn.bootx.platform.daxpay.dto.channel.alipay.AlipayConfigDto;
import cn.bootx.platform.daxpay.param.channel.alipay.AlipayConfigParam;
import cn.bootx.platform.daxpay.param.channel.alipay.AlipayConfigQuery;
import cn.hutool.core.codec.Base64;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@@ -60,4 +63,10 @@ public class AlipayConfigController {
return Res.ok(alipayConfigService.findPayWayList());
}
@SneakyThrows
@Operation(summary = "将文件转换成base64")
@PostMapping("/toBase64")
public ResResult<String> toBase64(MultipartFile file){
return Res.ok(Base64.encode(file.getBytes()));
}
}

View File

@@ -8,10 +8,13 @@ import cn.bootx.platform.common.core.rest.param.PageParam;
import cn.bootx.platform.daxpay.core.channel.wechat.service.WeChatPayConfigService;
import cn.bootx.platform.daxpay.dto.channel.wechat.WeChatPayConfigDto;
import cn.bootx.platform.daxpay.param.channel.wechat.WeChatPayConfigParam;
import cn.hutool.core.codec.Base64;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@@ -59,4 +62,10 @@ public class WeChatPayConfigController {
return Res.ok(weChatPayConfigService.findPayWayList());
}
@SneakyThrows
@Operation(summary = "将文件转换成base64")
@PostMapping("/toBase64")
public ResResult<String> toBase64(MultipartFile file){
return Res.ok(Base64.encode(file.getBytes()));
}
}

View File

@@ -81,6 +81,7 @@ public class AlipayConfig extends MpBaseEntity implements EntityBaseFunction<Ali
/** 支付宝公钥 */
@BigField
@EncryptionField
@DbMySqlFieldType(MySqlFieldTypeEnum.LONGTEXT)
@DbColumn(comment = "支付宝公钥")
public String alipayPublicKey;

View File

@@ -2,7 +2,9 @@ package cn.bootx.platform.daxpay.core.channel.wechat.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlFieldType;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlIndex;
import cn.bootx.mybatis.table.modify.mybatis.mysq.constants.MySqlFieldTypeEnum;
import cn.bootx.platform.common.core.annotation.BigField;
import cn.bootx.platform.common.core.annotation.EncryptionField;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
@@ -57,39 +59,44 @@ public class WeChatPayConfig extends MpBaseEntity implements EntityBaseFunction<
/** 商户平台「API安全」中的 APIv2 密钥 */
@TableField(updateStrategy = FieldStrategy.IGNORED)
@BigField
@EncryptionField
@DbColumn(comment = "APIv2 密钥")
private String apiKeyV2;
/** 商户平台「API安全」中的 APIv3 密钥 */
@TableField(updateStrategy = FieldStrategy.IGNORED)
@BigField
@EncryptionField
@DbColumn(comment = "APIv3 密钥")
private String apiKeyV3;
/** APPID对应的接口密码用于获取微信公众号jsapi支付时使用 */
@TableField(updateStrategy = FieldStrategy.IGNORED)
@EncryptionField
@DbColumn(comment = "APPID对应的接口密码")
private String appSecret;
/** API 证书中的 p12 文件存储的 id */
@TableField(updateStrategy = FieldStrategy.IGNORED)
@EncryptionField
@DbColumn(comment = "API 证书中的 p12 文件存储的 id")
private Long p12;
/** API 证书中的 cert.pem 证书 */
/** .p12证书Base64 */
@TableField(updateStrategy = FieldStrategy.IGNORED)
@BigField
@EncryptionField
@DbColumn(comment = "API 证书中的 cert.pem 证书 ")
@DbMySqlFieldType(MySqlFieldTypeEnum.LONGTEXT)
@DbColumn(comment = "API 证书中的 p12 文件存储的 id")
private String p12;
/** cert.pem证书的Base64 */
@TableField(updateStrategy = FieldStrategy.IGNORED)
@BigField
@DbMySqlFieldType(MySqlFieldTypeEnum.LONGTEXT)
@DbColumn(comment = "cert.pem证书的Base64")
private String certPem;
/** API 证书中的 key.pem 私钥 */
/** key.pem私钥Base64 */
@TableField(updateStrategy = FieldStrategy.IGNORED)
@DbMySqlFieldType(MySqlFieldTypeEnum.LONGTEXT)
@BigField
@EncryptionField
@DbColumn(comment = "API 证书中的 key.pem 私钥")
@DbColumn(comment = "私钥key.pem的Base64")
private String keyPem;
/** 应用域名,回调中会使用此参数 */

View File

@@ -2,12 +2,13 @@ package cn.bootx.platform.daxpay.core.channel.wechat.service;
import cn.bootx.platform.common.spring.exception.RetryableException;
import cn.bootx.platform.daxpay.code.paymodel.WeChatPayCode;
import cn.bootx.platform.daxpay.core.refund.local.AsyncRefundLocal;
import cn.bootx.platform.daxpay.core.payment.entity.Payment;
import cn.bootx.platform.daxpay.core.channel.wechat.entity.WeChatPayConfig;
import cn.bootx.platform.daxpay.core.channel.wechat.entity.WeChatPayment;
import cn.bootx.platform.daxpay.core.payment.entity.Payment;
import cn.bootx.platform.daxpay.core.refund.local.AsyncRefundLocal;
import cn.bootx.platform.daxpay.exception.payment.PayFailureException;
import cn.bootx.platform.starter.file.service.FileUploadService;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.ijpay.core.enums.SignType;
@@ -23,7 +24,6 @@ import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.math.BigDecimal;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import static cn.bootx.platform.daxpay.code.pay.PayStatusCode.REFUND_PROCESS_FAIL;
@@ -79,13 +79,13 @@ public class WeChatPayCancelService {
.build()
.createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256);
// 获取证书文件流
if (Objects.isNull(weChatPayConfig.getP12())){
if (StrUtil.isNotBlank(weChatPayConfig.getP12())){
String errorMsg = "微信p.12证书未配置,无法进行退款";
AsyncRefundLocal.setErrorMsg(errorMsg);
AsyncRefundLocal.setErrorCode(REFUND_PROCESS_FAIL);
throw new PayFailureException(errorMsg);
}
byte[] fileBytes = uploadService.getFileBytes(weChatPayConfig.getP12());
byte[] fileBytes = Base64.decode(weChatPayConfig.getP12());
ByteArrayInputStream inputStream = new ByteArrayInputStream(fileBytes);
// 证书密码为 微信商户号
String xmlResult = WxPayApi.orderRefund(false, params, inputStream, weChatPayConfig.getWxMchId());

View File

@@ -44,7 +44,8 @@ public class WeChatPayConfigDto extends BaseDto implements Serializable {
private String appSecret;
@Schema(description = "API 证书中的 p12 文件id")
private Long p12;
@SensitiveInfo
private String p12;
@Schema(description = "API 证书中的 cert.pem 证书")
@SensitiveInfo(value = SensitiveInfo.SensitiveType.OTHER, front = 15)

View File

@@ -47,7 +47,7 @@ public class WeChatPayConfigParam {
private String appSecret;
@Schema(description = "API 证书中的 p12 文件id")
private Long p12;
private String p12;
@Schema(description = "API 证书中的 cert.pem 证书")
private String certPem;