#!/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"