170 lines
5.8 KiB
Bash
Executable File
170 lines
5.8 KiB
Bash
Executable File
#!/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"
|
|
# 检测脚本运行位置并设置正确的路径
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
|
|
PRIVATE_KEY_PATH="$PROJECT_ROOT/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"
|
|
log_info "项目根目录: $PROJECT_ROOT"
|
|
log_info "脚本目录: $SCRIPT_DIR"
|
|
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 "创建测试程序..."
|
|
|
|
# 切换到项目根目录进行编译
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# 构建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"
|