mirror of
https://gitee.com/dromara/dax-pay.git
synced 2025-09-04 03:30:36 +00:00
feat 证书以base64的方式保存
This commit is contained in:
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
@@ -81,6 +81,7 @@ public class AlipayConfig extends MpBaseEntity implements EntityBaseFunction<Ali
|
||||
|
||||
/** 支付宝公钥 */
|
||||
@BigField
|
||||
@EncryptionField
|
||||
@DbMySqlFieldType(MySqlFieldTypeEnum.LONGTEXT)
|
||||
@DbColumn(comment = "支付宝公钥")
|
||||
public String alipayPublicKey;
|
||||
|
@@ -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;
|
||||
|
||||
/** 应用域名,回调中会使用此参数 */
|
||||
|
@@ -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());
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user