改造支付证书管理模块
This commit is contained in:
@@ -1,68 +0,0 @@
|
||||
# 证书目录说明
|
||||
|
||||
这个目录用于存放支付相关的证书文件,支持Docker容器化部署。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
certs/
|
||||
├── README.md # 本说明文件
|
||||
├── wechat/ # 微信支付证书目录
|
||||
│ ├── apiclient_key.pem # 商户私钥证书
|
||||
│ ├── apiclient_cert.pem # 商户证书
|
||||
│ └── wechatpay_cert.pem # 微信支付平台证书
|
||||
└── alipay/ # 支付宝证书目录
|
||||
├── app_private_key.pem # 应用私钥
|
||||
├── appCertPublicKey.crt # 应用公钥证书
|
||||
├── alipayCertPublicKey.crt # 支付宝公钥证书
|
||||
└── alipayRootCert.crt # 支付宝根证书
|
||||
```
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 1. 开发环境
|
||||
- 将证书文件放在 `src/main/resources/certs/dev/` 目录下
|
||||
- 应用会从classpath加载证书
|
||||
|
||||
### 2. 生产环境
|
||||
- 将证书文件放在此目录下
|
||||
- Docker容器会将此目录挂载到 `/app/certs`
|
||||
- 应用会从挂载卷加载证书
|
||||
|
||||
### 3. 证书文件权限
|
||||
```bash
|
||||
# 设置证书文件为只读权限
|
||||
chmod -R 444 certs/
|
||||
|
||||
# 设置目录权限
|
||||
chmod 755 certs/
|
||||
chmod 755 certs/wechat/
|
||||
chmod 755 certs/alipay/
|
||||
```
|
||||
|
||||
## 安全注意事项
|
||||
|
||||
1. **不要将证书文件提交到版本控制系统**
|
||||
2. **确保证书文件权限设置正确**
|
||||
3. **定期更新证书文件**
|
||||
4. **备份重要的证书文件**
|
||||
|
||||
## 证书获取方式
|
||||
|
||||
### 微信支付证书
|
||||
1. 登录微信商户平台
|
||||
2. 进入"账户中心" -> "API安全"
|
||||
3. 下载商户证书和平台证书
|
||||
|
||||
### 支付宝证书
|
||||
1. 登录支付宝开放平台
|
||||
2. 进入应用详情页
|
||||
3. 在"开发设置"中下载相关证书
|
||||
|
||||
## 故障排除
|
||||
|
||||
如果遇到证书加载问题,请检查:
|
||||
1. 证书文件是否存在
|
||||
2. 证书文件路径是否正确
|
||||
3. 证书文件权限是否正确
|
||||
4. 证书文件是否已过期
|
||||
354
scripts/auto-wechat-cert.sh
Executable file
354
scripts/auto-wechat-cert.sh
Executable file
@@ -0,0 +1,354 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 微信支付证书自动化管理脚本
|
||||
# 使用RSAAutoCertificateConfig自动下载和管理证书
|
||||
# 作者: 科技小王子
|
||||
# 日期: 2024-07-26
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 配置参数
|
||||
MERCHANT_ID=""
|
||||
API_V3_KEY=""
|
||||
MERCHANT_SERIAL_NUMBER=""
|
||||
PRIVATE_KEY_PATH=""
|
||||
OUTPUT_DIR=""
|
||||
|
||||
# 显示使用说明
|
||||
show_usage() {
|
||||
echo "微信支付证书自动化管理脚本"
|
||||
echo ""
|
||||
echo "使用方法:"
|
||||
echo " $0 auto -m <商户号> -k <APIv3密钥> -s <证书序列号> -p <私钥路径> [-o <输出目录>]"
|
||||
echo " $0 test # 测试现有证书配置"
|
||||
echo " $0 status # 检查证书状态"
|
||||
echo ""
|
||||
echo "参数说明:"
|
||||
echo " -m, --merchant-id 微信支付商户号"
|
||||
echo " -k, --api-v3-key APIv3密钥"
|
||||
echo " -s, --serial-number 商户证书序列号"
|
||||
echo " -p, --private-key 商户私钥文件路径"
|
||||
echo " -o, --output-dir 输出目录(可选,默认为当前目录)"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 auto -m 1723321338 -k 0kF5OlPr482EZwtn9zGufUcqa7ovgxRL -s 2B933F7C35014A1C363642623E4A62364B34C4EB -p ./apiclient_key.pem"
|
||||
echo ""
|
||||
echo "注意:"
|
||||
echo " - 此脚本使用RSAAutoCertificateConfig自动管理证书"
|
||||
echo " - 无需手动下载wechatpay_cert.pem,系统会自动获取"
|
||||
echo " - 确保商户平台已开启API安全功能"
|
||||
}
|
||||
|
||||
# 解析命令行参数
|
||||
parse_args() {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-m|--merchant-id)
|
||||
MERCHANT_ID="$2"
|
||||
shift 2
|
||||
;;
|
||||
-k|--api-v3-key)
|
||||
API_V3_KEY="$2"
|
||||
shift 2
|
||||
;;
|
||||
-s|--serial-number)
|
||||
MERCHANT_SERIAL_NUMBER="$2"
|
||||
shift 2
|
||||
;;
|
||||
-p|--private-key)
|
||||
PRIVATE_KEY_PATH="$2"
|
||||
shift 2
|
||||
;;
|
||||
-o|--output-dir)
|
||||
OUTPUT_DIR="$2"
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
log_error "未知参数: $1"
|
||||
show_usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# 验证参数
|
||||
validate_args() {
|
||||
if [[ -z "$MERCHANT_ID" ]]; then
|
||||
log_error "缺少商户号参数 (-m)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "$API_V3_KEY" ]]; then
|
||||
log_error "缺少APIv3密钥参数 (-k)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "$MERCHANT_SERIAL_NUMBER" ]]; then
|
||||
log_error "缺少证书序列号参数 (-s)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "$PRIVATE_KEY_PATH" ]]; then
|
||||
log_error "缺少私钥路径参数 (-p)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$PRIVATE_KEY_PATH" ]]; then
|
||||
log_error "私钥文件不存在: $PRIVATE_KEY_PATH"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "$OUTPUT_DIR" ]]; then
|
||||
OUTPUT_DIR="."
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# 创建Java测试程序
|
||||
create_test_program() {
|
||||
local test_file="WechatCertTest.java"
|
||||
|
||||
cat > "$test_file" << 'EOF'
|
||||
import com.wechat.pay.java.core.Config;
|
||||
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
||||
|
||||
public class WechatCertTest {
|
||||
public static void main(String[] args) {
|
||||
if (args.length != 4) {
|
||||
System.err.println("用法: java WechatCertTest <商户号> <私钥路径> <证书序列号> <APIv3密钥>");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
String merchantId = args[0];
|
||||
String privateKeyPath = args[1];
|
||||
String serialNumber = args[2];
|
||||
String apiV3Key = args[3];
|
||||
|
||||
try {
|
||||
System.out.println("正在创建RSAAutoCertificateConfig...");
|
||||
Config config = new RSAAutoCertificateConfig.Builder()
|
||||
.merchantId(merchantId)
|
||||
.privateKeyFromPath(privateKeyPath)
|
||||
.merchantSerialNumber(serialNumber)
|
||||
.apiV3Key(apiV3Key)
|
||||
.build();
|
||||
|
||||
System.out.println("✅ 证书配置创建成功!");
|
||||
System.out.println("商户号: " + merchantId);
|
||||
System.out.println("证书序列号: " + serialNumber);
|
||||
System.out.println("私钥路径: " + privateKeyPath);
|
||||
System.out.println("");
|
||||
System.out.println("🎉 RSAAutoCertificateConfig 已成功初始化");
|
||||
System.out.println("📋 系统将自动管理微信支付平台证书");
|
||||
System.out.println("🔄 证书过期时将自动更新");
|
||||
|
||||
} catch (Exception e) {
|
||||
System.err.println("❌ 证书配置失败: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "$test_file"
|
||||
}
|
||||
|
||||
# 自动配置证书
|
||||
auto_configure() {
|
||||
log_info "开始自动配置微信支付证书..."
|
||||
|
||||
# 验证参数
|
||||
if ! validate_args; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "配置信息:"
|
||||
log_info "商户号: $MERCHANT_ID"
|
||||
log_info "证书序列号: $MERCHANT_SERIAL_NUMBER"
|
||||
log_info "私钥路径: $PRIVATE_KEY_PATH"
|
||||
log_info "输出目录: $OUTPUT_DIR"
|
||||
|
||||
# 检查是否有Java环境
|
||||
if ! command -v java &> /dev/null; then
|
||||
log_error "未找到Java环境,请先安装Java"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查是否有微信支付SDK
|
||||
local classpath="."
|
||||
if [[ -f "target/classes" ]]; then
|
||||
classpath="target/classes:$classpath"
|
||||
fi
|
||||
|
||||
# 查找微信支付SDK jar文件
|
||||
local wechat_jar=$(find . -name "*wechatpay*" -name "*.jar" 2>/dev/null | head -1)
|
||||
if [[ -n "$wechat_jar" ]]; then
|
||||
classpath="$wechat_jar:$classpath"
|
||||
log_info "找到微信支付SDK: $wechat_jar"
|
||||
fi
|
||||
|
||||
# 创建测试程序
|
||||
local test_file=$(create_test_program)
|
||||
log_info "创建测试程序: $test_file"
|
||||
|
||||
# 编译测试程序
|
||||
log_info "编译测试程序..."
|
||||
if ! javac -cp "$classpath" "$test_file" 2>/dev/null; then
|
||||
log_warning "编译失败,尝试使用项目环境..."
|
||||
|
||||
# 使用Maven编译项目
|
||||
if [[ -f "pom.xml" ]]; then
|
||||
log_info "使用Maven编译项目..."
|
||||
mvn compile -q
|
||||
classpath="target/classes:$(mvn dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout)"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 运行测试
|
||||
log_info "测试证书配置..."
|
||||
if java -cp "$classpath" WechatCertTest "$MERCHANT_ID" "$PRIVATE_KEY_PATH" "$MERCHANT_SERIAL_NUMBER" "$API_V3_KEY"; then
|
||||
log_success "证书自动配置成功!"
|
||||
log_info ""
|
||||
log_info "🎯 推荐使用方式:"
|
||||
log_info "1. 在您的应用中使用 RSAAutoCertificateConfig"
|
||||
log_info "2. 系统会自动下载和管理微信支付平台证书"
|
||||
log_info "3. 无需手动下载 wechatpay_cert.pem 文件"
|
||||
log_info ""
|
||||
log_info "📝 代码示例:"
|
||||
echo "Config config = new RSAAutoCertificateConfig.Builder()"
|
||||
echo " .merchantId(\"$MERCHANT_ID\")"
|
||||
echo " .privateKeyFromPath(\"$PRIVATE_KEY_PATH\")"
|
||||
echo " .merchantSerialNumber(\"$MERCHANT_SERIAL_NUMBER\")"
|
||||
echo " .apiV3Key(\"$API_V3_KEY\")"
|
||||
echo " .build();"
|
||||
else
|
||||
log_error "证书配置测试失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 清理临时文件
|
||||
rm -f "$test_file" "${test_file%.java}.class"
|
||||
}
|
||||
|
||||
# 检查证书状态
|
||||
check_status() {
|
||||
log_info "检查证书状态..."
|
||||
|
||||
# 检查开发环境证书
|
||||
local dev_cert_dir="src/main/resources/certs/dev/wechat"
|
||||
if [[ -d "$dev_cert_dir" ]]; then
|
||||
log_info "开发环境证书目录: $dev_cert_dir"
|
||||
for file in apiclient_key.pem apiclient_cert.pem; do
|
||||
if [[ -f "$dev_cert_dir/$file" ]]; then
|
||||
log_success "✓ $file"
|
||||
else
|
||||
log_warning "✗ $file (不存在)"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# 检查生产环境证书
|
||||
local prod_cert_dir="certs/wechat"
|
||||
if [[ -d "$prod_cert_dir" ]]; then
|
||||
log_info "生产环境证书目录: $prod_cert_dir"
|
||||
for file in apiclient_key.pem apiclient_cert.pem; do
|
||||
if [[ -f "$prod_cert_dir/$file" ]]; then
|
||||
log_success "✓ $file"
|
||||
else
|
||||
log_warning "✗ $file (不存在)"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
log_info ""
|
||||
log_info "💡 提示:"
|
||||
log_info "使用 RSAAutoCertificateConfig 时,只需要以下文件:"
|
||||
log_info "- apiclient_key.pem (商户私钥)"
|
||||
log_info "- 商户号、证书序列号、APIv3密钥"
|
||||
log_info "- wechatpay_cert.pem 将自动下载和管理"
|
||||
}
|
||||
|
||||
# 测试现有配置
|
||||
test_config() {
|
||||
log_info "测试现有证书配置..."
|
||||
|
||||
# 从配置文件读取参数
|
||||
local config_file="src/main/resources/application.yml"
|
||||
if [[ -f "$config_file" ]]; then
|
||||
log_info "从配置文件读取参数: $config_file"
|
||||
|
||||
# 提取配置信息(简单解析)
|
||||
local api_key=$(grep -A 10 "wechat-pay:" "$config_file" | grep "api-v3-key:" | sed 's/.*: *"\(.*\)".*/\1/')
|
||||
local private_key_file=$(grep -A 10 "wechat-pay:" "$config_file" | grep "private-key-file:" | sed 's/.*: *"\(.*\)".*/\1/')
|
||||
|
||||
if [[ -n "$api_key" && -n "$private_key_file" ]]; then
|
||||
log_info "找到配置:"
|
||||
log_info "APIv3密钥: ${api_key:0:8}..."
|
||||
log_info "私钥文件: $private_key_file"
|
||||
|
||||
local full_private_key_path="src/main/resources/certs/dev/wechat/$private_key_file"
|
||||
if [[ -f "$full_private_key_path" ]]; then
|
||||
log_success "私钥文件存在: $full_private_key_path"
|
||||
log_info ""
|
||||
log_info "✅ 配置看起来正常,可以使用 RSAAutoCertificateConfig"
|
||||
else
|
||||
log_warning "私钥文件不存在: $full_private_key_path"
|
||||
fi
|
||||
else
|
||||
log_warning "未能从配置文件解析到完整信息"
|
||||
fi
|
||||
else
|
||||
log_warning "配置文件不存在: $config_file"
|
||||
fi
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
case "${1:-}" in
|
||||
"auto")
|
||||
shift
|
||||
parse_args "$@"
|
||||
auto_configure
|
||||
;;
|
||||
"test")
|
||||
test_config
|
||||
;;
|
||||
"status")
|
||||
check_status
|
||||
;;
|
||||
*)
|
||||
show_usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
||||
160
scripts/quick-wechat-cert.sh
Executable file
160
scripts/quick-wechat-cert.sh
Executable file
@@ -0,0 +1,160 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 微信支付证书快速配置脚本
|
||||
# 使用项目现有配置和RSAAutoCertificateConfig
|
||||
# 作者: 科技小王子
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
||||
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
||||
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
|
||||
|
||||
echo "🚀 微信支付证书自动配置工具"
|
||||
echo "================================"
|
||||
|
||||
# 使用您提供的参数
|
||||
MERCHANT_ID="1723321338"
|
||||
API_V3_KEY="0kF5OlPr482EZwtn9zGufUcqa7ovgxRL"
|
||||
MERCHANT_SERIAL_NUMBER="2B933F7C35014A1C363642623E4A62364B34C4EB"
|
||||
PRIVATE_KEY_PATH="src/main/resources/certs/dev/wechat/apiclient_key.pem"
|
||||
|
||||
log_info "使用以下配置:"
|
||||
log_info "商户号: $MERCHANT_ID"
|
||||
log_info "证书序列号: $MERCHANT_SERIAL_NUMBER"
|
||||
log_info "私钥路径: $PRIVATE_KEY_PATH"
|
||||
|
||||
# 检查私钥文件
|
||||
if [[ ! -f "$PRIVATE_KEY_PATH" ]]; then
|
||||
log_warning "私钥文件不存在: $PRIVATE_KEY_PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "私钥文件存在: $PRIVATE_KEY_PATH"
|
||||
|
||||
# 创建简单的Java测试程序
|
||||
cat > WechatAutoTest.java << 'EOF'
|
||||
import com.wechat.pay.java.core.Config;
|
||||
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
||||
|
||||
public class WechatAutoTest {
|
||||
public static void main(String[] args) {
|
||||
String merchantId = args[0];
|
||||
String privateKeyPath = args[1];
|
||||
String serialNumber = args[2];
|
||||
String apiV3Key = args[3];
|
||||
|
||||
try {
|
||||
System.out.println("🔧 正在创建 RSAAutoCertificateConfig...");
|
||||
|
||||
Config config = new RSAAutoCertificateConfig.Builder()
|
||||
.merchantId(merchantId)
|
||||
.privateKeyFromPath(privateKeyPath)
|
||||
.merchantSerialNumber(serialNumber)
|
||||
.apiV3Key(apiV3Key)
|
||||
.build();
|
||||
|
||||
System.out.println("✅ 微信支付证书配置成功!");
|
||||
System.out.println("");
|
||||
System.out.println("📋 配置信息:");
|
||||
System.out.println(" 商户号: " + merchantId);
|
||||
System.out.println(" 证书序列号: " + serialNumber);
|
||||
System.out.println(" 私钥路径: " + privateKeyPath);
|
||||
System.out.println("");
|
||||
System.out.println("🎉 RSAAutoCertificateConfig 已成功初始化");
|
||||
System.out.println("📥 系统将自动下载微信支付平台证书");
|
||||
System.out.println("🔄 证书过期时将自动更新");
|
||||
System.out.println("🚫 无需手动下载 wechatpay_cert.pem");
|
||||
System.out.println("");
|
||||
System.out.println("✨ 您的微信支付证书配置已完成!");
|
||||
|
||||
} catch (Exception e) {
|
||||
System.err.println("❌ 证书配置失败: " + e.getMessage());
|
||||
System.err.println("");
|
||||
System.err.println("🔍 可能的原因:");
|
||||
System.err.println("1. 商户平台未开启API安全功能");
|
||||
System.err.println("2. APIv3密钥不正确");
|
||||
System.err.println("3. 证书序列号不匹配");
|
||||
System.err.println("4. 网络连接问题");
|
||||
System.err.println("");
|
||||
System.err.println("💡 解决方案:");
|
||||
System.err.println("1. 登录微信商户平台 -> 账户中心 -> API安全");
|
||||
System.err.println("2. 确认已申请使用微信支付公钥");
|
||||
System.err.println("3. 检查APIv3密钥和证书序列号");
|
||||
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
log_info "创建测试程序..."
|
||||
|
||||
# 构建classpath
|
||||
CLASSPATH="target/classes"
|
||||
if [[ -f "pom.xml" ]]; then
|
||||
log_info "编译项目..."
|
||||
mvn compile -q > /dev/null 2>&1 || true
|
||||
|
||||
# 获取依赖classpath
|
||||
DEPS_CP=$(mvn dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout 2>/dev/null || echo "")
|
||||
if [[ -n "$DEPS_CP" ]]; then
|
||||
CLASSPATH="$CLASSPATH:$DEPS_CP"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 编译测试程序
|
||||
log_info "编译测试程序..."
|
||||
if javac -cp "$CLASSPATH" WechatAutoTest.java 2>/dev/null; then
|
||||
log_success "编译成功"
|
||||
else
|
||||
log_warning "编译失败,但这不影响使用 RSAAutoCertificateConfig"
|
||||
fi
|
||||
|
||||
# 运行测试
|
||||
log_info "测试证书自动配置..."
|
||||
echo ""
|
||||
|
||||
if java -cp "$CLASSPATH:." WechatAutoTest "$MERCHANT_ID" "$PRIVATE_KEY_PATH" "$MERCHANT_SERIAL_NUMBER" "$API_V3_KEY" 2>/dev/null; then
|
||||
echo ""
|
||||
log_success "🎯 证书自动配置测试成功!"
|
||||
else
|
||||
echo ""
|
||||
log_warning "⚠️ 测试失败,但您仍可以在应用中使用 RSAAutoCertificateConfig"
|
||||
echo ""
|
||||
echo "📝 在您的代码中使用以下配置:"
|
||||
echo ""
|
||||
echo "Config config = new RSAAutoCertificateConfig.Builder()"
|
||||
echo " .merchantId(\"$MERCHANT_ID\")"
|
||||
echo " .privateKeyFromPath(\"$PRIVATE_KEY_PATH\")"
|
||||
echo " .merchantSerialNumber(\"$MERCHANT_SERIAL_NUMBER\")"
|
||||
echo " .apiV3Key(\"$API_V3_KEY\")"
|
||||
echo " .build();"
|
||||
echo ""
|
||||
echo "🔧 如果仍有问题,请检查:"
|
||||
echo "1. 微信商户平台是否已开启API安全"
|
||||
echo "2. 是否已申请使用微信支付公钥"
|
||||
echo "3. 网络连接是否正常"
|
||||
fi
|
||||
|
||||
# 清理临时文件
|
||||
rm -f WechatAutoTest.java WechatAutoTest.class
|
||||
|
||||
echo ""
|
||||
log_info "🎉 脚本执行完成!"
|
||||
echo ""
|
||||
echo "💡 重要提示:"
|
||||
echo "1. RSAAutoCertificateConfig 是官方推荐的证书管理方式"
|
||||
echo "2. 它会自动处理平台证书的下载和更新"
|
||||
echo "3. 您无需再手动下载 wechatpay_cert.pem 文件"
|
||||
echo "4. 证书过期时会自动更新,无需人工干预"
|
||||
echo ""
|
||||
echo "📚 更多信息请参考:"
|
||||
echo " https://pay.weixin.qq.com/doc/v3/merchant/4012153196"
|
||||
@@ -32,7 +32,7 @@ knife4j:
|
||||
config:
|
||||
# 生产环境接口
|
||||
server-url: https://server.gxwebsoft.com/api
|
||||
upload-path: /www/wwwroot/file.ws
|
||||
upload-path: /www/wwwroot/file.ws/
|
||||
|
||||
# 阿里云OSS云存储
|
||||
endpoint: https://oss-cn-shenzhen.aliyuncs.com
|
||||
|
||||
BIN
src/main/resources/certs/dev/wechat/10550/apiclient_cert.p12
Normal file
BIN
src/main/resources/certs/dev/wechat/10550/apiclient_cert.p12
Normal file
Binary file not shown.
25
src/main/resources/certs/dev/wechat/10550/apiclient_cert.pem
Normal file
25
src/main/resources/certs/dev/wechat/10550/apiclient_cert.pem
Normal file
@@ -0,0 +1,25 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEQDCCAyigAwIBAgIUK5M/fDUBShw2NkJiPkpiNks0xOswDQYJKoZIhvcNAQEL
|
||||
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
|
||||
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
|
||||
Q0EwHhcNMjUwNzI2MTI1MjMyWhcNMzAwNzI1MTI1MjMyWjCBmTETMBEGA1UEAwwK
|
||||
MTcyMzMyMTMzODEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMUUwQwYDVQQL
|
||||
DDzmnZzlsJTkvK/nibnokpnlj6Tml4/oh6rmsrvljr/ml7bph4zlhpzkuJrnp5Hm
|
||||
ioDmnInpmZDlhazlj7gxCzAJBgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCC
|
||||
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANO4sq8tWbg5Zg6ioIltG8ME
|
||||
8D1V3w4SXcsqBm5ilyCBVflQTHLqTUIKtU9BeR7+SQpeArDDFEVaMfn4ZuHlHPkY
|
||||
Eic7YvuHMxH82IBAt9Ryz1m9ULTvae9Z3JGWEhIPiG/FmXjrak4LUlPoHDi22pVy
|
||||
XLallAacP/1O8UKFg3KaGNi5/ZrTgoDr/hHkdW1CR12PlqxAV3fSShqAhwEemHav
|
||||
msRptybIJND7K97XA3UPBxP84f2FuHwlj0c1sCqwI/C4R4hDZI7ShG+BEnNcUuDD
|
||||
plk3qjj3igHUX6KfZZ5V6/MWUw02inV+SH72dDKdhItLFdZlT8bpvxjjb9UYr4MC
|
||||
AwEAAaOBuTCBtjAJBgNVHRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQ
|
||||
MIGNoIGKoIGHhoGEaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1
|
||||
c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQy
|
||||
JnNnPUhBQ0M0NzFCNjU0MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcx
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQAzIMqiMPT8gsJo3eEkppJPwOcA8SrPxrSJ0qV4
|
||||
/kZlu1ceClIy2aOPXDjf/LjB0I4YabU7/J8pLnXbKPKe2fSG1AycjrLEsZTOJ51M
|
||||
Yahvj6sRJoC5aa+xQOj17VAVqySEg0JyK/5k6kvAulPO1dG6/YGoycAdDflJOjyd
|
||||
mIHWQzlEJb5+LWQFCwskMTWy3CUF9Edw7jhgJwkl24CztocGrJ+AfJzoBTkfZmNO
|
||||
TxD5gVSK00B1r7+ipS+iLXxWeHCpaRsG3PSsByWDA6pphlwr5IMghqne465gavWi
|
||||
muwrpaGPdVi6+vz/QFyMelj4GT8g77VGVRCOa8DUvu0QxjTk
|
||||
-----END CERTIFICATE-----
|
||||
28
src/main/resources/certs/dev/wechat/10550/apiclient_key.pem
Normal file
28
src/main/resources/certs/dev/wechat/10550/apiclient_key.pem
Normal file
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDTuLKvLVm4OWYO
|
||||
oqCJbRvDBPA9Vd8OEl3LKgZuYpcggVX5UExy6k1CCrVPQXke/kkKXgKwwxRFWjH5
|
||||
+Gbh5Rz5GBInO2L7hzMR/NiAQLfUcs9ZvVC072nvWdyRlhISD4hvxZl462pOC1JT
|
||||
6Bw4ttqVcly2pZQGnD/9TvFChYNymhjYuf2a04KA6/4R5HVtQkddj5asQFd30koa
|
||||
gIcBHph2r5rEabcmyCTQ+yve1wN1DwcT/OH9hbh8JY9HNbAqsCPwuEeIQ2SO0oRv
|
||||
gRJzXFLgw6ZZN6o494oB1F+in2WeVevzFlMNNop1fkh+9nQynYSLSxXWZU/G6b8Y
|
||||
42/VGK+DAgMBAAECggEAIgBuid2RpBlrv3v0pj1kkPxRDLimut7OO1uDbuTcenbq
|
||||
9MAllurz/2Ay4AiWyBh0aHrSmcqqjby/e/KdqzedYI+yEqTh75014XSm3GoIW9EY
|
||||
ZcQWmwg8DhlzZ9ofCtF9yt2EGTxNdT0yOpFzPtR25DtakmajEDC1whuUeWdxxcyY
|
||||
2fDnIDeyaYfWSD0MWBYCa3+8TcvM/gCYzamr/Tfj59VwsznPNr5ehkQdCCRWVMAr
|
||||
gg+h6ZOta8fSPwY11T6B743f5uyUUatKH90Yvg8OgbNqoqWyuPSoXM+VF0YOQk2N
|
||||
0Q0gKnQ4ReDPFPBDXLfzQ4Q7g+N+S2u12r1u6z/E6QKBgQDsAvEO4l22pV6pltX9
|
||||
DDu6qyjPrRE7wadahFDWE7Rm3ENp69Ha1DqaNMYzGzSjcVZX0eoXsBw/cfyhjlML
|
||||
vxw72SRS4XdZSJ+pfrtLw8n1XcuW8xOupVD0s9oLLB2dBXcJeytCM5UITZZHbJei
|
||||
Y90Rlg88Ud7evO9kaENIouYc/QKBgQDlpx1t2qmjQcaXS1Ohe09ovCzxIr3jv8LQ
|
||||
TQkM3wS9RdfOqX3MynnCopBlEYgxJFORQx2pzT1TmGtg5UOGP6Reck64oI8C+Vjt
|
||||
AkFlODk1JCjeSgoR1zw1+KEwOZ9x2jswC1E3oZsFU+FdbrdyBiCyHRAXfWX3QW8y
|
||||
CQIu6gnmfwKBgEALLE7Vroh5p45tl/Pq9epZt+FjHWIR0tAFR8pP3oxrCQAdNf0j
|
||||
yiM+XupPX6FaiAucsuFqsL+mtt9AN9jgK1EyQ2EaPcDErE7aTQjqQEuNAEod/CFQ
|
||||
Sv+cLncJqZ+KdBrmiX6VcMOoCjeniB5Q6xRym//KV6gprOyaPmffjIIhAoGAc1qQ
|
||||
7rgyE34bma1NkcRVq98xl+ICjd6ppWW8kQmI4OWvM/Bw7ygZJwnvC8VVqpF7pHCY
|
||||
+szL7CyYazBdzZY0Ivi50AVeMHk9ELfcT1KBcc769EUub620YcvEc2vOSir7JfPZ
|
||||
VN9I9dEfV4YggRbQ34a3qYTkbeEhUHmz7grC9FMCgYBOanMGgmxLyRkrJdFvSgr5
|
||||
cBFeUxyr2jqgNrNbE77d5yB1lbgtWKQuokszSaxdnxGnsANSYdeF1FVI9zhcaqJf
|
||||
xB2xOMesrNksZ4C+fKkSgmeofXi+D5aWYIZVuj73KInzJsvpci7z8qLK6/RjZsyF
|
||||
TomCc7Iv0ufa1OirExFaNA==
|
||||
-----END PRIVATE KEY-----
|
||||
Reference in New Issue
Block a user